<% AttrBuilder actionBarAttrs = new AttrBuilder(request, xssAPI); actionBarAttrs.add("id", "granite-shell-actionbar"); actionBarAttrs.addClass("foundation-collection-actionbar"); actionBarAttrs.add("data-foundation-collection-actionbar-target", targetCollection); %>> <% Resource breadcrumbs = resource.getChild("breadcrumbs"); if (breadcrumbs != null) { List crumbs = IteratorUtils.toList(cmp.asDataSource(breadcrumbs).iterator()); if (!crumbs.isEmpty()) { AttrBuilder navigatorAttrs = new AttrBuilder(request, xssAPI); navigatorAttrs.addClass("granite-collection-navigator"); navigatorAttrs.add("id", "granite-collection-breadcrumbs-toggle"); navigatorAttrs.add("trackingfeature", "aem:collectionpage"); navigatorAttrs.add("trackingelement", "breadcrumbs"); navigatorAttrs.add("data-granite-collection-navigator-target", targetCollection); %>><% for (int j = 0; j < crumbs.size(); j++) { Resource item = (Resource) crumbs.get(j); Config itemCfg = new Config(item); AttrBuilder itemAttrs = new AttrBuilder(request, xssAPI); String navigatorCollectionid = itemCfg.get("path", String.class); if (navigatorCollectionid != null) { itemAttrs.add("data-granite-collection-navigator-collectionid", navigatorCollectionid); } else { itemAttrs.add("data-granite-collection-navigator-href", itemCfg.get("href", String.class)); } %>><%= xssAPI.encodeForHTML(itemCfg.get("title")) %><% } %><% } } else { Resource titleRes = resource.getChild("title"); if (titleRes != null) { %><% } else { %><%= xssAPI.encodeForHTML(baseTitle) %><% } } %> <% if (hasRails) { %> <%= xssAPI.encodeForHTML(i18n.get("Content Only")) %><% int railItemIndex = 1; if (contentTreeItem != null && !rootPath.isEmpty()) { AttrBuilder navigationAttrs = new AttrBuilder(request, xssAPI); navigationAttrs.add("trackingelement", "contenttree"); navigationAttrs.add("data-granite-toggleable-control-action", "show"); navigationAttrs.add("data-granite-toggleable-control-name", "content-tree"); navigationAttrs.add("data-foundation-command", "alt+" + railItemIndex++); navigationAttrs.add("data-granite-toggleable-control-target", ".shell-collectionpage-rail-panel[data-shell-collectionpage-rail-panel='content-tree']"); if (!hasActiveRail && savedRailTarget != null && savedRailTarget.equals("content-tree")) { navigationAttrs.addSelected(true); savedRailTargetFound = true; } %>><%= xssAPI.encodeForHTML(i18n.get("Content Tree")) %><% } if (rails != null) { // we map all rail items to the numbers in the keyboard using control + {index} for (Iterator it = rails.listChildren(); it.hasNext(); railItemIndex++) { Resource item = it.next(); if (cmp.getRenderCondition(item, true).check()) { Config itemCfg = new Config(item); AttrBuilder itemAttrs = new AttrBuilder(request, xssAPI); // we stop once we reach 9 since all available numbers have been used if (railItemIndex < 10) { itemAttrs.add("data-foundation-command", "alt+" + railItemIndex); } itemAttrs.add("trackingelement", item.getName()); itemAttrs.add("data-granite-toggleable-control-name", item.getName()); if (item.getName().equals("omnisearchfilter")) { itemAttrs.add("data-granite-toggleable-control-action", "hide"); itemAttrs.add("data-granite-toggleable-control-target", "#shell-collectionpage-rail"); itemAttrs.add("data-granite-omnisearch-filter", targetCollection); } else { String href = ex.getString(itemCfg.get("href", String.class)); itemAttrs.add("icon", itemCfg.get("icon", String.class)); if (href != null) { itemAttrs.add("data-granite-toggleable-control-action", "navigate"); itemAttrs.addHref("data-granite-toggleable-control-href", href); } else { String railPanelTarget = ".shell-collectionpage-rail-panel[data-shell-collectionpage-rail-panel='" + item.getName() + "']"; itemAttrs.add("data-granite-toggleable-control-action", "show"); itemAttrs.add("data-granite-toggleable-control-target", railPanelTarget); } itemAttrs.addSelected(itemCfg.get("active", false)); if (!hasActiveRail && savedRailTarget != null && savedRailTarget.equals(item.getName())) { itemAttrs.addSelected(true); savedRailTargetFound = true; } } %>><%= outVar(xssAPI, i18n, itemCfg.get("jcr:title", String.class)) %><% } } } %><% } Resource primary = resource.getChild("actions/primary"); if (primary != null) { for (Iterator it = primary.listChildren(); it.hasNext();) { Resource item = it.next(); %><% } } %> <% AttrBuilder selectAllAttrs = new AttrBuilder(request, xssAPI); selectAllAttrs.addClass("foundation-collection-selectall"); selectAllAttrs.addClass("coral-Button--graniteActionBar"); selectAllAttrs.add("data-foundation-collection-selectall-target", targetCollection); selectAllAttrs.add("data-foundation-command", "ctrl+a"); selectAllAttrs.add("trackingfeature", "aem:collectionpage"); selectAllAttrs.add("trackingelement", "selectall"); %><% Resource secondary = resource.getChild("actions/secondary"); if (secondary != null) { for (Iterator it = secondary.listChildren(); it.hasNext();) { Resource item = it.next(); if ("create".equals(item.getName())) { AttrBuilder createAttrs = new AttrBuilder(request, xssAPI); createAttrs.addClass("granite-collection-create"); createAttrs.add("data-granite-collection-create-target", targetCollection); cmp.include(item, new Tag(createAttrs)); } else { AttrBuilder attrs = new AttrBuilder(request, xssAPI); attrs.add("data-shell-collection-target", targetCollection); attrs.add("data-shell-console-id", consoleId); cmp.include(item, new Tag(attrs)); } } } if (viewCache.size() > 1) {%> <% AttrBuilder switcherAttrs = new AttrBuilder(request, xssAPI); switcherAttrs.addClass("granite-collection-switcher"); switcherAttrs.add("id", "granite-collection-switcher-toggle"); switcherAttrs.add("aria-labelledby", "cyclebutton-switcher-toggle-label"); switcherAttrs.add("data-granite-collection-switcher-target", targetCollection); %>><% for (Resource item : viewCache) { Config itemCfg = new Config(item); String src = ex.getString(itemCfg.get("src", String.class)); AttrBuilder itemAttrs = new AttrBuilder(request, xssAPI); itemAttrs.add("data-granite-collection-switcher-src", handleURITemplate(src, request)); itemAttrs.add("icon", itemCfg.get("icon", String.class)); itemAttrs.addSelected(item.getName().equals(currentView.getName())); %>><%= outVar(xssAPI, i18n, itemCfg.get("jcr:title", String.class)) %><% } if (!viewCache.isEmpty()) { String viewSettingsSrcBase = "/mnt/overlay/granite/ui/content/shell/collectionpage/viewsettings.html"; String src = viewSettingsSrcBase + Text.escapePath(resource.getPath()) + "?targetCollection=" + Text.escape(targetCollection) + "&consoleId=" + Text.escape(consoleId); AttrBuilder itemAttrs = new AttrBuilder(request, xssAPI); itemAttrs.addClass("granite-collection-switcher-settings"); itemAttrs.addClass("foundation-toggleable-control"); itemAttrs.add("icon", "gear"); itemAttrs.addHref("data-foundation-toggleable-control-src", src); itemAttrs.add("data-foundation-toggleable-control-action", "show"); itemAttrs.add("data-foundation-toggleable-control-cache", "false"); %>><%= xssAPI.encodeForHTML(i18n.get("View Settings")) %><% } %><% } %> <% Resource header = resource.getChild("header"); if (header != null) { %><% } %>
<% if (hasRails) { AttrBuilder railAttrs = new AttrBuilder(request, xssAPI); railAttrs.add("id", "shell-collectionpage-rail"); railAttrs.addClass("foundation-toggleable foundation-layout-panel-rail granite-rail"); railAttrs.addClass("foundation-container-resizable"); railAttrs.add("data-granite-layout-panel-save-key", railWidthSaveKey); railAttrs.add("data-granite-layout-panel-min-width", 250); String railStyle = null; if (!StringUtils.isEmpty(savedRailWidth)) { railStyle = "width: " + savedRailWidth + "px;"; } if (savedRailTargetFound || (rails != null && cmp.getExpressionHelper().getBoolean(rails.getValueMap().get("active", "false")))) { railAttrs.addClass("foundation-layout-panel-rail-active"); railAttrs.addClass("foundation-layout-panel-rail-activate-panel"); } else if (!StringUtils.isEmpty(savedRailWidth)) { railStyle = railStyle + " margin-left: -" + savedRailWidth + "px;"; } railAttrs.add("style", railStyle); %>
> <% if (rails != null) { for (Iterator it = rails.listChildren(); it.hasNext();) { Resource item = it.next(); AttrBuilder itemAttrs = new AttrBuilder(request, xssAPI); itemAttrs.addClass("shell-collectionpage-rail-panel"); itemAttrs.add("data-shell-collectionpage-rail-panel", item.getName()); if (!hasActiveRail && savedRailTarget != null && savedRailTarget.equals(item.getName())) { itemAttrs.addSelected(true); } cmp.include(item, new Tag(itemAttrs)); } } if (contentTreeItem != null && !rootPath.isEmpty()) { Resource columnRoot = resourceResolver.getResource(rootPath); String path = ex.getString(contentTreeItemCfg.get("path", String.class)); Resource currentColumnItem = resourceResolver.getResource(path); String src = request.getContextPath() + "/mnt/overlay/granite/ui/content/tree{.offset}.html{+id}?columnPath=" + Text.escapePath(contentTreeItem.getPath()); AttrBuilder navigationPanelItemAttrs = new AttrBuilder(request, xssAPI); navigationPanelItemAttrs.addClass("foundation-toggleable"); navigationPanelItemAttrs.addClass("foundation-layout-panel-rail-panel"); // navigationPanelItemAttrs.add("data-foundation-layout-panel-rail-panel-src",); navigationPanelItemAttrs.addClass("shell-collectionpage-rail-panel"); navigationPanelItemAttrs.add("data-shell-collectionpage-rail-panel", "content-tree"); if (!hasActiveRail && savedRailTarget != null && savedRailTarget.equals("content-tree")) { navigationPanelItemAttrs.addSelected(true); } AttrBuilder treeElemAttrs = new AttrBuilder(request, xssAPI); treeElemAttrs.add("class", "shell-collectionpage-tree"); treeElemAttrs.add("class", "is-lazyLoaded"); treeElemAttrs.add("data-shell-collectionpage-tree-target", targetCollection); treeElemAttrs.add("root-id", columnRoot.getPath()); treeElemAttrs.add("src", src); treeElemAttrs.add("children", getChildrenJSON(currentColumnItem, columnRoot)); treeElemAttrs.add("label", xssAPI.encodeForHTML(i18n.get("Content Tree"))); %>> > <%= xssAPI.encodeForHTML(i18n.get("Loading content")) %> <%= xssAPI.encodeForHTML(i18n.get("Could not load content")) %> <%= xssAPI.encodeForHTML(i18n.get("There is no item")) %> <%= xssAPI.encodeForHTML(i18n.get("Load more")) %> <% } %>
<% } Config currentViewCfg = new Config(currentView); String selector = currentViewCfg.get("selector", String.class); if (itemPreviewSrc != null) { %>
<% AttrBuilder collectionAttrs = new AttrBuilder(request, xssAPI); collectionAttrs.addClass("foundation-layout-panel-rail foundation-layout-panel-rail-active"); collectionAttrs.addClass("foundation-container-resizable"); collectionAttrs.add("data-granite-layout-panel-save-key", collectionWidthSaveKey); collectionAttrs.add("data-granite-layout-panel-min-width", 272); if (!StringUtils.isEmpty(savedCollectionWidth)) { collectionAttrs.add("style", "width: " + savedCollectionWidth + "px;"); } %>
><% // Need to introduce `.foundation-layout-util-maximized-container` wrapper element to work around a bug // at `.foundation-container-resizable` which requires its child to be scrollable. AttrBuilder previewSupportAttrs = new AttrBuilder(request, xssAPI); previewSupportAttrs.addClass("foundation-layout-util-maximized-container"); previewSupportAttrs.addClass("foundation-collection-previewsupport"); previewSupportAttrs.add("data-foundation-collection-previewsupport-collection", "child"); previewSupportAttrs.add("data-foundation-collection-previewsupport-target", "#granite-shell-collection-preview"); previewSupportAttrs.add("data-foundation-collection-previewsupport-src", itemPreviewSrc); %>
><% if (StringUtils.isNotEmpty(selector)) { %><% } else { %><% } %>
<% } else { // Note that `.foundation-collection-content` is not needed and can be removed. // However, there is a bad selector using it in Assets code base right now. %>
<% if (StringUtils.isNotEmpty(selector)) { %><% } else { %><% } %>
<% } %>
<% Resource footer = resource.getChild("footer"); if (footer != null) { %><% } %>