diff --git a/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/PageStructureRewriteRule.java b/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/PageStructureRewriteRule.java index 7dc3bb53..276b95d0 100644 --- a/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/PageStructureRewriteRule.java +++ b/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/PageStructureRewriteRule.java @@ -22,4 +22,10 @@ public interface PageStructureRewriteRule extends StructureRewriteRule{ String getStaticTemplate(); + + /** + * Gets the editable template for this structure rewrite rule + * @return + */ + String getEditableTemplate(); } diff --git a/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/StructureRewriteRuleService.java b/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/StructureRewriteRuleService.java index 205597c1..227306ed 100644 --- a/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/StructureRewriteRuleService.java +++ b/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/StructureRewriteRuleService.java @@ -19,13 +19,9 @@ package com.adobe.aem.modernize.structure; -import java.util.Set; - -import org.apache.sling.api.resource.ResourceResolver; - -import com.adobe.aem.modernize.RewriteException; import com.adobe.aem.modernize.RewriteRuleService; -import com.adobe.aem.modernize.component.ComponentRewriteRule; + +import java.util.Set; /** * Provides a mechanism for listing all of the configured rules either via Nodes or custom implementations. @@ -37,4 +33,11 @@ public interface StructureRewriteRuleService extends RewriteRuleService getTemplates(); + + /** + * List all the editable templates for the given static template + * @param staticTemplate + * @return + */ + Set getEditableTemplates(String staticTemplate); } diff --git a/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/datasources/PageDataSource.java b/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/datasources/PageDataSource.java index 541342e5..705bc5da 100644 --- a/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/datasources/PageDataSource.java +++ b/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/datasources/PageDataSource.java @@ -20,11 +20,7 @@ package com.adobe.aem.modernize.structure.datasources; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; @@ -37,7 +33,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.sling.SlingServlet; -import org.apache.jackrabbit.util.ISO9075; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.resource.Resource; @@ -124,14 +119,21 @@ private List buildResources(String searchPath, SlingHttpServletRequest if (pageContent.hasProperty(NameConstants.PN_TITLE)) { title = pageContent.getProperty(NameConstants.PN_TITLE).getString(); } - Map map = new HashMap<>(); - map.put("title", title); - map.put("pagePath", pagePath); - map.put("templateType", pageContent.getProperty(NameConstants.NN_TEMPLATE).getString()); - map.put("href", href); - map.put("crxHref", crxHref); - resources.add(new ValueMapResource(request.getResourceResolver(), request.getResource() + "/page" + index, itemResourceType, new ValueMapDecorator(map))); - index++; + + String staticTemplate = pageContent.getProperty(NameConstants.NN_TEMPLATE).getString(); + Set editableTemplates = structureRewriteRuleService.getEditableTemplates(staticTemplate); + + for(String editableTmpl : editableTemplates) { + Map map = new HashMap<>(); + map.put("title", title); + map.put("pagePath", pagePath); + map.put("templateType", staticTemplate); + map.put("editableTemplate", editableTmpl); + map.put("href", href); + map.put("crxHref", crxHref); + resources.add(new ValueMapResource(request.getResourceResolver(), request.getResource() + "/page" + index, itemResourceType, new ValueMapDecorator(map))); + index++; + } } return resources; } diff --git a/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/impl/StructureConversionServlet.java b/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/impl/StructureConversionServlet.java index 1fc6d62a..d8cf5cdf 100644 --- a/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/impl/StructureConversionServlet.java +++ b/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/impl/StructureConversionServlet.java @@ -18,28 +18,26 @@ */ package com.adobe.aem.modernize.structure.impl; -import java.io.IOException; -import java.util.List; -import javax.jcr.Node; -import javax.jcr.Session; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletResponse; - +import com.adobe.aem.modernize.RewriteException; +import com.adobe.aem.modernize.structure.StructureRewriteRule; +import com.adobe.aem.modernize.structure.StructureRewriteRuleService; +import com.adobe.aem.modernize.structure.impl.rules.PageRewriteRule; import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; -import org.apache.sling.api.request.RequestParameter; import org.apache.sling.api.servlets.SlingAllMethodsServlet; +import org.apache.sling.commons.json.JSONArray; import org.apache.sling.commons.json.JSONObject; - -import com.adobe.aem.modernize.RewriteException; -import com.adobe.aem.modernize.structure.StructureRewriteRule; -import com.adobe.aem.modernize.structure.StructureRewriteRuleService; -import com.adobe.aem.modernize.structure.impl.StructureTreeRewriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.jcr.Node; +import javax.jcr.Session; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + @SlingServlet( methods = "POST", paths = "/libs/cq/modernize/templatestructure/content/convert", @@ -58,30 +56,46 @@ public class StructureConversionServlet extends SlingAllMethodsServlet { @Override protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) - throws ServletException, IOException { - // validate 'paths' parameter - RequestParameter[] paths = request.getRequestParameters(PARAM_PATHS); - if (paths == null) { - logger.warn("Missing parameter '" + PARAM_PATHS + "'"); - response.setContentType("text/html"); - response.getWriter().println("Missing parameter '" + PARAM_PATHS + "'"); - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - return; - } - + throws ServletException { + // validate request data try { - // get structure rewrite rules - List rules = structureRewriteRuleService.getRules(request.getResourceResolver()); + // FIXME: need to send json content type and not handle this like a form post + String requestData = request.getRequestParameterList().get(0).getName(); + JSONObject jsonRequest = new JSONObject(requestData); + + if (!jsonRequest.has("pages")) { + logger.warn("Missing pages"); + response.setContentType("text/html"); + response.getWriter().println("Missing parameter"); + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + return; + } long tick = System.currentTimeMillis(); Session session = request.getResourceResolver().adaptTo(Session.class); - StructureTreeRewriter rewriter = new StructureTreeRewriter(rules); JSONObject results = new JSONObject(); - logger.debug("Converting {} structures", paths.length); + JSONArray pages = jsonRequest.getJSONArray("pages"); + logger.debug("Converting {} structures", pages.length()); // iterate over all paths - for (RequestParameter parameter : paths) { - String path = parameter.getString(); + for (int i = 0; i < pages.length(); i++) { + // get rules for the structure + String path = pages.getJSONObject(i).getString("path"); + String template = pages.getJSONObject(i).getString("template"); + List rules = structureRewriteRuleService.getRules(request.getResourceResolver()); + + // remove rule not pertaining to chosen editable template + for (int i1 = 0; i1 < rules.size(); i1++) { + StructureRewriteRule rule = rules.get(i1); + if (rule instanceof PageRewriteRule) { + String editableTemplate = ((PageRewriteRule) rule).getEditableTemplate(); + if (!editableTemplate.equals(template)) { + rules.remove(rule); + } + } + } + StructureTreeRewriter rewriter = new StructureTreeRewriter(rules); + JSONObject json = new JSONObject(); results.put(path, json); @@ -102,11 +116,12 @@ protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse logger.warn("Converting structure {} failed", path, e); } } + response.setContentType("application/json"); response.getWriter().write(results.toString()); long tack = System.currentTimeMillis(); - logger.debug("Rewrote {} structures in {} ms", paths.length, tack - tick); + logger.debug("Rewrote {} structures in {} ms", pages.length(), tack - tick); } catch (Exception e) { throw new ServletException("Caught exception while rewriting structures", e); } diff --git a/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/impl/StructureRewriteRuleServiceImpl.java b/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/impl/StructureRewriteRuleServiceImpl.java index 946730e6..884f1333 100644 --- a/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/impl/StructureRewriteRuleServiceImpl.java +++ b/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/impl/StructureRewriteRuleServiceImpl.java @@ -19,12 +19,8 @@ package com.adobe.aem.modernize.structure.impl; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Reference; @@ -33,7 +29,6 @@ import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.resource.ResourceResolver; -import com.adobe.aem.modernize.RewriteException; import com.adobe.aem.modernize.structure.PageStructureRewriteRule; import com.adobe.aem.modernize.structure.StructureRewriteRule; import com.adobe.aem.modernize.structure.StructureRewriteRuleService; @@ -101,6 +96,14 @@ public Set getTemplates() { return templates; } + @Override + public Set getEditableTemplates(String staticTemplate) { + return pageRules.stream() + .filter(rule -> rule.getStaticTemplate().equals(staticTemplate)) + .map(PageStructureRewriteRule::getEditableTemplate) + .collect(Collectors.toSet()); + } + @Override public List getRules(ResourceResolver resolver) { List rulesCopy = new LinkedList<>(); diff --git a/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/impl/rules/PageRewriteRule.java b/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/impl/rules/PageRewriteRule.java index f8363de0..900dc6dc 100644 --- a/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/impl/rules/PageRewriteRule.java +++ b/bundles/aem-modernize-tools/src/main/java/com/adobe/aem/modernize/structure/impl/rules/PageRewriteRule.java @@ -302,6 +302,11 @@ public String getStaticTemplate() { return staticTemplate; } + @Override + public String getEditableTemplate() { + return editableTemplate; + } + @Override public int getRanking() { return this.ranking; diff --git a/bundles/aem-modernize-tools/src/test/java/com/adobe/aem/modernize/structure/datasources/PageDataSourceTest.java b/bundles/aem-modernize-tools/src/test/java/com/adobe/aem/modernize/structure/datasources/PageDataSourceTest.java index b2d1bde5..c06d3d5f 100644 --- a/bundles/aem-modernize-tools/src/test/java/com/adobe/aem/modernize/structure/datasources/PageDataSourceTest.java +++ b/bundles/aem-modernize-tools/src/test/java/com/adobe/aem/modernize/structure/datasources/PageDataSourceTest.java @@ -58,6 +58,8 @@ import org.mockito.runners.MockitoJUnitRunner; import org.osgi.framework.BundleContext; import static org.junit.Assert.*; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; @RunWith(MockitoJUnitRunner.class) public class PageDataSourceTest { @@ -67,8 +69,9 @@ public class PageDataSourceTest { private static final String STATIC_HOME_TEMPLATE = "/apps/geometrixx/templates/homepage"; private static final String STATIC_PRODUCT_TEMPLATE = "/apps/geometrixx/templates/productpage"; - private static final String EDITABLE_TEMPLATE = "/conf/geodemo/settings/wcm/templates/geometrixx-demo-home-page"; - private static final String SLING_RESOURCE_TYPE = "geodemo/components/structure/page"; + private static final String EDITABLE_HOME_TEMPLATE = "/conf/geodemo/settings/wcm/templates/geometrixx-demo-home-page"; + private static final String EDITABLE_PRODUCT_TEMPLATE = "/conf/geodemo/settings/wcm/templates/geometrixx-demo-product-page"; + private static final String SLING_RESOURCE_TYPE = "geodemo/components/structure/page"; private PageDataSource pageDataSource; @@ -118,7 +121,6 @@ public void setUp() throws Exception { // register data source pageDataSource = context.registerService(PageDataSource.class, new PageDataSource()); - // mock request Mockito.stub(request.getLocale()).toReturn(Locale.US); Mockito.stub(request.getResource()).toReturn(requestResource); @@ -128,7 +130,7 @@ public void setUp() throws Exception { StructureRewriteRule rule = new PageRewriteRule(); Dictionary props = new Hashtable<>(); props.put("static.template", STATIC_HOME_TEMPLATE); - props.put("editable.template", EDITABLE_TEMPLATE); + props.put("editable.template", EDITABLE_HOME_TEMPLATE); props.put("sling.resourceType", SLING_RESOURCE_TYPE); MockOsgi.activate(rule, bundleContext, props); rules.add(rule); @@ -136,7 +138,15 @@ public void setUp() throws Exception { rule = new PageRewriteRule(); props = new Hashtable<>(); props.put("static.template", STATIC_PRODUCT_TEMPLATE); - props.put("editable.template", "/conf/geodemo/settings/wcm/templates/geometrixx-demo-product-page"); + props.put("editable.template", EDITABLE_PRODUCT_TEMPLATE); + props.put("sling.resourceType", SLING_RESOURCE_TYPE); + MockOsgi.activate(rule, bundleContext, props); + rules.add(rule); + + rule = new PageRewriteRule(); + props = new Hashtable<>(); + props.put("static.template", STATIC_PRODUCT_TEMPLATE); + props.put("editable.template", EDITABLE_HOME_TEMPLATE); props.put("sling.resourceType", SLING_RESOURCE_TYPE); MockOsgi.activate(rule, bundleContext, props); rules.add(rule); @@ -149,19 +159,24 @@ public void setUp() throws Exception { Mockito.stub(structureRewriteRuleService.getTemplates()).toReturn(templates); Mockito.stub(structureRewriteRuleService.getRules(resolver)).toReturn(rules); + Mockito.stub(structureRewriteRuleService.getEditableTemplates(eq(STATIC_HOME_TEMPLATE))).toReturn(new HashSet(){{ + add(EDITABLE_HOME_TEMPLATE); + }}); + Mockito.stub(structureRewriteRuleService.getEditableTemplates(eq(STATIC_PRODUCT_TEMPLATE))).toReturn(new HashSet(){{ + add(EDITABLE_PRODUCT_TEMPLATE); + }}); // inject dependencies MockOsgi.injectServices(pageDataSource, bundleContext); // prepare request resource - HashMap properties = new HashMap(); + HashMap properties = new HashMap<>(); properties.put("path", PAGE_ROOT); properties.put("itemResourceType", ITEM_RESOURCE_TYPE); Mockito.stub(requestResource.getValueMap()).toReturn(new ValueMapDecorator(properties)); // prepare expression resolver Mockito.stub(expressionResolver.resolve(PAGE_ROOT, Locale.US, String.class, request)).toReturn(PAGE_ROOT); - } @Test @@ -173,7 +188,7 @@ public void testDoGet() throws Exception { pageDataSource.doGet(request, response); ArgumentCaptor dataSourceArgumentCaptor = ArgumentCaptor.forClass(DataSource.class); - Mockito.verify(request).setAttribute(Mockito.anyString(), dataSourceArgumentCaptor.capture()); + Mockito.verify(request).setAttribute(anyString(), dataSourceArgumentCaptor.capture()); DataSource pageDataSource = dataSourceArgumentCaptor.getValue(); @@ -189,6 +204,7 @@ public void testDoGet() throws Exception { assertNotNull(valueMap.get("title")); assertNotNull(valueMap.get("pagePath")); assertNotNull(valueMap.get("templateType")); + assertNotNull(valueMap.get("editableTemplate")); assertNotNull(valueMap.get("href")); assertNotNull(valueMap.get("crxHref")); diff --git a/bundles/aem-modernize-tools/src/test/java/com/adobe/aem/modernize/structure/impl/StructureRewriteRuleServiceImplTest.java b/bundles/aem-modernize-tools/src/test/java/com/adobe/aem/modernize/structure/impl/StructureRewriteRuleServiceImplTest.java index 58ec6db6..3508ceb5 100644 --- a/bundles/aem-modernize-tools/src/test/java/com/adobe/aem/modernize/structure/impl/StructureRewriteRuleServiceImplTest.java +++ b/bundles/aem-modernize-tools/src/test/java/com/adobe/aem/modernize/structure/impl/StructureRewriteRuleServiceImplTest.java @@ -50,8 +50,8 @@ public class StructureRewriteRuleServiceImplTest { private static final String STATIC_HOME_TEMPLATE = "/apps/geometrixx/templates/homepage"; private static final String STATIC_PRODUCT_TEMPLATE = "/apps/geometrixx/templates/productpage"; - private static final String EDITABLE_TEMPLATE = "/conf/geodemo/settings/wcm/templates/geometrixx-demo-home-page"; - private static final String SLING_RESOURCE_TYPE = "geodemo/components/structure/page"; + private static final String EDITABLE_HOME_TEMPLATE = "/conf/geodemo/settings/wcm/templates/geometrixx-demo-home-page"; + private static final String EDITABLE_PRODUCT_TEMPLATE = "/conf/geodemo/settings/wcm/templates/geometrixx-demo-product-page"; private static final String SLING_RESOURCE_TYPE = "geodemo/components/structure/page"; private static final String LAYOUT_VALUE = "2;cq-colctrl-lt0"; private static final String[] COLUMN_WIDTHS = {"6", "6"}; @@ -82,7 +82,7 @@ public void setUp() throws Exception { StructureRewriteRule rule = new PageRewriteRule(); Dictionary props = new Hashtable<>(); props.put("static.template", STATIC_HOME_TEMPLATE); - props.put("editable.template", EDITABLE_TEMPLATE); + props.put("editable.template", EDITABLE_HOME_TEMPLATE); props.put("sling.resourceType", SLING_RESOURCE_TYPE); MockOsgi.activate(rule, bundleContext, props); context.registerService(PageStructureRewriteRule.class, (PageStructureRewriteRule) rule); @@ -92,7 +92,16 @@ public void setUp() throws Exception { props = new Hashtable<>(); props.put("static.template", STATIC_PRODUCT_TEMPLATE); props.put("sling.resourceType", SLING_RESOURCE_TYPE); - props.put("editable.template", "/conf/geodemo/settings/wcm/templates/geometrixx-demo-product-page"); + props.put("editable.template", EDITABLE_PRODUCT_TEMPLATE); + MockOsgi.activate(rule, bundleContext, props); + context.registerService(PageStructureRewriteRule.class, (PageStructureRewriteRule) rule); + rules.add(rule); + + rule = new PageRewriteRule(); + props = new Hashtable<>(); + props.put("static.template", STATIC_PRODUCT_TEMPLATE); + props.put("sling.resourceType", SLING_RESOURCE_TYPE); + props.put("editable.template", EDITABLE_HOME_TEMPLATE); MockOsgi.activate(rule, bundleContext, props); context.registerService(PageStructureRewriteRule.class, (PageStructureRewriteRule) rule); rules.add(rule); @@ -130,16 +139,32 @@ public void testGetRules() throws Exception { List rules = structureRewriteRuleService.getRules(null); assertNotNull(rules); assertFalse(rules.isEmpty()); - assertEquals(4, rules.size()); + assertEquals(5, rules.size()); Iterator it = rules.iterator(); StructureRewriteRule rule = it.next(); assertTrue(rule instanceof PageStructureRewriteRule); rule = it.next(); assertTrue(rule instanceof PageStructureRewriteRule); rule = it.next(); + assertTrue(rule instanceof PageStructureRewriteRule); + rule = it.next(); assertTrue(rule instanceof ParsysRewriteRule); rule = it.next(); assertTrue(rule instanceof ColumnControlRewriteRule); + } + + @Test + public void testGetEditableTemplates() { + Set templates = structureRewriteRuleService.getEditableTemplates(STATIC_HOME_TEMPLATE); + assertEquals(1, templates.size()); + assertTrue(templates.contains(EDITABLE_HOME_TEMPLATE)); + } + @Test + public void testGetEditableTemplatesWithMultiple() { + Set templates = structureRewriteRuleService.getEditableTemplates(STATIC_PRODUCT_TEMPLATE); + assertEquals(2, templates.size()); + assertTrue(templates.contains(EDITABLE_PRODUCT_TEMPLATE)); + assertTrue(templates.contains(EDITABLE_HOME_TEMPLATE)); } } diff --git a/content/jcr_root/libs/cq/modernize/templatestructure/clientlib/js/structure.js b/content/jcr_root/libs/cq/modernize/templatestructure/clientlib/js/structure.js index a4222cbe..840282c8 100644 --- a/content/jcr_root/libs/cq/modernize/templatestructure/clientlib/js/structure.js +++ b/content/jcr_root/libs/cq/modernize/templatestructure/clientlib/js/structure.js @@ -81,6 +81,11 @@ $(document).ready(function () { var selection = event && event.detail && event.detail.selection ? event.detail.selection : []; var count = selection.length; + // un-hide all rows + for (var i = 0; i < pageRows.length; i++) { + pageRows[i].set('hidden', false, true); + } + // Deselect already converted structures for (var i = 0; i < selection.length; i++) { var row = selection[i]; @@ -89,6 +94,14 @@ $(document).ready(function () { row.set('selected', false, true); count--; } + + // hide other template options for selected page + var selectedPage = row.dataset['foundationCollectionItemId']; + for (var j = 0, length = pageRows.length; j < length; j++) { + if(!pageRows[j].selected && pageRows[j].dataset['foundationCollectionItemId'] === selectedPage) { + pageRows[j].set('hidden', true, true); + } + } } adjustConvertButton(count); @@ -96,25 +109,30 @@ $(document).ready(function () { convertPagesButton.on("click", function () { // get paths from table - var paths = []; + var pages = []; var selectedStructureRows = pageTable.selectedItems; for (var i = 0, length = selectedStructureRows.length; i < length; i++) { - var value = selectedStructureRows[i].dataset["foundationCollectionItemId"]; - - if (value) { - paths.push(value); + var path = selectedStructureRows[i].dataset["foundationCollectionItemId"]; + var tmpl = selectedStructureRows[i].dataset["modernizeEditabletmpl"]; + + if (path) { + pages.push({ + path: path, + template: tmpl + }); } } var url = REMOTE_STRUCTURE_CONVERSION_SERVICE_PATH + "/content/convert.json"; - var data = { - paths : paths - }; // show overlay and wait ui.wait(); + var data = JSON.stringify({ + pages: pages + }); + $.post(url, data, function (data) { convertPagesButton.hidden = true; backButton.hidden = false; diff --git a/content/jcr_root/libs/cq/modernize/templatestructure/content/console/.content.xml b/content/jcr_root/libs/cq/modernize/templatestructure/content/console/.content.xml index 7a0c2914..8d215f81 100644 --- a/content/jcr_root/libs/cq/modernize/templatestructure/content/console/.content.xml +++ b/content/jcr_root/libs/cq/modernize/templatestructure/content/console/.content.xml @@ -72,7 +72,7 @@ + + data-sly-attribute.data-modernize-component-converted="${converted ? converted : ''}" + data-sly-attribute.data-modernize-editabletmpl="${properties.editableTemplate}"> ${properties.title} (${properties.pagePath @ uri}) ${properties.templateType} + ${properties.editableTemplate} ${'show' @ i18n} / crxde