diff --git a/.circleci/config.yml b/.circleci/config.yml index 06a3fd53c4..326143d9f0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -36,7 +36,7 @@ shared: &shared # run tests! - run: mvn clean verify -B -U - # store any dumps + # save any dumps - run: name: save any dumps command: | @@ -51,7 +51,7 @@ shared: &shared # save test results - run: - name: Save test results + name: save test results command: | mkdir -p ~/test-results/junit/ find . -type f -regex ".*/surefire-reports/.*" -exec cp {} ~/test-results/junit/ \; diff --git a/README.md b/README.md index 5f73725d54..5cd89918d0 100644 --- a/README.md +++ b/README.md @@ -42,28 +42,29 @@ You can also subscribe via Email [aem-core-components-dev+subscribe@googlegroups 7. [Title](content/src/content/jcr_root/apps/core/wcm/components/title/v2/title) 8. [Image](content/src/content/jcr_root/apps/core/wcm/components/image/v2/image) 9. [Download](content/src/content/jcr_root/apps/core/wcm/components/download/v1/download) -10. [Teaser](content/src/content/jcr_root/apps/core/wcm/components/teaser/v1/teaser) -11. [Button](content/src/content/jcr_root/apps/core/wcm/components/button/v1/button) -16. [List](content/src/content/jcr_root/apps/core/wcm/components/list/v2/list) +10. [Experience Fragment](content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment) +11. [Teaser](content/src/content/jcr_root/apps/core/wcm/components/teaser/v1/teaser) +12. [Button](content/src/content/jcr_root/apps/core/wcm/components/button/v1/button) +13. [List](content/src/content/jcr_root/apps/core/wcm/components/list/v2/list) 14. [Content Fragment](content/src/content/jcr_root/apps/core/wcm/components/contentfragment/v1/contentfragment) 15. [Content Fragment List](content/src/content/jcr_root/apps/core/wcm/components/contentfragmentlist/v1/contentfragmentlist) -12. [Separator](content/src/content/jcr_root/apps/core/wcm/components/separator/v1/separator) -13. [Sharing](content/src/content/jcr_root/apps/core/wcm/components/sharing/v1/sharing) +16. [Separator](content/src/content/jcr_root/apps/core/wcm/components/separator/v1/separator) +17. [Sharing](content/src/content/jcr_root/apps/core/wcm/components/sharing/v1/sharing) ### Container components -17. [Container](content/src/content/jcr_root/apps/core/wcm/components/container/v1/container) -18. [Carousel](content/src/content/jcr_root/apps/core/wcm/components/carousel/v1/carousel) -19. [Accordion](content/src/content/jcr_root/apps/core/wcm/components/accordion/v1/accordion) -20. [Tabs](content/src/content/jcr_root/apps/core/wcm/components/tabs/v1/tabs) +18. [Container](content/src/content/jcr_root/apps/core/wcm/components/container/v1/container) +19. [Carousel](content/src/content/jcr_root/apps/core/wcm/components/carousel/v1/carousel) +20. [Accordion](content/src/content/jcr_root/apps/core/wcm/components/accordion/v1/accordion) +21. [Tabs](content/src/content/jcr_root/apps/core/wcm/components/tabs/v1/tabs) ### Form components -21. [Form container](content/src/content/jcr_root/apps/core/wcm/components/form/container/v2/container) -22. [Form text field](content/src/content/jcr_root/apps/core/wcm/components/form/text/v2/text) -23. [Form options field](content/src/content/jcr_root/apps/core/wcm/components/form/options/v2/options) -24. [Form hidden field](content/src/content/jcr_root/apps/core/wcm/components/form/hidden/v2/hidden) -25. [Form button](content/src/content/jcr_root/apps/core/wcm/components/form/button/v2/button) +22. [Form container](content/src/content/jcr_root/apps/core/wcm/components/form/container/v2/container) +23. [Form text field](content/src/content/jcr_root/apps/core/wcm/components/form/text/v2/text) +24. [Form options field](content/src/content/jcr_root/apps/core/wcm/components/form/options/v2/options) +25. [Form hidden field](content/src/content/jcr_root/apps/core/wcm/components/form/hidden/v2/hidden) +26. [Form button](content/src/content/jcr_root/apps/core/wcm/components/form/button/v2/button) Visit the [roadmap wiki page](https://github.com/adobe/aem-core-wcm-components/wiki) for main upcoming components and features. @@ -77,7 +78,7 @@ The latest version of the Core Components, require the below system requirements Core Components | AEM 6.5 | AEM 6.4 | AEM 6.3 | Java ----------------|---------|---------|---------|------ -[2.5.0](https://github.com/adobe/aem-core-wcm-components/releases/tag/core.wcm.components.reactor-2.5.0) | 6.5.0.0+ | 6.4.2.0+ | 6.3.3.0+ | 8, 11 +[2.6.0](https://github.com/adobe/aem-core-wcm-components/releases/tag/core.wcm.components.reactor-2.6.0) | 6.5.0.0+ | 6.4.4.0+ | 6.3.3.4+ | 8, 11 For a list of requirements for previous versions, see [Historical System Requirements](VERSIONS.md). @@ -137,7 +138,7 @@ To include the core components package into your own project's maven build using com.adobe.cq core.wcm.components.all zip - 2.5.0 + 2.6.0 ``` @@ -162,7 +163,7 @@ To include the core components package into your own project using AEM Archetype com.adobe.cq core.wcm.components.all zip - 2.5.0 + 2.6.0 ``` diff --git a/VERSIONS.md b/VERSIONS.md index 4bc92b553f..b826c1c7fe 100644 --- a/VERSIONS.md +++ b/VERSIONS.md @@ -4,6 +4,7 @@ See below for a full list of system requirements for historical versions of the Core Components | Extension | AEM 6.5 | AEM 6.4 | AEM 6.3 | Java ----------------|-----------|---------|---------|---------|------ +[2.6.0](https://github.com/adobe/aem-core-wcm-components/releases/tag/core.wcm.components.reactor-2.6.0) | - | 6.5.0.0+ | 6.4.4.0+ | 6.3.3.4+ | 8, 11 [2.5.0](https://github.com/adobe/aem-core-wcm-components/releases/tag/core.wcm.components.reactor-2.5.0) | - | 6.5.0.0+ | 6.4.2.0+ | 6.3.3.0+ | 8, 11 [2.4.0](https://github.com/adobe/aem-core-wcm-components/releases/tag/core.wcm.components.reactor-2.4.0) | - | 6.5.0.0+ | 6.4.2.0+ | 6.3.3.0+ | 8, 11 [2.3.2](https://github.com/adobe/aem-core-wcm-components/releases/tag/core.wcm.components.reactor-2.3.2) | 1.0.12 | 6.5.0.0+ | 6.4.2.0+ | 6.3.3.0+ | 8 diff --git a/bundles/core/pom.xml b/bundles/core/pom.xml index 5f90669e5e..747e9653dc 100644 --- a/bundles/core/pom.xml +++ b/bundles/core/pom.xml @@ -465,7 +465,6 @@ test - io.wcm diff --git a/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/models/v1/ExperienceFragmentImpl.java b/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/models/v1/ExperienceFragmentImpl.java index bb12e6a943..1b8c236cbd 100644 --- a/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/models/v1/ExperienceFragmentImpl.java +++ b/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/models/v1/ExperienceFragmentImpl.java @@ -23,6 +23,7 @@ import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; +import org.apache.sling.api.resource.ValueMap; import org.apache.sling.models.annotations.Exporter; import org.apache.sling.models.annotations.Model; import org.apache.sling.models.annotations.injectorspecific.*; @@ -33,6 +34,7 @@ import com.adobe.cq.export.json.ComponentExporter; import com.adobe.cq.export.json.ExporterConstants; import com.adobe.cq.wcm.core.components.models.ExperienceFragment; +import com.adobe.cq.xf.ExperienceFragmentsConstants; import com.day.cq.wcm.api.LanguageManager; import com.day.cq.wcm.api.Page; import com.day.cq.wcm.api.Template; @@ -71,8 +73,8 @@ public class ExperienceFragmentImpl implements ExperienceFragment { @ScriptVariable private Page currentPage; - @ValueMapValue(name = ExperienceFragment.PN_FRAGMENT_PATH, injectionStrategy = InjectionStrategy.OPTIONAL) - private String fragmentPath; + @ValueMapValue(name = ExperienceFragment.PN_FRAGMENT_VARIATION_PATH, injectionStrategy = InjectionStrategy.OPTIONAL) + private String fragmentVariationPath; @OSGiService private LanguageManager languageManager; @@ -80,29 +82,32 @@ public class ExperienceFragmentImpl implements ExperienceFragment { @OSGiService private LiveRelationshipManager relationshipManager; - private String localizedFragmentPath; + private String localizedFragmentVariationPath; @PostConstruct protected void initModel() { if (inTemplate()) { String currentPageRootPath = getLocalizationRoot(currentPage.getPath()); // we should use getLocalizationRoot instead of getXfLocalizationRoot once the XF UI supports creating Live and Language Copies - String xfRootPath = getXfLocalizationRoot(fragmentPath, currentPageRootPath); + String xfRootPath = getXfLocalizationRoot(fragmentVariationPath, currentPageRootPath); if (!StringUtils.isEmpty(currentPageRootPath) && !StringUtils.isEmpty(xfRootPath)) { - String xfRelativePath = StringUtils.substring(fragmentPath, xfRootPath.length()); + String xfRelativePath = StringUtils.substring(fragmentVariationPath, xfRootPath.length()); String localizedXfRootPath = StringUtils.replace(currentPageRootPath, CONTENT_ROOT, EXPERIENCE_FRAGMENTS_ROOT, 1); - localizedFragmentPath = StringUtils.join(localizedXfRootPath, xfRelativePath, JCR_CONTENT_ROOT); + localizedFragmentVariationPath = StringUtils.join(localizedXfRootPath, xfRelativePath, JCR_CONTENT_ROOT); } } - String xfContentPath = StringUtils.join(fragmentPath, JCR_CONTENT_ROOT); - if (!resourceExists(localizedFragmentPath) && resourceExists(xfContentPath)) { - localizedFragmentPath = xfContentPath; + String xfContentPath = StringUtils.join(fragmentVariationPath, JCR_CONTENT_ROOT); + if (!resourceExists(localizedFragmentVariationPath) && resourceExists(xfContentPath)) { + localizedFragmentVariationPath = xfContentPath; + } + if (!isExperienceFragmentVariation(localizedFragmentVariationPath)) { + localizedFragmentVariationPath = null; } } @Override - public String getLocalizedFragmentPath() { - return localizedFragmentPath; + public String getLocalizedFragmentVariationPath() { + return localizedFragmentVariationPath; } @NotNull @@ -111,19 +116,19 @@ public String getLocalizedFragmentPath() { } /** - * Returns the localization root of the resource defined at the given path + * Returns the localization root of the resource defined at the given path. * * Use case | Path | Root - * ---------------------------------------- |--------------------------------------|------------------ + * ------------------------------------------|--------------------------------------|------------------ * 1. No localization | /content/mysite/mypage | null * 2. Language localization | /content/mysite/en/mypage | /content/mysite/en * 3. Country-language localization | /content/mysite/us/en/mypage | /content/mysite/us/en * 4. Country-language localization (variant)| /content/us/mysite/en/mypage | /content/us/mysite/en * 5. Blueprint | /content/mysite/blueprint/mypage | /content/mysite/blueprint - * 4. Livecopy | /content/mysite/livecopy/mypage | /content/mysite/livecopy + * 6. Live Copy | /content/mysite/livecopy/mypage | /content/mysite/livecopy * - * @param path the resource path. - * @return the localization root of the resource at the given path if it exists, {@code null} otherwise. + * @param path the resource path + * @return the localization root of the resource at the given path if it exists, {@code null} otherwise */ private String getLocalizationRoot(String path) { String root = null; @@ -143,8 +148,8 @@ private String getLocalizationRoot(String path) { /** * Returns the language root of the resource. * - * @param resource The resource - * @return The language root of the resource if it exists, {@code null} otherwise + * @param resource the resource + * @return the language root of the resource if it exists, {@code null} otherwise */ private String getLanguageRoot(Resource resource) { Page rootPage = languageManager.getLanguageRoot(resource); @@ -157,8 +162,8 @@ private String getLanguageRoot(Resource resource) { /** * Returns the path of the blueprint of the resource. * - * @param resource The resource - * @return The path of the blueprint of the resource if it exists, {@code null} otherwise + * @param resource the resource + * @return the path of the blueprint of the resource if it exists, {@code null} otherwise */ private String getBlueprintPath(Resource resource) { try { @@ -183,8 +188,8 @@ private String getBlueprintPath(Resource resource) { /** * Returns the path of the live copy of the resource. * - * @param resource The resource - * @return The path of the live copy of the resource if it exists, {@code null} otherwise + * @param resource the resource + * @return the path of the live copy of the resource if it exists, {@code null} otherwise */ private String getLiveCopyPath(Resource resource) { try { @@ -211,9 +216,9 @@ private String getLiveCopyPath(Resource resource) { * to be used with XF. * This method works around this issue by deducting the XF root from the XF path and the root of the current page. * - * @param xfPath The experience fragment path. - * @param currentPageRoot The localization root of the current page. - * @return The localization root of the experience fragment path if it exists, {@code null} otherwise. + * @param xfPath the experience fragment path + * @param currentPageRoot the localization root of the current page + * @return the localization root of the experience fragment path if it exists, {@code null} otherwise */ private String getXfLocalizationRoot(String xfPath, String currentPageRoot) { String xfRoot = null; @@ -234,8 +239,8 @@ private String getXfLocalizationRoot(String xfPath, String currentPageRoot) { /** * Checks if the resource exists at the given path. * - * @param path The resource path. - * @return {@code true} if the resource exists, {@code false} otherwise. + * @param path the resource path + * @return {@code true} if the resource exists, {@code false} otherwise */ private boolean resourceExists(String path) { return (StringUtils.isNotEmpty(path) && resolver.getResource(path) != null); @@ -244,11 +249,28 @@ private boolean resourceExists(String path) { /** * Checks if the resource is defined in the template. * - * @return {@code true} if the resource is defined in the template, {@code false} otherwise. + * @return {@code true} if the resource is defined in the template, {@code false} otherwise */ private boolean inTemplate () { Template template = currentPage.getTemplate(); return template != null && StringUtils.startsWith(resource.getPath(), template.getPath()); } + /** + * Checks if the resource at the given path is an Experience Fragment variation. + * + * @return {@code true} if the resource is an XF variation, {@code false} otherwise + */ + private boolean isExperienceFragmentVariation(String path) { + if (StringUtils.isNotEmpty(path)) { + Resource resource = resolver.getResource(path); + if (resource != null) { + ValueMap properties = resource.getValueMap(); + String xfVariantType = properties.get(ExperienceFragmentsConstants.PN_XF_VARIANT_TYPE, String.class); + return xfVariantType != null; + } + } + return false; + } + } diff --git a/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/models/v1/NavigationImpl.java b/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/models/v1/NavigationImpl.java index ee9d02e33d..a69713e037 100644 --- a/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/models/v1/NavigationImpl.java +++ b/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/models/v1/NavigationImpl.java @@ -242,7 +242,7 @@ private NavigationRoot(@NotNull Page navigationRoot, int configuredStructureDept /** * Gets the resource representation of the navigation root page. * - * @return The resource for the navigation root, empty if the resource could not be resolved. + * @return the resource for the navigation root, empty if the resource could not be resolved */ @NotNull final Optional getPageResource() { diff --git a/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/models/v1/PageImpl.java b/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/models/v1/PageImpl.java index ce73def92b..d5ea0d8f30 100644 --- a/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/models/v1/PageImpl.java +++ b/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/internal/models/v1/PageImpl.java @@ -234,9 +234,9 @@ public String getExportedType() { /** * Returns a map (resource name => Sling Model class) of the given resource children's Sling Models that can be adapted to {@link T}. * - * @param slingRequest The current request. - * @param modelClass The Sling Model class to be adapted to. - * @return Returns a map (resource name => Sling Model class) of the given resource children's Sling Models that can be adapted to {@link T}. + * @param slingRequest the current request + * @param modelClass the Sling Model class to be adapted to + * @return a map (resource name => Sling Model class) of the given resource children's Sling Models that can be adapted to {@link T} */ @NotNull private Map getChildModels(@NotNull SlingHttpServletRequest slingRequest, diff --git a/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/models/ExperienceFragment.java b/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/models/ExperienceFragment.java index 7e7cd0e56b..f397e837ed 100644 --- a/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/models/ExperienceFragment.java +++ b/bundles/core/src/main/java/com/adobe/cq/wcm/core/components/models/ExperienceFragment.java @@ -31,15 +31,15 @@ public interface ExperienceFragment extends ComponentExporter { /** * Name of the configuration policy property that specifies the experience fragment variation path. The property - * should provide a String value. + * should provide a {@code String} value. * * @since com.adobe.cq.wcm.core.components.models 12.9.0 */ - String PN_FRAGMENT_PATH = "fragmentPath"; + String PN_FRAGMENT_VARIATION_PATH = "fragmentVariationPath"; /** * Returns the localized path of the experience fragment variation if the experience fragment resource is defined - * in the template. If not, it returns the configured fragment path if it exists, null otherwise. + * in the template. If not, it returns the configured fragment path if it exists, {@code null} otherwise. * * If both the content page and the experience fragment have a localized root (language, live copy or blueprint), * - it is then assumed that the content pages and the experience fragments follow the same structure patterns - @@ -49,7 +49,7 @@ public interface ExperienceFragment extends ComponentExporter { * @return Localized experience fragment variation path * @since com.adobe.cq.wcm.core.components.models 12.9.0 */ - default String getLocalizedFragmentPath() { + default String getLocalizedFragmentVariationPath() { throw new UnsupportedOperationException(); } diff --git a/bundles/core/src/test/java/com/adobe/cq/wcm/core/components/internal/models/v1/ExperienceFragmentImplTest.java b/bundles/core/src/test/java/com/adobe/cq/wcm/core/components/internal/models/v1/ExperienceFragmentImplTest.java index 3c9d88321a..7eae768ccc 100644 --- a/bundles/core/src/test/java/com/adobe/cq/wcm/core/components/internal/models/v1/ExperienceFragmentImplTest.java +++ b/bundles/core/src/test/java/com/adobe/cq/wcm/core/components/internal/models/v1/ExperienceFragmentImplTest.java @@ -153,7 +153,7 @@ public Object next() { /** * No localization structure * XF component is defined in the page - * fragmentPath is valid + * fragmentVariationPath is valid */ @Test void testValidXFInPageWithoutLocalization() { @@ -165,7 +165,7 @@ void testValidXFInPageWithoutLocalization() { /** * No localization structure * XF component is defined in the template - * fragmentPath is valid + * fragmentVariationPath is valid */ @Test void testValidXFInTemplateWithoutLocalization() { @@ -177,7 +177,7 @@ void testValidXFInTemplateWithoutLocalization() { /** * No localization structure * XF component is defined in the page - * fragmentPath is undefined + * fragmentVariationPath is undefined */ @Test void testUndefinedXFInPageWithoutLocalization() { @@ -189,7 +189,7 @@ void testUndefinedXFInPageWithoutLocalization() { /** * No localization structure * XF component is defined in the template - * fragmentPath is undefined + * fragmentVariationPath is undefined */ @Test void testUndefinedXFInTemplateWithoutLocalization() { @@ -201,7 +201,7 @@ void testUndefinedXFInTemplateWithoutLocalization() { /** * No localization structure * XF component is defined in the page - * fragmentPath is empty + * fragmentVariationPath is empty */ @Test void testEmptyXFInPageWithoutLocalization() { @@ -213,7 +213,7 @@ void testEmptyXFInPageWithoutLocalization() { /** * No localization structure * XF component is defined in the template - * fragmentPath is empty + * fragmentVariationPath is empty */ @Test void testEmptyXFInTemplateWithoutLocalization() { @@ -277,7 +277,7 @@ void testValidXFInTemplateWithLocalizationWithDifferentLanguage() { /** * Site with language localization * XF component is defined in the page - * fragmentPath is undefined + * fragmentVariationPath is undefined */ @Test void testUndefinedXFInPageWithLocalization() { @@ -289,7 +289,7 @@ void testUndefinedXFInPageWithLocalization() { /** * Site with language localization * XF component is defined in the template - * fragmentPath is undefined + * fragmentVariationPath is undefined */ @Test void testUndefinedXFInTemplateWithLocalization() { @@ -301,7 +301,7 @@ void testUndefinedXFInTemplateWithLocalization() { /** * Site with language localization * XF component is defined in the page - * fragmentPath is empty + * fragmentVariationPath is empty */ @Test void testEmptyXFInPageWithLocalization() { @@ -313,7 +313,7 @@ void testEmptyXFInPageWithLocalization() { /** * Site with language localization * XF component is defined in the template - * fragmentPath is empty + * fragmentVariationPath is empty */ @Test void testEmptyXFInTemplateWithLocalization() { @@ -377,7 +377,7 @@ void testValidXFInTemplateWithLocalizationWithDifferentCountryLanguage() { /** * Site with country-language localization * XF component is defined in the page - * fragmentPath is undefined + * fragmentVariationPath is undefined */ @Test void testUndefinedXFInPageWithLocalizationWithDifferentCountryLanguage() { @@ -389,7 +389,7 @@ void testUndefinedXFInPageWithLocalizationWithDifferentCountryLanguage() { /** * Site with country-language localization * XF component is defined in the template - * fragmentPath is undefined + * fragmentVariationPath is undefined */ @Test void testUndefinedXFInTemplateWithLocalizationWithDifferentCountryLanguage() { @@ -453,7 +453,7 @@ void testValidXFInTemplateWithLocalizationWithDifferentCountrySiteLanguage() { /** * Site with country-language localization (optional): eu/mysite/en * XF component is defined in the page - * fragmentPath is undefined + * fragmentVariationPath is undefined */ @Test void testUndefinedXFInPageWithLocalizationWithDifferentCountrySiteLanguage() { @@ -465,7 +465,7 @@ void testUndefinedXFInPageWithLocalizationWithDifferentCountrySiteLanguage() { /** * Site with country-language localization (optional): eu/mysite/en * XF component is defined in the template - * fragmentPath is undefined + * fragmentVariationPath is undefined */ @Test void testUndefinedXFInTemplateWithLocalizationWithDifferentCountrySiteLanguage() { @@ -529,7 +529,7 @@ void testValidXFInTemplateWithLocalizationWithDifferentCountry_Language() { /** * Site with country_language localization * XF component is defined in the page - * fragmentPath is undefined + * fragmentVariationPath is undefined */ @Test void testUndefinedXFInPageWithLocalizationWithDifferentCountry_Language() { @@ -541,7 +541,7 @@ void testUndefinedXFInPageWithLocalizationWithDifferentCountry_Language() { /** * Site with country_language localization * XF component is defined in the template - * fragmentPath is undefined + * fragmentVariationPath is undefined */ @Test void testUndefinedXFInTemplateWithLocalizationWithDifferentCountry_Language() { diff --git a/bundles/core/src/test/java/com/adobe/cq/wcm/core/components/internal/models/v1/TextImplTest.java b/bundles/core/src/test/java/com/adobe/cq/wcm/core/components/internal/models/v1/TextImplTest.java index 436d78e7f8..0b770dcce6 100644 --- a/bundles/core/src/test/java/com/adobe/cq/wcm/core/components/internal/models/v1/TextImplTest.java +++ b/bundles/core/src/test/java/com/adobe/cq/wcm/core/components/internal/models/v1/TextImplTest.java @@ -1,5 +1,5 @@ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ~ Copyright 2019 Adobe + ~ Copyright 2017 Adobe ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); ~ you may not use this file except in compliance with the License. diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf1.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf1.json index 8a34a1e88d..ea5d67b7b8 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf1.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf1.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/en/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/en/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf10.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf10.json index 8a34a1e88d..ea5d67b7b8 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf10.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf10.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/en/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/en/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf11.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf11.json index 7957b9c293..d924ce932b 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf11.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf11.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/es/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/es/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf11a.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf11a.json index 8a34a1e88d..ea5d67b7b8 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf11a.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf11a.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/en/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/en/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf20.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf20.json index 5ba571ecf4..f218e392e4 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf20.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf20.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/us/en/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/us/en/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf21.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf21.json index 59f6cee0c4..083fc6bd99 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf21.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf21.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/us/es/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/us/es/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf21a.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf21a.json index 5ba571ecf4..f218e392e4 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf21a.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf21a.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/us/en/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/us/en/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf30.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf30.json index 5c8e2febe4..8cf92936d7 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf30.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf30.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/ch/mysite/fr/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/ch/mysite/fr/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf31.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf31.json index 66c8add28b..fe0449b601 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf31.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf31.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/ch/mysite/de/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/ch/mysite/de/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf31a.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf31a.json index 5c8e2febe4..8cf92936d7 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf31a.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf31a.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/ch/mysite/fr/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/ch/mysite/fr/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf40.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf40.json index 32a5e1a946..78e56b19a6 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf40.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf40.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/ch_fr/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/ch_fr/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf41.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf41.json index 13977e2deb..472dac24d6 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf41.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf41.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/ch_de/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/ch_de/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf41a.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf41a.json index 32a5e1a946..78e56b19a6 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf41a.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf41a.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/ch_fr/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/ch_fr/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf50.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf50.json index 0dcc75a93c..d6772d0a12 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf50.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf50.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/blueprint/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/blueprint/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf51.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf51.json index 7d17f289d1..9f4a0923a6 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf51.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf51.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/livecopy/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/livecopy/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf51a.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf51a.json index 0dcc75a93c..d6772d0a12 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf51a.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf51a.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/blueprint/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/blueprint/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf60.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf60.json index 7d17f289d1..9f4a0923a6 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf60.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf60.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/livecopy/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/livecopy/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf61.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf61.json index 0dcc75a93c..d6772d0a12 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf61.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf61.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/blueprint/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/blueprint/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/exporter-xf61a.json b/bundles/core/src/test/resources/experiencefragment/exporter-xf61a.json index 7d17f289d1..9f4a0923a6 100644 --- a/bundles/core/src/test/resources/experiencefragment/exporter-xf61a.json +++ b/bundles/core/src/test/resources/experiencefragment/exporter-xf61a.json @@ -1,4 +1,4 @@ { - "localizedFragmentPath":"/content/experience-fragments/mysite/livecopy/footer/master/jcr:content", + "localizedFragmentVariationPath":"/content/experience-fragments/mysite/livecopy/footer/master/jcr:content", ":type": "core/wcm/components/experiencefragment/v1/experiencefragment" } diff --git a/bundles/core/src/test/resources/experiencefragment/test-conf.json b/bundles/core/src/test/resources/experiencefragment/test-conf.json index e9ec36acd3..6d1182e653 100644 --- a/bundles/core/src/test/resources/experiencefragment/test-conf.json +++ b/bundles/core/src/test/resources/experiencefragment/test-conf.json @@ -37,12 +37,12 @@ "xf-component-1a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/en/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/en/footer/master" }, "xf-component-2a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/en/footer/master/undefined" + "fragmentVariationPath": "/content/experience-fragments/mysite/en/footer/master/undefined" }, "xf-component-3a": { "jcr:primaryType": "nt:unstructured", @@ -51,17 +51,17 @@ "xf-component-10a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/en/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/en/footer/master" }, "xf-component-11a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/es/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/es/footer/master" }, "xf-component-12a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/en/footer/master/undefined" + "fragmentVariationPath": "/content/experience-fragments/mysite/en/footer/master/undefined" }, "xf-component-13a": { "jcr:primaryType": "nt:unstructured", @@ -70,67 +70,67 @@ "xf-component-20a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/us/en/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/us/en/footer/master" }, "xf-component-21a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/us/es/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/us/es/footer/master" }, "xf-component-22a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/us/en/footer/master/undefined" + "fragmentVariationPath": "/content/experience-fragments/mysite/us/en/footer/master/undefined" }, "xf-component-30a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/ch/mysite/fr/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/ch/mysite/fr/footer/master" }, "xf-component-31a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/ch/mysite/de/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/ch/mysite/de/footer/master" }, "xf-component-32a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/ch/mysite/en/footer/master/undefined" + "fragmentVariationPath": "/content/experience-fragments/mysite/ch/mysite/en/footer/master/undefined" }, "xf-component-40a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/ch_fr/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/ch_fr/footer/master" }, "xf-component-41a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/ch_de/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/ch_de/footer/master" }, "xf-component-42a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/ch_fr/footer/master/undefined" + "fragmentVariationPath": "/content/experience-fragments/mysite/ch_fr/footer/master/undefined" }, "xf-component-50a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/blueprint/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/blueprint/footer/master" }, "xf-component-51a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/livecopy/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/livecopy/footer/master" }, "xf-component-60a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/livecopy/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/livecopy/footer/master" }, "xf-component-61a": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/blueprint/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/blueprint/footer/master" } } } diff --git a/bundles/core/src/test/resources/experiencefragment/test-content.json b/bundles/core/src/test/resources/experiencefragment/test-content.json index 902016e464..acadb04d8a 100644 --- a/bundles/core/src/test/resources/experiencefragment/test-content.json +++ b/bundles/core/src/test/resources/experiencefragment/test-content.json @@ -1,11 +1,11 @@ { - "mysite": { - "jcr:primaryType": "sling:Folder", - "jcr:content": { - "jcr:primaryType": "cq:PageContent", - "jcr:title": "Language Structure", - "jcr:created": "Mon Apr 08 2019 20:21:55 GMT+0200" - }, + "mysite": { + "jcr:primaryType": "sling:Folder", + "jcr:content": { + "jcr:primaryType": "cq:PageContent", + "jcr:title": "Language Structure", + "jcr:created": "Mon Apr 08 2019 20:21:55 GMT+0200" + }, "page": { "jcr:primaryType": "cq:Page", "jcr:content": { @@ -18,12 +18,12 @@ "xf-component-1": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/en/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/en/footer/master" }, "xf-component-2": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/en/footer/master/undefined" + "fragmentVariationPath": "/content/experience-fragments/mysite/en/footer/master/undefined" }, "xf-component-3": { "jcr:primaryType": "nt:unstructured", @@ -51,17 +51,17 @@ "xf-component-10": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/en/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/en/footer/master" }, "xf-component-11": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/es/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/es/footer/master" }, "xf-component-12": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/en/footer/master/undefined" + "fragmentVariationPath": "/content/experience-fragments/mysite/en/footer/master/undefined" }, "xf-component-13": { "jcr:primaryType": "nt:unstructured", @@ -97,17 +97,17 @@ "xf-component-20": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/us/en/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/us/en/footer/master" }, "xf-component-21": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/us/es/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/us/es/footer/master" }, "xf-component-22": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/us/en/footer/master/undefined" + "fragmentVariationPath": "/content/experience-fragments/mysite/us/en/footer/master/undefined" } } } @@ -147,17 +147,17 @@ "xf-component-30": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/ch/mysite/fr/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/ch/mysite/fr/footer/master" }, "xf-component-31": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/ch/mysite/de/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/ch/mysite/de/footer/master" }, "xf-component-32": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/ch/mysite/en/footer/master/undefined" + "fragmentVariationPath": "/content/experience-fragments/mysite/ch/mysite/en/footer/master/undefined" } } } @@ -184,17 +184,17 @@ "xf-component-40": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/ch_fr/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/ch_fr/footer/master" }, "xf-component-41": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/ch_de/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/ch_de/footer/master" }, "xf-component-42": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/ch_fr/footer/master/undefined" + "fragmentVariationPath": "/content/experience-fragments/mysite/ch_fr/footer/master/undefined" } } } @@ -219,12 +219,12 @@ "xf-component-50": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/blueprint/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/blueprint/footer/master" }, "xf-component-51": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/livecopy/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/livecopy/footer/master" } } } @@ -249,21 +249,21 @@ "xf-component-60": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/livecopy/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/livecopy/footer/master" }, "xf-component-61": { "jcr:primaryType": "nt:unstructured", "sling:resourceType": "core/wcm/components/experiencefragment/v1/experiencefragment", - "fragmentPath": "/content/experience-fragments/mysite/blueprint/footer/master" + "fragmentVariationPath": "/content/experience-fragments/mysite/blueprint/footer/master" } } } } } }, - "experience-fragments": { - "jcr:primaryType": "sling:Folder", - "mysite": { + "experience-fragments": { + "jcr:primaryType": "sling:Folder", + "mysite": { "jcr:primaryType": "sling:Folder", "page": { "jcr:primaryType": "cq:Page", @@ -291,12 +291,14 @@ "jcr:content": { "jcr:primaryType": "cq:PageContent", "jcr:title": "English Test Footer Master", + "cq:xfVariantType": "web", "cq:xfMasterVariation": "true" } }, "variation": { "jcr:primaryType": "cq:Page", "jcr:content": { + "cq:xfVariantType": "web", "jcr:primaryType": "cq:PageContent", "jcr:title": "English Test Footer Variation"} @@ -318,6 +320,7 @@ "jcr:content": { "jcr:primaryType": "cq:PageContent", "jcr:title": "Spanish Test Footer Master", + "cq:xfVariantType": "web", "cq:xfMasterVariation": "true" } } @@ -343,12 +346,14 @@ "jcr:content": { "jcr:primaryType": "cq:PageContent", "jcr:title": "English Test Footer Master", + "cq:xfVariantType": "web", "cq:xfMasterVariation": "true" } }, "variation": { "jcr:primaryType": "cq:Page", "jcr:content": { + "cq:xfVariantType": "web", "jcr:primaryType": "cq:PageContent", "jcr:title": "English Test Footer Variation"} @@ -368,6 +373,7 @@ "master": { "jcr:primaryType": "cq:Page", "jcr:content": { + "cq:xfVariantType": "web", "jcr:primaryType": "cq:PageContent", "jcr:title": "Spanish Test Footer Master", "cq:xfMasterVariation": "true" @@ -392,12 +398,14 @@ "jcr:content": { "jcr:primaryType": "cq:PageContent", "jcr:title": "English Test Footer Master", + "cq:xfVariantType": "web", "cq:xfMasterVariation": "true" } }, "variation": { "jcr:primaryType": "cq:Page", "jcr:content": { + "cq:xfVariantType": "web", "jcr:primaryType": "cq:PageContent", "jcr:title": "English Test Footer Variation"} @@ -419,6 +427,7 @@ "jcr:content": { "jcr:primaryType": "cq:PageContent", "jcr:title": "Spanish Test Footer Master", + "cq:xfVariantType": "web", "cq:xfMasterVariation": "true" } } @@ -439,12 +448,14 @@ "jcr:content": { "jcr:primaryType": "cq:PageContent", "jcr:title": "English Test Footer Master", + "cq:xfVariantType": "web", "cq:xfMasterVariation": "true" } }, "variation": { "jcr:primaryType": "cq:Page", "jcr:content": { + "cq:xfVariantType": "web", "jcr:primaryType": "cq:PageContent", "jcr:title": "English Test Footer Variation"} @@ -466,6 +477,7 @@ "jcr:content": { "jcr:primaryType": "cq:PageContent", "jcr:title": "Spanish Test Footer Master", + "cq:xfVariantType": "web", "cq:xfMasterVariation": "true" } } @@ -486,12 +498,14 @@ "jcr:content": { "jcr:primaryType": "cq:PageContent", "jcr:title": "English Test Footer Master", + "cq:xfVariantType": "web", "cq:xfMasterVariation": "true" } }, "variation": { "jcr:primaryType": "cq:Page", "jcr:content": { + "cq:xfVariantType": "web", "jcr:primaryType": "cq:PageContent", "jcr:title": "English Test Footer Variation"} @@ -513,11 +527,12 @@ "jcr:content": { "jcr:primaryType": "cq:PageContent", "jcr:title": "Spanish Test Footer Master", + "cq:xfVariantType": "web", "cq:xfMasterVariation": "true" } } } } } - } + } } diff --git a/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/.content.xml b/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/.content.xml index f7b243ccd6..28ed295a4c 100644 --- a/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/.content.xml +++ b/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/.content.xml @@ -16,7 +16,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~--> diff --git a/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/README.md b/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/README.md index a26adaab10..3a76bdc995 100644 --- a/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/README.md +++ b/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/README.md @@ -19,31 +19,34 @@ Experience Fragment (v1) Experience fragment component written in HTL that renders an experience fragment variation. ## Features -* Can be used on both templates and pages -* Defines a configurable experience fragment variation to be displayed -* Supports references for localized content: if the component is defined in a template and if the fragment is part of a localized structure below `/content/experience-fragments` that follows the same patterns as the site below `/content, the fragment with the same localization (language, blueprint or live copy) as the current page will be rendered. +* Can be used on both templates and pages. +* Defines a configurable experience fragment variation to be displayed. +* Supports references for localized content: if the component is defined in a template and if the fragment is part of a localized structure below `/content/experience-fragments` that follows the same patterns as the site below `/content`, the fragment with the same localization (language, blueprint or live copy) as the current page will be rendered. ### Use Object -The Experience fragment component uses the `com.adobe.cq.wcm.core.components.models.ExperienceFragment` Sling model as its Use-object. +The experience fragment component uses the `com.adobe.cq.wcm.core.components.models.ExperienceFragment` Sling model as its Use-object. ### Edit Dialog Properties -The following property is written to JCR for the Experience Fragment component and is expected to be available as a `Resource` property: +The following property is written to JCR for the experience fragment component and is expected to be available as a `Resource` property: -1. `./fragmentPath` - defines the path to the Experience Fragment to be rendered +1. `./fragmentVariationPath` - defines the path to the experience fragment variation to be rendered. ## BEM Description ``` BLOCK cmp-experiencefragment ``` -Note: the rendered HTML markup of the Experience Component contains CSS classes that start with `xf-` (e.g. `xf-content-height` or `xf-master-building-block`): +Note: the rendered HTML markup of the experience fragment component may contain CSS classes that start with `xf-` (e.g. `xf-content-height` or `xf-master-building-block`) - those classes are private and should not be used in custom code (e.g. to style the markup). ## Information * **Vendor**: Adobe * **Version**: v1 -* **Compatibility**: AEM 6.4 +* **Compatibility**: AEM 6.3 * **Status**: production-ready -* **Documentation**: [https://www.adobe.com/go/aem\_cmp\_experiencefragment\_v1](https://www.adobe.com/go/aem_cmp_experiencefragment_v1) +* **Documentation**: [https://www.adobe.com/go/aem\_cmp\_xf\_v1](https://www.adobe.com/go/aem_cmp_xf_v1) * **Component Library**: [https://www.adobe.com/go/aem\_cmp\_library\_xf](https://www.adobe.com/go/aem_cmp_library_xf) +* **Author**: [Abhishek Aggarwal](https://github.com/abhishekagg19) +* **Co-authors**: [Jean-Christophe Kautzmann](https://github.com/jckautzmann) +_If you were involved in the authoring of this component and are not credited above, please reach out to us on [GitHub](https://github.com/adobe/aem-core-wcm-components)._ diff --git a/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/_cq_design_dialog/.content.xml b/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/_cq_design_dialog/.content.xml index c632471098..f1df5b8a70 100644 --- a/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/_cq_design_dialog/.content.xml +++ b/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/_cq_design_dialog/.content.xml @@ -16,9 +16,8 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~--> > - - + fieldDescription="Choose the experience fragment variation to display."> + diff --git a/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/_cq_editConfig.xml b/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/_cq_editConfig.xml index 21f7e92f7c..7ef081a2fa 100644 --- a/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/_cq_editConfig.xml +++ b/content/src/content/jcr_root/apps/core/wcm/components/experiencefragment/v1/experiencefragment/_cq_editConfig.xml @@ -22,7 +22,7 @@ + data-sly-test.localizedFragmentVariationPath=${fragment.localizedFragmentVariationPath} + data-sly-resource="${@path=localizedFragmentVariationPath, selectors='content', wcmmode='disabled'}"> - \ No newline at end of file + \ No newline at end of file diff --git a/examples/src/content/jcr_root/content/core-components-examples/library/experience-fragment/.content.xml b/examples/src/content/jcr_root/content/core-components-examples/library/experience-fragment/.content.xml index 4a7d3f7af1..0f06f208a4 100644 --- a/examples/src/content/jcr_root/content/core-components-examples/library/experience-fragment/.content.xml +++ b/examples/src/content/jcr_root/content/core-components-examples/library/experience-fragment/.content.xml @@ -34,7 +34,7 @@ jcr:lastModifiedBy="admin" jcr:primaryType="nt:unstructured" sling:resourceType="core/wcm/components/text/v2/text" - text="<p>Experience Fragment allows an experience fragment and its variations to be presented on a page.</p> " + text="<p>Experience Fragment allows an experience fragment variation to be presented on a page.</p> " textIsRich="true"/> + + fragmentVariationPath="/content/experience-fragments/core-components-examples/library/simple-experience-fragment/master"/> - diff --git a/examples/src/content/jcr_root/content/experience-fragments/core-components-examples/library/simple-experience-fragment/variation1/.content.xml b/examples/src/content/jcr_root/content/experience-fragments/core-components-examples/library/simple-experience-fragment/variation1/.content.xml deleted file mode 100644 index c62d38ec5d..0000000000 --- a/examples/src/content/jcr_root/content/experience-fragments/core-components-examples/library/simple-experience-fragment/variation1/.content.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - -