From 40a371495c05c1fb69d5f6871b9f0ee8eff32ec9 Mon Sep 17 00:00:00 2001 From: Jonathan Mendez Date: Thu, 19 Mar 2026 12:28:12 -0600 Subject: [PATCH 1/3] Add ContentTypeManagement widget to ui.xml --- .../upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt | 122 ++++ .../crafter/studio/upgrade/pipelines.yaml | 14 + .../config/studio/ui.xml | 86 +++ .../configuration/samples/sample-ui.xml | 86 +++ .../java/org/craftercms/studio/XsltTest.java | 17 + .../upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml | 667 ++++++++++++++++++ .../upgrade/xslt/ui/v5.0/5.0.0.1/input.xml | 581 +++++++++++++++ 7 files changed, 1573 insertions(+) create mode 100644 src/main/resources/crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt create mode 100644 src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml create mode 100644 src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/input.xml diff --git a/src/main/resources/crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt b/src/main/resources/crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt new file mode 100644 index 0000000000..56e57c94dc --- /dev/null +++ b/src/main/resources/crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + Page + page + + + + + + file-name + Page URL + file-name + + + + + + internal-name + Internal Name + input + + + + + + navLabel + Nav Label + input + + + + + + placeInNav + Place In Nav + page-nav-order + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + placeInNav + navLabel + + + + + + Component + component + + + + + + file-name + Component ID + auto-filename + + + + + + internal-name + Internal Name + input + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + + + + + + + + diff --git a/src/main/resources/crafter/studio/upgrade/pipelines.yaml b/src/main/resources/crafter/studio/upgrade/pipelines.yaml index 472251b917..2481da164a 100644 --- a/src/main/resources/crafter/studio/upgrade/pipelines.yaml +++ b/src/main/resources/crafter/studio/upgrade/pipelines.yaml @@ -590,6 +590,14 @@ pipelines: operations: - type: dbScriptUpgrader filename: upgrade/5.0.x/5.0.0.13-to-5.0.0.14.sql + - currentVersion: 5.0.0.14 + nextVersion: 5.0.0.15 + operations: + - type: globalRepoUpgrader + files: + - src: repo-bootstrap/global/configuration/samples/sample-ui.xml + dest: configuration/samples/sample-ui.xml + commitDetails: Update sample file for ui.xml # Pipeline to upgrade site repositories site: @@ -1351,3 +1359,9 @@ configurations: - type: xsltFileUpgrader template: crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.0.xslt commitDetails: Add i18n to PathNavigator/PathNavigatorTree + - currentVersion: 5.0.0.0 + nextVersion: 5.0.0.1 + operations: + - type: xsltFileUpgrader + template: crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt + commitDetails: Update the UI to use new icons for dashboard widgets diff --git a/src/main/webapp/repo-bootstrap/global/blueprints/1000_website_editorial/config/studio/ui.xml b/src/main/webapp/repo-bootstrap/global/blueprints/1000_website_editorial/config/studio/ui.xml index a6f22160c8..7254e79ec0 100644 --- a/src/main/webapp/repo-bootstrap/global/blueprints/1000_website_editorial/config/studio/ui.xml +++ b/src/main/webapp/repo-bootstrap/global/blueprints/1000_website_editorial/config/studio/ui.xml @@ -391,6 +391,92 @@ + + + + + Page + page + + + + + + file-name + Page URL + file-name + + + + + + internal-name + Internal Name + input + + + + + + navLabel + Nav Label + input + + + + + + placeInNav + Place In Nav + page-nav-order + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + placeInNav + navLabel + + + + + + Component + component + + + + + + file-name + Component ID + auto-filename + + + + + + internal-name + Internal Name + input + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + + + + + diff --git a/src/main/webapp/repo-bootstrap/global/configuration/samples/sample-ui.xml b/src/main/webapp/repo-bootstrap/global/configuration/samples/sample-ui.xml index 81fc1d078b..3079c686a8 100644 --- a/src/main/webapp/repo-bootstrap/global/configuration/samples/sample-ui.xml +++ b/src/main/webapp/repo-bootstrap/global/configuration/samples/sample-ui.xml @@ -428,6 +428,92 @@ + + + + + Page + page + + + + + + file-name + Page URL + file-name + + + + + + internal-name + Internal Name + input + + + + + + navLabel + Nav Label + input + + + + + + placeInNav + Place In Nav + page-nav-order + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + placeInNav + navLabel + + + + + + Component + component + + + + + + file-name + Component ID + auto-filename + + + + + + internal-name + Internal Name + input + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + + + + + diff --git a/src/test/java/org/craftercms/studio/XsltTest.java b/src/test/java/org/craftercms/studio/XsltTest.java index cf0801cd2d..5f48a4b055 100644 --- a/src/test/java/org/craftercms/studio/XsltTest.java +++ b/src/test/java/org/craftercms/studio/XsltTest.java @@ -459,6 +459,23 @@ public void ui5000Test(Resource template, Resource content, Resource expected, M testXsltTemplate(template, content, expected, params); } + @DataProvider(name = "ui5001TestData") + public Object[][] ui5001TestData() { + return new Object[][]{ + new Object[] { + new ClassPathResource("crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt"), + new ClassPathResource("crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/input.xml"), + new ClassPathResource("crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml"), + emptyMap() + } + }; + } + + @Test(dataProvider = "ui5001TestData") + public void ui5001Test(Resource template, Resource content, Resource expected, Map params) throws IOException, TransformerException { + testXsltTemplate(template, content, expected, params); + } + private void testXsltTemplate(Resource template, Resource content, Resource expected, Map params) throws IOException, TransformerException { try (InputStream templateIs = template.getInputStream(); diff --git a/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml b/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml new file mode 100644 index 0000000000..62be08d663 --- /dev/null +++ b/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml @@ -0,0 +1,667 @@ + + + + 5.0.0.0 + + + + + + + + <icon id="@mui/icons-material/DashboardRounded"/> + <widget id="craftercms.components.SiteDashboard"/> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <id>Pages</id> + <label id="pathNavigatorTree.pages" defaultMessage="Pages"/> + <icon id="@mui/icons-material/DescriptionOutlined"/> + <rootPath>/site/website/index.xml</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <id>Components</id> + <label id="pathNavigatorTree.components" defaultMessage="Components"/> + <icon id="craftercms.icons.Component"/> + <rootPath>/site/components</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <id>Taxonomy</id> + <label id="pathNavigatorTree.taxonomy" defaultMessage="Taxonomy"/> + <icon id="@mui/icons-material/LocalOfferOutlined"/> + <rootPath>/site/taxonomy</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <id>StaticAssets</id> + <label id="pathNavigatorTree.staticAssets" defaultMessage="Static Assets"/> + <icon id="@mui/icons-material/ImageOutlined"/> + <rootPath>/static-assets</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <label id="pathNavigatorTree.templates" defaultMessage="Templates"/> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + <rootPath>/templates</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <label id="pathNavigatorTree.scripts" defaultMessage="Scripts"/> + <icon id="@mui/icons-material/CodeRounded"/> + <rootPath>/scripts</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelEmbeddedAppViewButton"> + <permittedRoles> + <role>admin</role> + <role>developer</role> + </permittedRoles> + <configuration> + <title id="siteTools.title" defaultMessage="Project Tools"/> + <icon id="@mui/icons-material/ConstructionRounded"/> + <widget id="craftercms.components.EmbeddedSiteTools"/> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ICEToolsPanel"> + <configuration> + <widgets> + <widget id="craftercms.components.PaddingModeSwitchListItem"> + <configuration> + <disabled>false</disabled> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewSearchPanel.title" defaultMessage="Search"/> + <icon id="@mui/icons-material/SearchRounded"/> + <widgets> + <widget id="craftercms.components.PreviewSearchPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewComponentsPanelTitle" defaultMessage="Create Content"/> + <icon id="craftercms.icons.AddComponents"/> + <widgets> + <widget id="craftercms.components.PreviewComponentsPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewBrowseComponentsPanelTitle" defaultMessage="Existing Content"/> + <icon id="craftercms.icons.BrowseComponents"/> + <widgets> + <widget id="craftercms.components.PreviewBrowseComponentsPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewDropTargetsPanelTitle" defaultMessage="Drop Targets"/> + <icon id="@mui/icons-material/MoveToInboxRounded"/> + <widgets> + <widget id="craftercms.components.PreviewDropTargetsPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewAssetsPanel.title" defaultMessage="Assets"/> + <icon id="@mui/icons-material/ImageOutlined"/> + <widgets> + <widget id="craftercms.components.PreviewAssetsPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewAudiencesPanel.title" defaultMessage="Audience Targeting"/> + <icon id="@mui/icons-material/EmojiPeopleRounded"/> + <widgets> + <widget id="craftercms.components.PreviewAudiencesPanel"> + <configuration> + <fields> + <segment> + <id>segment</id> + <name id="previewAudiencesPanel.segmentLabel" defaultMessage="Segment"/> + <description>User segment.</description> + <type>dropdown</type> + <defaultValue>anonymous</defaultValue> + <values> + <value> + <label id="previewAudiencesPanel.guyValueLabel" defaultMessage="Guy"/> + <value>guy</value> + </value> + <value> + <label id="previewAudiencesPanel.galValueLabel" defaultMessage="Gal"/> + <value>gal</value> + </value> + <value> + <label id="previewAudiencesPanel.anonymousValueLabel" defaultMessage="Anonymous"/> + <value>anonymous</value> + </value> + </values> + <helpText id="previewAudiencesPanel.segmentHelpText" defaultMessage="Setting the segment will change content targeting to the audience selected"/> + </segment> + <name> + <id>name</id> + <name id="previewAudiencesPanel.nameLabel" defaultMessage="Name"/> + <description> + User's first and last name. + </description> + <type>input</type> + <helpText id="previewAudiencesPanel.nameHelpText" defaultMessage="Enter user's first and last name"/> + </name> + </fields> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewPageExplorerPanel.title" defaultMessage="Page Explorer"/> + <icon id="craftercms.icons.PageExplorer"/> + <widgets> + <widget id="craftercms.components.PreviewPageExplorerPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewSimulatorPanel.title" defaultMessage="Device Simulator"/> + <icon id="@mui/icons-material/DevicesRounded"/> + <widgets> + <widget id="craftercms.components.PreviewSimulatorPanel"> + <configuration> + <devices> + <device> + <title>smartPhone + 375 + 667 + + + tablet + 768 + 1024 + + + + + + + + + + + + <icon id="@mui/icons-material/SettingsOutlined"/> + <widgets> + <widget id="craftercms.components.PreviewSettingsPanel"/> + </widgets> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.Launcher"> + <configuration> + <widgets> + <widget id="craftercms.components.LauncherSection"> + <configuration> + <title id="launcher.siteSectionTitle"> + <defaultMessage> + <![CDATA[Project <muted>• {siteName}</muted>]]></defaultMessage> + + + + + + <systemLinkId>siteDashboardDialog</systemLinkId> + <icon id="@mui/icons-material/DashboardRounded"/> + </configuration> + </widget> + <widget id="craftercms.components.LauncherLinkTile"> + <configuration> + <title id="words.preview" defaultMessage="Preview"/> + <systemLinkId>preview</systemLinkId> + <icon id="craftercms.icons.Preview"/> + </configuration> + </widget> + <widget id="craftercms.components.LauncherLinkTile"> + <permittedRoles> + <role>admin</role> + <role>developer</role> + </permittedRoles> + <configuration> + <title id="siteTools.title" defaultMessage="Project Tools"/> + <systemLinkId>siteToolsDialog</systemLinkId> + <icon id="@mui/icons-material/ConstructionRounded"/> + </configuration> + </widget> + <widget id="craftercms.components.LauncherLinkTile"> + <configuration> + <title id="words.search" defaultMessage="Search"/> + <systemLinkId>siteSearchDialog</systemLinkId> + <icon id="@mui/icons-material/SearchRounded"/> + </configuration> + </widget> + <widget id="craftercms.components.LauncherPublishingStatusTile"/> + </widgets> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.PreviewToolbar"> + <configuration> + <leftSection> + <widgets> + <widget id="craftercms.components.SiteSwitcherSelect"/> + <widget id="craftercms.components.QuickCreate"/> + </widgets> + </leftSection> + <middleSection> + <widgets> + <widget id="craftercms.components.PreviewAddressBar"/> + </widgets> + </middleSection> + <rightSection> + <widgets> + <widget id="craftercms.components.EditModesSwitcher"/> + <widget id="craftercms.components.PublishingStatusButton"> + <configuration> + <variant>icon</variant> + </configuration> + </widget> + <widget id="craftercms.components.WidgetDialogIconButton"> + <configuration> + <title id="words.search" defaultMessage="Search"/> + <icon id="@mui/icons-material/SearchRounded"/> + <widget id="craftercms.components.Search"> + <configuration> + <embedded>true</embedded> + </configuration> + </widget> + </configuration> + </widget> + </widgets> + </rightSection> + </configuration> + </widget> + <widget id="craftercms.components.Dashboard"> + <configuration> + <mainSection> + <widgets> + <widget id="craftercms.components.MyRecentActivityDashlet"/> + <widget id="craftercms.components.UnpublishedDashlet"/> + <widget id="craftercms.components.PendingApprovalDashlet"/> + <widget id="craftercms.components.ScheduledDashlet"/> + <widget id="craftercms.components.RecentlyPublishedDashlet"/> + <widget id="craftercms.components.ExpiringDashlet"/> + </widgets> + </mainSection> + </configuration> + </widget> + <widget id="craftercms.components.TinyMCE"> + <configuration> + <setups> + <setup id="generic"> + <!-- Configuration options: https://www.tiny.cloud/docs/configure/ --> + <!-- Plugins: https://www.tiny.cloud/docs/plugins/opensource/ --> + <tinymceOptions> + <![CDATA[ + { + "menubar": true, + "theme": "silver", + "plugins": "preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media template codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help acecode", + "extended_valid_elements": "", + "valid_children": "", + "toolbar1": "blocks | bold italic strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat", + "code_editor_wrap": false, + "toolbar_sticky": true, + "image_advtab": true, + "encoding": "xml", + "relative_urls": false, + "remove_script_host": false, + "convert_urls": false, + "remove_trailing_brs": false, + "media_live_embeds": true, + "autoresize_on_init": false, + "autoresize_bottom_margin": 0, + "menu": { + "tools": { "title": "Tools", "items": "tinymcespellchecker code acecode wordcount" } + }, + "automatic_uploads": true, + "file_picker_types": "image media file", + "paste_data_images": true, + "templates": [], + "content_css": [], + "content_style": "body {}", + "contextmenu": false + } + ]]> + </tinymceOptions> + </setup> + </setups> + </configuration> + </widget> + <widget id="craftercms.components.ContentTypeManagement"> + <configuration> + <objectTypes id="page"> + <descriptor> + <name>Page</name> + <type>page</type> + <fields> + <file-name> + <defaultValue /> + <description /> + <helpText /> + <id>file-name</id> + <name>Page URL</name> + <type>file-name</type> + </file-name> + <internal-name> + <defaultValue /> + <description /> + <helpText /> + <id>internal-name</id> + <name>Internal Name</name> + <type>input</type> + </internal-name> + <navLabel> + <defaultValue /> + <description /> + <helpText /> + <id>navLabel</id> + <name>Nav Label</name> + <type>input</type> + </navLabel> + <placeInNav> + <defaultValue /> + <description /> + <helpText /> + <id>placeInNav</id> + <name>Place In Nav</name> + <type>page-nav-order</type> + </placeInNav> + </fields> + <sections title="System Properties"> + <id>defaultSection</id> + <color>rgba(255,0,0,.7)</color> + <title>System Properties + true + file-name + internal-name + placeInNav + navLabel + + + + + + Component + component + + + + + + file-name + Component ID + auto-filename + + + + + + internal-name + Internal Name + input + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + + + + + + + + + + + <icon id="@mui/icons-material/WidgetsOutlined"/> + <url>content-types</url> + <widget id="craftercms.components.ContentTypeManagement"/> + </tool> + <tool> + <title id="GlobalMenu.EncryptionToolEntryLabel" defaultMessage="Encryption Tool"/> + <icon id="@mui/icons-material/LockOutlined"/> + <url>encrypt-tool</url> + <widget id="craftercms.components.SiteEncryptTool"/> + </tool> + <tool> + <title id="words.configuration" defaultMessage="Configuration"/> + <icon id="@mui/icons-material/SettingsApplicationsOutlined"/> + <url>configuration</url> + <widget id="craftercms.components.SiteConfigurationManagement"/> + </tool> + <tool> + <title id="GlobalMenu.AuditEntryLabel" defaultMessage="Audit"/> + <icon id="@mui/icons-material/SubjectRounded"/> + <url>audit</url> + <widget id="craftercms.components.SiteAuditManagement"/> + </tool> + <tool> + <title id="workflowStates.title" defaultMessage="Workflow States"/> + <icon id="@mui/icons-material/SettingsOutlined"/> + <url>item-states</url> + <widget id="craftercms.components.WorkflowStateManagement"/> + </tool> + <tool> + <title id="GlobalMenu.LogConsoleEntryLabel" defaultMessage="Log Console"/> + <icon id="@mui/icons-material/FormatAlignCenterRounded"/> + <url>log</url> + <widget id="craftercms.components.LogConsole"> + <configuration> + <logType>preview</logType> + </configuration> + </widget> + </tool> + <tool> + <title id="words.publishing" defaultMessage="Publishing"/> + <icon id="@mui/icons-material/CloudUploadOutlined"/> + <url>publishing</url> + <widget id="craftercms.components.PublishingDashboard"/> + </tool> + <tool> + <title id="words.git" defaultMessage="Git"/> + <icon id="craftercms.icons.Git"/> + <url>git</url> + <widget id="craftercms.components.GitManagement"/> + </tool> + <tool> + <title>GraphQL + + graphiql + + + + + <icon id="@mui/icons-material/ExtensionOutlined"/> + <url>plugins</url> + <widget id="craftercms.components.PluginManagement"/> + </tool> + </tools> + </reference> + <reference id="craftercms.freemarkerCodeSnippets"> + <contentVariable label="Content variable"> + <value><![CDATA[${contentModel.VARIABLE_NAME}]]></value> + </contentVariable> + <requestParameter label="Request parameter"> + <value><![CDATA[${RequestParameters["PARAM_NAME"]!"DEFAULT"}]]></value> + </requestParameter> + <crafterSupportMacros label="Crafter support macros"> + <value><![CDATA[<#import "/templates/system/common/crafter.ftl" as crafter />]]></value> + </crafterSupportMacros> + <transformPathToUrl label="Transform PATH to URL"> + <value><![CDATA[${urlTransformationService.transform('storeUrlToRenderUrl', STORE_URL)}]]></value> + </transformPathToUrl> + <renderComponentsList label="Render list of components"> + <value><![CDATA[<#list contentModel.VARIABLE_NAME.item as module> + <@renderComponent component=module /> +</#list>]]></value> + </renderComponentsList> + <iterateItemsListLoadContentItem label="Iterate over a list of items and load content item"> + <value><![CDATA[<#list contentModel.VARIABLE_NAME.item as myItem> + <#assign myContentItem = siteItemService.getSiteItem(myItem.key) /> + ${myContentItem.variableName} +</#list>]]></value> + </iterateItemsListLoadContentItem> + <iterateRepeatGroup label="Iterate over repeat group"> + <value><![CDATA[<#list contentModel.VARIABLE_NAME.item as row> + ${row.VARIABLE_NAME} +</#list>]]></value> + </iterateRepeatGroup> + <fremarkerValueAssignment label="Freemarker value assignment"> + <value><![CDATA[<#assign imageSource = contentModel.image!"" />]]></value> + </fremarkerValueAssignment> + <freemarkerIf label="Freemarker value IF"> + <value><![CDATA[<#if CONDITION> + ... +</#if>]]></value> + </freemarkerIf> + <freemarkerLoop label="Freemarker value LOOP"> + <value><![CDATA[<#list ARRAY as value> + ${value_index}: ${value} +</#list>]]></value> + </freemarkerLoop> + <freemarkerFragmentInclude label="Freemarker Fragment include"> + <value><![CDATA[<#include "/templates/PATH" />]]></value> + </freemarkerFragmentInclude> + <freemarkerLibraryImport label="Freemarker Library import"> + <value><![CDATA[<#import "/templates/PATH" as NAMESPACE />]]></value> + </freemarkerLibraryImport> + <htmlPage label="HTML Page"> + <value><![CDATA[<#import "/templates/system/common/crafter.ftl" as crafter /> +<!doctype html> +<html lang="en"> + <head> + <#-- Insert your head markup here --> + <@crafter.head /> + </head> + <body> + <@crafter.body_top /> + <#-- Insert your body markup here --> + <@crafter.body_bottom /> + </body> +</html>]]></value> + </htmlPage> + </reference> + <reference id="craftercms.groovyCodeSnippets"> + <accessContentModel label="Access Content variable"> + <value><![CDATA[contentModel.VARIABLE_NAME]]></value> + </accessContentModel> + <accessTemplateodel label="Access Template variable"> + <value><![CDATA[templateModel]]></value> + </accessTemplateodel> + <currentSiteId label="Current Site ID"> + <value><![CDATA[siteContext.siteName]]></value> + </currentSiteId> + <requestParameters label="Request Parameters"> + <value><![CDATA[params]]></value> + </requestParameters> + <cookies label="Cookies"> + <value><![CDATA[cookies]]></value> + </cookies> + <httpRequest label="HTTP Request"> + <value><![CDATA[request]]></value> + </httpRequest> + <httpResponse label="HTTP Response"> + <value><![CDATA[response]]></value> + </httpResponse> + <session label="Session"> + <value><![CDATA[session]]></value> + </session> + <transformPathToUrl label="Transform PATH to URL"> + <value><![CDATA[urlTransformationService.transform('storeUrlToRenderUrl', STORE_URL)]]></value> + </transformPathToUrl> + <userProfile label="User Profile"> + <value><![CDATA[profile]]></value> + </userProfile> + <currentAuthentication label="Current Authentication"> + <value><![CDATA[authentication]]></value> + </currentAuthentication> + <logInfo label="Log an INFO"> + <value><![CDATA[logger.info('MY MESSAGE')]]></value> + </logInfo> + <logError label="Log an ERROR"> + <value><![CDATA[logger.error('MY MESSAGE')]]></value> + </logError> + <searchService label="Search Service"> + <value><![CDATA[searchService]]></value> + </searchService> + <siteItemService label="Site Item Service"> + <value><![CDATA[siteItemService]]></value> + </siteItemService> + <profileService label="Profile Service"> + <value><![CDATA[profileService]]></value> + </profileService> + <getSpringBean label="Get Spring Bean"> + <value><![CDATA[applicationContext.get("SPRING_BEAN_NAME")]]></value> + </getSpringBean> + </reference> + </references> +</siteUi> diff --git a/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/input.xml b/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/input.xml new file mode 100644 index 0000000000..c72dfc7f45 --- /dev/null +++ b/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/input.xml @@ -0,0 +1,581 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2007-2026 Crafter Software Corporation. All Rights Reserved. + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU General Public License version 3 as published by + ~ the Free Software Foundation. + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU General Public License for more details. + ~ + ~ You should have received a copy of the GNU General Public License + ~ along with this program. If not, see <http://www.gnu.org/licenses/>. + --> +<siteUi> + <version>5.0.0.0</version> + <widget + id="craftercms.components.Preview" + initialEditModeOn="true" + initialHighlightMode="all" + /> + <widget id="craftercms.components.ToolsPanel"> + <configuration> + <widgets> + <widget id="craftercms.components.ToolsPanelEmbeddedAppViewButton"> + <configuration> + <title id="words.dashboard" defaultMessage="Dashboard"/> + <icon id="@mui/icons-material/DashboardRounded"/> + <widget id="craftercms.components.SiteDashboard"/> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <id>Pages</id> + <label id="pathNavigatorTree.pages" defaultMessage="Pages"/> + <icon id="@mui/icons-material/DescriptionOutlined"/> + <rootPath>/site/website/index.xml</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <id>Components</id> + <label id="pathNavigatorTree.components" defaultMessage="Components"/> + <icon id="craftercms.icons.Component"/> + <rootPath>/site/components</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <id>Taxonomy</id> + <label id="pathNavigatorTree.taxonomy" defaultMessage="Taxonomy"/> + <icon id="@mui/icons-material/LocalOfferOutlined"/> + <rootPath>/site/taxonomy</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <id>StaticAssets</id> + <label id="pathNavigatorTree.staticAssets" defaultMessage="Static Assets"/> + <icon id="@mui/icons-material/ImageOutlined"/> + <rootPath>/static-assets</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <label id="pathNavigatorTree.templates" defaultMessage="Templates"/> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + <rootPath>/templates</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <label id="pathNavigatorTree.scripts" defaultMessage="Scripts"/> + <icon id="@mui/icons-material/CodeRounded"/> + <rootPath>/scripts</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelEmbeddedAppViewButton"> + <permittedRoles> + <role>admin</role> + <role>developer</role> + </permittedRoles> + <configuration> + <title id="siteTools.title" defaultMessage="Project Tools"/> + <icon id="@mui/icons-material/ConstructionRounded"/> + <widget id="craftercms.components.EmbeddedSiteTools"/> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ICEToolsPanel"> + <configuration> + <widgets> + <widget id="craftercms.components.PaddingModeSwitchListItem"> + <configuration> + <disabled>false</disabled> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewSearchPanel.title" defaultMessage="Search"/> + <icon id="@mui/icons-material/SearchRounded"/> + <widgets> + <widget id="craftercms.components.PreviewSearchPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewComponentsPanelTitle" defaultMessage="Create Content"/> + <icon id="craftercms.icons.AddComponents"/> + <widgets> + <widget id="craftercms.components.PreviewComponentsPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewBrowseComponentsPanelTitle" defaultMessage="Existing Content"/> + <icon id="craftercms.icons.BrowseComponents"/> + <widgets> + <widget id="craftercms.components.PreviewBrowseComponentsPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewDropTargetsPanelTitle" defaultMessage="Drop Targets"/> + <icon id="@mui/icons-material/MoveToInboxRounded"/> + <widgets> + <widget id="craftercms.components.PreviewDropTargetsPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewAssetsPanel.title" defaultMessage="Assets"/> + <icon id="@mui/icons-material/ImageOutlined"/> + <widgets> + <widget id="craftercms.components.PreviewAssetsPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewAudiencesPanel.title" defaultMessage="Audience Targeting"/> + <icon id="@mui/icons-material/EmojiPeopleRounded"/> + <widgets> + <widget id="craftercms.components.PreviewAudiencesPanel"> + <configuration> + <fields> + <segment> + <id>segment</id> + <name id="previewAudiencesPanel.segmentLabel" defaultMessage="Segment"/> + <description>User segment.</description> + <type>dropdown</type> + <defaultValue>anonymous</defaultValue> + <values> + <value> + <label id="previewAudiencesPanel.guyValueLabel" defaultMessage="Guy"/> + <value>guy</value> + </value> + <value> + <label id="previewAudiencesPanel.galValueLabel" defaultMessage="Gal"/> + <value>gal</value> + </value> + <value> + <label id="previewAudiencesPanel.anonymousValueLabel" defaultMessage="Anonymous"/> + <value>anonymous</value> + </value> + </values> + <helpText id="previewAudiencesPanel.segmentHelpText" defaultMessage="Setting the segment will change content targeting to the audience selected"/> + </segment> + <name> + <id>name</id> + <name id="previewAudiencesPanel.nameLabel" defaultMessage="Name"/> + <description> + User's first and last name. + </description> + <type>input</type> + <helpText id="previewAudiencesPanel.nameHelpText" defaultMessage="Enter user's first and last name"/> + </name> + </fields> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewPageExplorerPanel.title" defaultMessage="Page Explorer"/> + <icon id="craftercms.icons.PageExplorer"/> + <widgets> + <widget id="craftercms.components.PreviewPageExplorerPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewSimulatorPanel.title" defaultMessage="Device Simulator"/> + <icon id="@mui/icons-material/DevicesRounded"/> + <widgets> + <widget id="craftercms.components.PreviewSimulatorPanel"> + <configuration> + <devices> + <device> + <title>smartPhone + 375 + 667 + + + tablet + 768 + 1024 + + + + + + + + + + + + <icon id="@mui/icons-material/SettingsOutlined"/> + <widgets> + <widget id="craftercms.components.PreviewSettingsPanel"/> + </widgets> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.Launcher"> + <configuration> + <widgets> + <widget id="craftercms.components.LauncherSection"> + <configuration> + <title id="launcher.siteSectionTitle"> + <defaultMessage> + <![CDATA[Project <muted>• {siteName}</muted>]]></defaultMessage> + + + + + + <systemLinkId>siteDashboardDialog</systemLinkId> + <icon id="@mui/icons-material/DashboardRounded"/> + </configuration> + </widget> + <widget id="craftercms.components.LauncherLinkTile"> + <configuration> + <title id="words.preview" defaultMessage="Preview"/> + <systemLinkId>preview</systemLinkId> + <icon id="craftercms.icons.Preview"/> + </configuration> + </widget> + <widget id="craftercms.components.LauncherLinkTile"> + <permittedRoles> + <role>admin</role> + <role>developer</role> + </permittedRoles> + <configuration> + <title id="siteTools.title" defaultMessage="Project Tools"/> + <systemLinkId>siteToolsDialog</systemLinkId> + <icon id="@mui/icons-material/ConstructionRounded"/> + </configuration> + </widget> + <widget id="craftercms.components.LauncherLinkTile"> + <configuration> + <title id="words.search" defaultMessage="Search"/> + <systemLinkId>siteSearchDialog</systemLinkId> + <icon id="@mui/icons-material/SearchRounded"/> + </configuration> + </widget> + <widget id="craftercms.components.LauncherPublishingStatusTile"/> + </widgets> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.PreviewToolbar"> + <configuration> + <leftSection> + <widgets> + <widget id="craftercms.components.SiteSwitcherSelect"/> + <widget id="craftercms.components.QuickCreate"/> + </widgets> + </leftSection> + <middleSection> + <widgets> + <widget id="craftercms.components.PreviewAddressBar"/> + </widgets> + </middleSection> + <rightSection> + <widgets> + <widget id="craftercms.components.EditModesSwitcher"/> + <widget id="craftercms.components.PublishingStatusButton"> + <configuration> + <variant>icon</variant> + </configuration> + </widget> + <widget id="craftercms.components.WidgetDialogIconButton"> + <configuration> + <title id="words.search" defaultMessage="Search"/> + <icon id="@mui/icons-material/SearchRounded"/> + <widget id="craftercms.components.Search"> + <configuration> + <embedded>true</embedded> + </configuration> + </widget> + </configuration> + </widget> + </widgets> + </rightSection> + </configuration> + </widget> + <widget id="craftercms.components.Dashboard"> + <configuration> + <mainSection> + <widgets> + <widget id="craftercms.components.MyRecentActivityDashlet"/> + <widget id="craftercms.components.UnpublishedDashlet"/> + <widget id="craftercms.components.PendingApprovalDashlet"/> + <widget id="craftercms.components.ScheduledDashlet"/> + <widget id="craftercms.components.RecentlyPublishedDashlet"/> + <widget id="craftercms.components.ExpiringDashlet"/> + </widgets> + </mainSection> + </configuration> + </widget> + <widget id="craftercms.components.TinyMCE"> + <configuration> + <setups> + <setup id="generic"> + <!-- Configuration options: https://www.tiny.cloud/docs/configure/ --> + <!-- Plugins: https://www.tiny.cloud/docs/plugins/opensource/ --> + <tinymceOptions> + <![CDATA[ + { + "menubar": true, + "theme": "silver", + "plugins": "preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media template codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help acecode", + "extended_valid_elements": "", + "valid_children": "", + "toolbar1": "blocks | bold italic strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify | numlist bullist outdent indent | removeformat", + "code_editor_wrap": false, + "toolbar_sticky": true, + "image_advtab": true, + "encoding": "xml", + "relative_urls": false, + "remove_script_host": false, + "convert_urls": false, + "remove_trailing_brs": false, + "media_live_embeds": true, + "autoresize_on_init": false, + "autoresize_bottom_margin": 0, + "menu": { + "tools": { "title": "Tools", "items": "tinymcespellchecker code acecode wordcount" } + }, + "automatic_uploads": true, + "file_picker_types": "image media file", + "paste_data_images": true, + "templates": [], + "content_css": [], + "content_style": "body {}", + "contextmenu": false + } + ]]> + </tinymceOptions> + </setup> + </setups> + </configuration> + </widget> + <references> + <reference id="craftercms.siteTools"> + <tools> + <tool> + <title id="dropTargetsMessages.contentTypes" defaultMessage="Content Types"/> + <icon id="@mui/icons-material/WidgetsOutlined"/> + <url>content-types</url> + <widget id="craftercms.components.ContentTypeManagement"/> + </tool> + <tool> + <title id="GlobalMenu.EncryptionToolEntryLabel" defaultMessage="Encryption Tool"/> + <icon id="@mui/icons-material/LockOutlined"/> + <url>encrypt-tool</url> + <widget id="craftercms.components.SiteEncryptTool"/> + </tool> + <tool> + <title id="words.configuration" defaultMessage="Configuration"/> + <icon id="@mui/icons-material/SettingsApplicationsOutlined"/> + <url>configuration</url> + <widget id="craftercms.components.SiteConfigurationManagement"/> + </tool> + <tool> + <title id="GlobalMenu.AuditEntryLabel" defaultMessage="Audit"/> + <icon id="@mui/icons-material/SubjectRounded"/> + <url>audit</url> + <widget id="craftercms.components.SiteAuditManagement"/> + </tool> + <tool> + <title id="workflowStates.title" defaultMessage="Workflow States"/> + <icon id="@mui/icons-material/SettingsOutlined"/> + <url>item-states</url> + <widget id="craftercms.components.WorkflowStateManagement"/> + </tool> + <tool> + <title id="GlobalMenu.LogConsoleEntryLabel" defaultMessage="Log Console"/> + <icon id="@mui/icons-material/FormatAlignCenterRounded"/> + <url>log</url> + <widget id="craftercms.components.LogConsole"> + <configuration> + <logType>preview</logType> + </configuration> + </widget> + </tool> + <tool> + <title id="words.publishing" defaultMessage="Publishing"/> + <icon id="@mui/icons-material/CloudUploadOutlined"/> + <url>publishing</url> + <widget id="craftercms.components.PublishingDashboard"/> + </tool> + <tool> + <title id="words.git" defaultMessage="Git"/> + <icon id="craftercms.icons.Git"/> + <url>git</url> + <widget id="craftercms.components.GitManagement"/> + </tool> + <tool> + <title>GraphQL + + graphiql + + + + + <icon id="@mui/icons-material/ExtensionOutlined"/> + <url>plugins</url> + <widget id="craftercms.components.PluginManagement"/> + </tool> + </tools> + </reference> + <reference id="craftercms.freemarkerCodeSnippets"> + <contentVariable label="Content variable"> + <value><![CDATA[${contentModel.VARIABLE_NAME}]]></value> + </contentVariable> + <requestParameter label="Request parameter"> + <value><![CDATA[${RequestParameters["PARAM_NAME"]!"DEFAULT"}]]></value> + </requestParameter> + <crafterSupportMacros label="Crafter support macros"> + <value><![CDATA[<#import "/templates/system/common/crafter.ftl" as crafter />]]></value> + </crafterSupportMacros> + <transformPathToUrl label="Transform PATH to URL"> + <value><![CDATA[${urlTransformationService.transform('storeUrlToRenderUrl', STORE_URL)}]]></value> + </transformPathToUrl> + <renderComponentsList label="Render list of components"> + <value><![CDATA[<#list contentModel.VARIABLE_NAME.item as module> + <@renderComponent component=module /> +</#list>]]></value> + </renderComponentsList> + <iterateItemsListLoadContentItem label="Iterate over a list of items and load content item"> + <value><![CDATA[<#list contentModel.VARIABLE_NAME.item as myItem> + <#assign myContentItem = siteItemService.getSiteItem(myItem.key) /> + ${myContentItem.variableName} +</#list>]]></value> + </iterateItemsListLoadContentItem> + <iterateRepeatGroup label="Iterate over repeat group"> + <value><![CDATA[<#list contentModel.VARIABLE_NAME.item as row> + ${row.VARIABLE_NAME} +</#list>]]></value> + </iterateRepeatGroup> + <fremarkerValueAssignment label="Freemarker value assignment"> + <value><![CDATA[<#assign imageSource = contentModel.image!"" />]]></value> + </fremarkerValueAssignment> + <freemarkerIf label="Freemarker value IF"> + <value><![CDATA[<#if CONDITION> + ... +</#if>]]></value> + </freemarkerIf> + <freemarkerLoop label="Freemarker value LOOP"> + <value><![CDATA[<#list ARRAY as value> + ${value_index}: ${value} +</#list>]]></value> + </freemarkerLoop> + <freemarkerFragmentInclude label="Freemarker Fragment include"> + <value><![CDATA[<#include "/templates/PATH" />]]></value> + </freemarkerFragmentInclude> + <freemarkerLibraryImport label="Freemarker Library import"> + <value><![CDATA[<#import "/templates/PATH" as NAMESPACE />]]></value> + </freemarkerLibraryImport> + <htmlPage label="HTML Page"> + <value><![CDATA[<#import "/templates/system/common/crafter.ftl" as crafter /> +<!doctype html> +<html lang="en"> + <head> + <#-- Insert your head markup here --> + <@crafter.head /> + </head> + <body> + <@crafter.body_top /> + <#-- Insert your body markup here --> + <@crafter.body_bottom /> + </body> +</html>]]></value> + </htmlPage> + </reference> + <reference id="craftercms.groovyCodeSnippets"> + <accessContentModel label="Access Content variable"> + <value><![CDATA[contentModel.VARIABLE_NAME]]></value> + </accessContentModel> + <accessTemplateodel label="Access Template variable"> + <value><![CDATA[templateModel]]></value> + </accessTemplateodel> + <currentSiteId label="Current Site ID"> + <value><![CDATA[siteContext.siteName]]></value> + </currentSiteId> + <requestParameters label="Request Parameters"> + <value><![CDATA[params]]></value> + </requestParameters> + <cookies label="Cookies"> + <value><![CDATA[cookies]]></value> + </cookies> + <httpRequest label="HTTP Request"> + <value><![CDATA[request]]></value> + </httpRequest> + <httpResponse label="HTTP Response"> + <value><![CDATA[response]]></value> + </httpResponse> + <session label="Session"> + <value><![CDATA[session]]></value> + </session> + <transformPathToUrl label="Transform PATH to URL"> + <value><![CDATA[urlTransformationService.transform('storeUrlToRenderUrl', STORE_URL)]]></value> + </transformPathToUrl> + <userProfile label="User Profile"> + <value><![CDATA[profile]]></value> + </userProfile> + <currentAuthentication label="Current Authentication"> + <value><![CDATA[authentication]]></value> + </currentAuthentication> + <logInfo label="Log an INFO"> + <value><![CDATA[logger.info('MY MESSAGE')]]></value> + </logInfo> + <logError label="Log an ERROR"> + <value><![CDATA[logger.error('MY MESSAGE')]]></value> + </logError> + <searchService label="Search Service"> + <value><![CDATA[searchService]]></value> + </searchService> + <siteItemService label="Site Item Service"> + <value><![CDATA[siteItemService]]></value> + </siteItemService> + <profileService label="Profile Service"> + <value><![CDATA[profileService]]></value> + </profileService> + <getSpringBean label="Get Spring Bean"> + <value><![CDATA[applicationContext.get("SPRING_BEAN_NAME")]]></value> + </getSpringBean> + </reference> + </references> +</siteUi> From 69380802253d4a058105790c6f1cc62ba3fba3a8 Mon Sep 17 00:00:00 2001 From: Jonathan Mendez <jonnathan.mendez@gmail.com> Date: Mon, 20 Apr 2026 13:32:57 -0600 Subject: [PATCH 2/3] Add controls and datasources to ui.xml updates --- .../upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt | 162 +++++++++++++++++ .../config/studio/ui.xml | 162 +++++++++++++++++ .../configuration/samples/sample-ui.xml | 162 +++++++++++++++++ .../upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml | 164 +++++++++++++++++- .../upgrade/xslt/ui/v5.0/5.0.0.1/input.xml | 1 - 5 files changed, 649 insertions(+), 2 deletions(-) diff --git a/src/main/resources/crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt b/src/main/resources/crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt index 56e57c94dc..413e90a6ce 100644 --- a/src/main/resources/crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt +++ b/src/main/resources/crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt @@ -115,6 +115,168 @@ </sections> </descriptor> </objectTypes> + <controls id="repeat"> + <icon id="@mui/icons-material/ReplayOutlined"/> + </controls> + <controls id="input"> + <icon id="@mui/icons-material/DriveFileRenameOutlineOutlined"/> + </controls> + <controls id="input-email"> + <icon id="@mui/icons-material/AlternateEmailOutlined"/> + </controls> + <controls id="input-link"> + <icon id="@mui/icons-material/LinkOutlined"/> + </controls> + <controls id="input-phone"> + <icon id="@mui/icons-material/PhoneAndroidOutlined"/> + </controls> + <controls id="numeric-input"> + <icon id="@mui/icons-material/PinOutlined"/> + </controls> + <controls id="textarea"> + <icon id="@mui/icons-material/NotesOutlined"/> + </controls> + <controls id="rte"> + <icon id="@mui/icons-material/CodeOutlined"/> + </controls> + <controls id="dropdown"> + <icon id="@mui/icons-material/ArrowDropDownOutlined"/> + </controls> + <controls id="time"> + <icon id="@mui/icons-material/AccessTimeOutlined"/> + </controls> + <controls id="date-time"> + <icon id="@mui/icons-material/CalendarMonthOutlined"/> + </controls> + <controls id="checkbox"> + <icon id="@mui/icons-material/CheckBoxOutlined"/> + </controls> + <controls id="checkbox-group"> + <icon id="@mui/icons-material/ChecklistOutlined"/> + </controls> + <controls id="node-selector"> + <icon id="@mui/icons-material/ZoomInMapOutlined"/> + </controls> + <controls id="image-picker"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </controls> + <controls id="video-picker"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </controls> + <controls id="transcoded-video-picker"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </controls> + <controls id="label"> + <icon id="@mui/icons-material/SellOutlined"/> + </controls> + <controls id="page-nav-order"> + <icon id="@mui/icons-material/ImportExportOutlined"/> + </controls> + <controls id="file-name"> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + </controls> + <controls id="auto-filename"> + <icon id="@mui/icons-material/DescriptionOutlined"/> + </controls> + <controls id="internal-name"> + <icon id="@mui/icons-material/FontDownloadOutlined"/> + </controls> + <controls id="locale-selector"> + <icon id="@mui/icons-material/PublicOutlined"/> + </controls> + <controls id="disabled"> + <icon id="@mui/icons-material/NotInterestedOutlined"/> + </controls> + <controls id="forcehttps"> + <icon id="@mui/icons-material/HttpsOutlined"/> + </controls> + <controls id="uuid"> + <icon id="@mui/icons-material/BadgeOutlined"/> + </controls> + <controls id="expired-date"> + <icon id="@mui/icons-material/EventBusyOutlined"/> + </controls> + <datasources id="components"> + <icon id="@mui/icons-material/ExtensionOutlined"/> + </datasources> + <datasources id="shared-content"> + <icon id="@mui/icons-material/ShareOutlined"/> + </datasources> + <datasources id="embedded-content"> + <icon id="@mui/icons-material/AdjustOutlined"/> + </datasources> + <datasources id="img-desktop-upload"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="img-repository-upload"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="file-desktop-upload"> + <icon id="@mui/icons-material/UploadFileOutlined"/> + </datasources> + <datasources id="file-browse-repo"> + <icon id="@mui/icons-material/PanToolAltOutlined"/> + </datasources> + <datasources id="WebDAV-repo"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="img-WebDAV-repo"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="video-WebDAV-repo"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="WebDAV-upload"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="img-WebDAV-upload"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="video-WebDAV-upload"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="S3-repo"> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + </datasources> + <datasources id="img-S3-repo"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="video-S3-repo"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="S3-upload"> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + </datasources> + <datasources id="img-S3-upload"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="video-S3-upload"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="video-S3-transcoding"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="video-desktop-upload"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="video-browse-repo"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="key-value-list"> + <icon id="@mui/icons-material/KeyOutlined"/> + </datasources> + <datasources id="simpleTaxonomy"> + <icon id="@mui/icons-material/StyleOutlined"/> + </datasources> + <datasources id="audio-desktop-upload"> + <icon id="@mui/icons-material/AudioFileOutlined"/> + </datasources> + <datasources id="audio-browse-repo"> + <icon id="@mui/icons-material/AudioFileOutlined"/> + </datasources> + <datasources id="configured-list"> + <icon id="@mui/icons-material/AudioFileOutlined"/> + </datasources> </configuration> </widget> </xsl:if> diff --git a/src/main/webapp/repo-bootstrap/global/blueprints/1000_website_editorial/config/studio/ui.xml b/src/main/webapp/repo-bootstrap/global/blueprints/1000_website_editorial/config/studio/ui.xml index 7254e79ec0..a484e97231 100644 --- a/src/main/webapp/repo-bootstrap/global/blueprints/1000_website_editorial/config/studio/ui.xml +++ b/src/main/webapp/repo-bootstrap/global/blueprints/1000_website_editorial/config/studio/ui.xml @@ -475,6 +475,168 @@ </sections> </descriptor> </objectTypes> + <controls id="repeat"> + <icon id="@mui/icons-material/ReplayOutlined"/> + </controls> + <controls id="input"> + <icon id="@mui/icons-material/DriveFileRenameOutlineOutlined"/> + </controls> + <controls id="input-email"> + <icon id="@mui/icons-material/AlternateEmailOutlined"/> + </controls> + <controls id="input-link"> + <icon id="@mui/icons-material/LinkOutlined"/> + </controls> + <controls id="input-phone"> + <icon id="@mui/icons-material/PhoneAndroidOutlined"/> + </controls> + <controls id="numeric-input"> + <icon id="@mui/icons-material/PinOutlined"/> + </controls> + <controls id="textarea"> + <icon id="@mui/icons-material/NotesOutlined"/> + </controls> + <controls id="rte"> + <icon id="@mui/icons-material/CodeOutlined"/> + </controls> + <controls id="dropdown"> + <icon id="@mui/icons-material/ArrowDropDownOutlined"/> + </controls> + <controls id="time"> + <icon id="@mui/icons-material/AccessTimeOutlined"/> + </controls> + <controls id="date-time"> + <icon id="@mui/icons-material/CalendarMonthOutlined"/> + </controls> + <controls id="checkbox"> + <icon id="@mui/icons-material/CheckBoxOutlined"/> + </controls> + <controls id="checkbox-group"> + <icon id="@mui/icons-material/ChecklistOutlined"/> + </controls> + <controls id="node-selector"> + <icon id="@mui/icons-material/ZoomInMapOutlined"/> + </controls> + <controls id="image-picker"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </controls> + <controls id="video-picker"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </controls> + <controls id="transcoded-video-picker"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </controls> + <controls id="label"> + <icon id="@mui/icons-material/SellOutlined"/> + </controls> + <controls id="page-nav-order"> + <icon id="@mui/icons-material/ImportExportOutlined"/> + </controls> + <controls id="file-name"> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + </controls> + <controls id="auto-filename"> + <icon id="@mui/icons-material/DescriptionOutlined"/> + </controls> + <controls id="internal-name"> + <icon id="@mui/icons-material/FontDownloadOutlined"/> + </controls> + <controls id="locale-selector"> + <icon id="@mui/icons-material/PublicOutlined"/> + </controls> + <controls id="disabled"> + <icon id="@mui/icons-material/NotInterestedOutlined"/> + </controls> + <controls id="forcehttps"> + <icon id="@mui/icons-material/HttpsOutlined"/> + </controls> + <controls id="uuid"> + <icon id="@mui/icons-material/BadgeOutlined"/> + </controls> + <controls id="expired-date"> + <icon id="@mui/icons-material/EventBusyOutlined"/> + </controls> + <datasources id="components"> + <icon id="@mui/icons-material/ExtensionOutlined"/> + </datasources> + <datasources id="shared-content"> + <icon id="@mui/icons-material/ShareOutlined"/> + </datasources> + <datasources id="embedded-content"> + <icon id="@mui/icons-material/AdjustOutlined"/> + </datasources> + <datasources id="img-desktop-upload"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="img-repository-upload"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="file-desktop-upload"> + <icon id="@mui/icons-material/UploadFileOutlined"/> + </datasources> + <datasources id="file-browse-repo"> + <icon id="@mui/icons-material/PanToolAltOutlined"/> + </datasources> + <datasources id="WebDAV-repo"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="img-WebDAV-repo"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="video-WebDAV-repo"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="WebDAV-upload"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="img-WebDAV-upload"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="video-WebDAV-upload"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="S3-repo"> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + </datasources> + <datasources id="img-S3-repo"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="video-S3-repo"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="S3-upload"> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + </datasources> + <datasources id="img-S3-upload"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="video-S3-upload"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="video-S3-transcoding"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="video-desktop-upload"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="video-browse-repo"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="key-value-list"> + <icon id="@mui/icons-material/KeyOutlined"/> + </datasources> + <datasources id="simpleTaxonomy"> + <icon id="@mui/icons-material/StyleOutlined"/> + </datasources> + <datasources id="audio-desktop-upload"> + <icon id="@mui/icons-material/AudioFileOutlined"/> + </datasources> + <datasources id="audio-browse-repo"> + <icon id="@mui/icons-material/AudioFileOutlined"/> + </datasources> + <datasources id="configured-list"> + <icon id="@mui/icons-material/AudioFileOutlined"/> + </datasources> </configuration> </widget> <references> diff --git a/src/main/webapp/repo-bootstrap/global/configuration/samples/sample-ui.xml b/src/main/webapp/repo-bootstrap/global/configuration/samples/sample-ui.xml index 3079c686a8..dd32922a21 100644 --- a/src/main/webapp/repo-bootstrap/global/configuration/samples/sample-ui.xml +++ b/src/main/webapp/repo-bootstrap/global/configuration/samples/sample-ui.xml @@ -512,6 +512,168 @@ </sections> </descriptor> </objectTypes> + <controls id="repeat"> + <icon id="@mui/icons-material/ReplayOutlined"/> + </controls> + <controls id="input"> + <icon id="@mui/icons-material/DriveFileRenameOutlineOutlined"/> + </controls> + <controls id="input-email"> + <icon id="@mui/icons-material/AlternateEmailOutlined"/> + </controls> + <controls id="input-link"> + <icon id="@mui/icons-material/LinkOutlined"/> + </controls> + <controls id="input-phone"> + <icon id="@mui/icons-material/PhoneAndroidOutlined"/> + </controls> + <controls id="numeric-input"> + <icon id="@mui/icons-material/PinOutlined"/> + </controls> + <controls id="textarea"> + <icon id="@mui/icons-material/NotesOutlined"/> + </controls> + <controls id="rte"> + <icon id="@mui/icons-material/CodeOutlined"/> + </controls> + <controls id="dropdown"> + <icon id="@mui/icons-material/ArrowDropDownOutlined"/> + </controls> + <controls id="time"> + <icon id="@mui/icons-material/AccessTimeOutlined"/> + </controls> + <controls id="date-time"> + <icon id="@mui/icons-material/CalendarMonthOutlined"/> + </controls> + <controls id="checkbox"> + <icon id="@mui/icons-material/CheckBoxOutlined"/> + </controls> + <controls id="checkbox-group"> + <icon id="@mui/icons-material/ChecklistOutlined"/> + </controls> + <controls id="node-selector"> + <icon id="@mui/icons-material/ZoomInMapOutlined"/> + </controls> + <controls id="image-picker"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </controls> + <controls id="video-picker"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </controls> + <controls id="transcoded-video-picker"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </controls> + <controls id="label"> + <icon id="@mui/icons-material/SellOutlined"/> + </controls> + <controls id="page-nav-order"> + <icon id="@mui/icons-material/ImportExportOutlined"/> + </controls> + <controls id="file-name"> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + </controls> + <controls id="auto-filename"> + <icon id="@mui/icons-material/DescriptionOutlined"/> + </controls> + <controls id="internal-name"> + <icon id="@mui/icons-material/FontDownloadOutlined"/> + </controls> + <controls id="locale-selector"> + <icon id="@mui/icons-material/PublicOutlined"/> + </controls> + <controls id="disabled"> + <icon id="@mui/icons-material/NotInterestedOutlined"/> + </controls> + <controls id="forcehttps"> + <icon id="@mui/icons-material/HttpsOutlined"/> + </controls> + <controls id="uuid"> + <icon id="@mui/icons-material/BadgeOutlined"/> + </controls> + <controls id="expired-date"> + <icon id="@mui/icons-material/EventBusyOutlined"/> + </controls> + <datasources id="components"> + <icon id="@mui/icons-material/ExtensionOutlined"/> + </datasources> + <datasources id="shared-content"> + <icon id="@mui/icons-material/ShareOutlined"/> + </datasources> + <datasources id="embedded-content"> + <icon id="@mui/icons-material/AdjustOutlined"/> + </datasources> + <datasources id="img-desktop-upload"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="img-repository-upload"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="file-desktop-upload"> + <icon id="@mui/icons-material/UploadFileOutlined"/> + </datasources> + <datasources id="file-browse-repo"> + <icon id="@mui/icons-material/PanToolAltOutlined"/> + </datasources> + <datasources id="WebDAV-repo"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="img-WebDAV-repo"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="video-WebDAV-repo"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="WebDAV-upload"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="img-WebDAV-upload"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="video-WebDAV-upload"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="S3-repo"> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + </datasources> + <datasources id="img-S3-repo"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="video-S3-repo"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="S3-upload"> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + </datasources> + <datasources id="img-S3-upload"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="video-S3-upload"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="video-S3-transcoding"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="video-desktop-upload"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="video-browse-repo"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="key-value-list"> + <icon id="@mui/icons-material/KeyOutlined"/> + </datasources> + <datasources id="simpleTaxonomy"> + <icon id="@mui/icons-material/StyleOutlined"/> + </datasources> + <datasources id="audio-desktop-upload"> + <icon id="@mui/icons-material/AudioFileOutlined"/> + </datasources> + <datasources id="audio-browse-repo"> + <icon id="@mui/icons-material/AudioFileOutlined"/> + </datasources> + <datasources id="configured-list"> + <icon id="@mui/icons-material/AudioFileOutlined"/> + </datasources> </configuration> </widget> <references> diff --git a/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml b/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml index 62be08d663..d1bc63e22a 100644 --- a/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml +++ b/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml @@ -15,7 +15,6 @@ ~ along with this program. If not, see <http://www.gnu.org/licenses/>. --> <siteUi> - <version>5.0.0.0</version> <widget id="craftercms.components.Preview" initialEditModeOn="true" @@ -475,6 +474,169 @@ </sections> </descriptor> </objectTypes> + + <controls id="repeat"> + <icon id="@mui/icons-material/ReplayOutlined"/> + </controls> + <controls id="input"> + <icon id="@mui/icons-material/DriveFileRenameOutlineOutlined"/> + </controls> + <controls id="input-email"> + <icon id="@mui/icons-material/AlternateEmailOutlined"/> + </controls> + <controls id="input-link"> + <icon id="@mui/icons-material/LinkOutlined"/> + </controls> + <controls id="input-phone"> + <icon id="@mui/icons-material/PhoneAndroidOutlined"/> + </controls> + <controls id="numeric-input"> + <icon id="@mui/icons-material/PinOutlined"/> + </controls> + <controls id="textarea"> + <icon id="@mui/icons-material/NotesOutlined"/> + </controls> + <controls id="rte"> + <icon id="@mui/icons-material/CodeOutlined"/> + </controls> + <controls id="dropdown"> + <icon id="@mui/icons-material/ArrowDropDownOutlined"/> + </controls> + <controls id="time"> + <icon id="@mui/icons-material/AccessTimeOutlined"/> + </controls> + <controls id="date-time"> + <icon id="@mui/icons-material/CalendarMonthOutlined"/> + </controls> + <controls id="checkbox"> + <icon id="@mui/icons-material/CheckBoxOutlined"/> + </controls> + <controls id="checkbox-group"> + <icon id="@mui/icons-material/ChecklistOutlined"/> + </controls> + <controls id="node-selector"> + <icon id="@mui/icons-material/ZoomInMapOutlined"/> + </controls> + <controls id="image-picker"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </controls> + <controls id="video-picker"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </controls> + <controls id="transcoded-video-picker"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </controls> + <controls id="label"> + <icon id="@mui/icons-material/SellOutlined"/> + </controls> + <controls id="page-nav-order"> + <icon id="@mui/icons-material/ImportExportOutlined"/> + </controls> + <controls id="file-name"> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + </controls> + <controls id="auto-filename"> + <icon id="@mui/icons-material/DescriptionOutlined"/> + </controls> + <controls id="internal-name"> + <icon id="@mui/icons-material/FontDownloadOutlined"/> + </controls> + <controls id="locale-selector"> + <icon id="@mui/icons-material/PublicOutlined"/> + </controls> + <controls id="disabled"> + <icon id="@mui/icons-material/NotInterestedOutlined"/> + </controls> + <controls id="forcehttps"> + <icon id="@mui/icons-material/HttpsOutlined"/> + </controls> + <controls id="uuid"> + <icon id="@mui/icons-material/BadgeOutlined"/> + </controls> + <controls id="expired-date"> + <icon id="@mui/icons-material/EventBusyOutlined"/> + </controls> + <datasources id="components"> + <icon id="@mui/icons-material/ExtensionOutlined"/> + </datasources> + <datasources id="shared-content"> + <icon id="@mui/icons-material/ShareOutlined"/> + </datasources> + <datasources id="embedded-content"> + <icon id="@mui/icons-material/AdjustOutlined"/> + </datasources> + <datasources id="img-desktop-upload"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="img-repository-upload"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="file-desktop-upload"> + <icon id="@mui/icons-material/UploadFileOutlined"/> + </datasources> + <datasources id="file-browse-repo"> + <icon id="@mui/icons-material/PanToolAltOutlined"/> + </datasources> + <datasources id="WebDAV-repo"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="img-WebDAV-repo"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="video-WebDAV-repo"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="WebDAV-upload"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="img-WebDAV-upload"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="video-WebDAV-upload"> + <icon id="@mui/icons-material/DnsOutlined"/> + </datasources> + <datasources id="S3-repo"> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + </datasources> + <datasources id="img-S3-repo"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="video-S3-repo"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="S3-upload"> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + </datasources> + <datasources id="img-S3-upload"> + <icon id="@mui/icons-material/InsertPhotoOutlined"/> + </datasources> + <datasources id="video-S3-upload"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="video-S3-transcoding"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="video-desktop-upload"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="video-browse-repo"> + <icon id="@mui/icons-material/VideocamOutlined"/> + </datasources> + <datasources id="key-value-list"> + <icon id="@mui/icons-material/KeyOutlined"/> + </datasources> + <datasources id="simpleTaxonomy"> + <icon id="@mui/icons-material/StyleOutlined"/> + </datasources> + <datasources id="audio-desktop-upload"> + <icon id="@mui/icons-material/AudioFileOutlined"/> + </datasources> + <datasources id="audio-browse-repo"> + <icon id="@mui/icons-material/AudioFileOutlined"/> + </datasources> + <datasources id="configured-list"> + <icon id="@mui/icons-material/AudioFileOutlined"/> + </datasources> </configuration> </widget> <references> diff --git a/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/input.xml b/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/input.xml index c72dfc7f45..0fbe90a678 100644 --- a/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/input.xml +++ b/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/input.xml @@ -15,7 +15,6 @@ ~ along with this program. If not, see <http://www.gnu.org/licenses/>. --> <siteUi> - <version>5.0.0.0</version> <widget id="craftercms.components.Preview" initialEditModeOn="true" From 273e6b2f9fd3aad48fe19ebe21aa1978c56db0bc Mon Sep 17 00:00:00 2001 From: Jonathan Mendez <jonnathan.mendez@gmail.com> Date: Fri, 8 May 2026 15:42:30 -0600 Subject: [PATCH 3/3] Update UI xml structure. Update blueprints --- .../upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt | 490 ++--- .../config/studio/ui.xml | 496 ++--- .../2000_headless_store/config/studio/ui.xml | 254 +++ .../4000_empty/config/studio/ui.xml | 254 +++ .../5000_headless_blog/config/studio/ui.xml | 254 +++ .../configuration/samples/sample-ui.xml | 1626 +++++++++-------- .../upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml | 491 ++--- 7 files changed, 2325 insertions(+), 1540 deletions(-) diff --git a/src/main/resources/crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt b/src/main/resources/crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt index 413e90a6ce..b80a28f6cf 100644 --- a/src/main/resources/crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt +++ b/src/main/resources/crafter/studio/upgrade/5.0.x/config/ui/ui-v5.0.0.1.xslt @@ -33,250 +33,256 @@ <xsl:if test="not(../widget[@id='craftercms.components.ContentTypeManagement'])"> <widget id="craftercms.components.ContentTypeManagement"> <configuration> - <objectTypes id="page"> - <descriptor> - <name>Page</name> - <type>page</type> - <fields> - <file-name> - <defaultValue/> - <description/> - <helpText/> - <id>file-name</id> - <name>Page URL</name> - <type>file-name</type> - </file-name> - <internal-name> - <defaultValue/> - <description/> - <helpText/> - <id>internal-name</id> - <name>Internal Name</name> - <type>input</type> - </internal-name> - <navLabel> - <defaultValue/> - <description/> - <helpText/> - <id>navLabel</id> - <name>Nav Label</name> - <type>input</type> - </navLabel> - <placeInNav> - <defaultValue/> - <description/> - <helpText/> - <id>placeInNav</id> - <name>Place In Nav</name> - <type>page-nav-order</type> - </placeInNav> - </fields> - <sections title="System Properties"> - <id>defaultSection</id> - <color>rgba(255,0,0,.7)</color> - <title>System Properties - true - file-name - internal-name - placeInNav - navLabel - - + + + + Page + page + + + + + + file-name + Page URL + file-name + + + + + + internal-name + Internal Name + input + + + + + + navLabel + Nav Label + input + + + + + + placeInNav + Place In Nav + page-nav-order + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + placeInNav + navLabel + + + + + + Component + component + + + + + + file-name + Component ID + auto-filename + + + + + + internal-name + Internal Name + input + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + + + - - - Component - component - - - - - - file-name - Component ID - auto-filename - - - - - - internal-name - Internal Name - input - - - - defaultSection - rgba(255,0,0,.7) - System Properties - true - file-name - internal-name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/repo-bootstrap/global/blueprints/1000_website_editorial/config/studio/ui.xml b/src/main/webapp/repo-bootstrap/global/blueprints/1000_website_editorial/config/studio/ui.xml index a484e97231..27f5944c34 100644 --- a/src/main/webapp/repo-bootstrap/global/blueprints/1000_website_editorial/config/studio/ui.xml +++ b/src/main/webapp/repo-bootstrap/global/blueprints/1000_website_editorial/config/studio/ui.xml @@ -393,251 +393,257 @@ - - - Page - page - - - - - - file-name - Page URL - file-name - - - - - - internal-name - Internal Name - input - - - - - - navLabel - Nav Label - input - - - - - - placeInNav - Place In Nav - page-nav-order - - - - defaultSection - rgba(255,0,0,.7) - System Properties - true - file-name - internal-name - placeInNav - navLabel - - - - - - Component - component - - - - - - file-name - Component ID - auto-filename - - - - - - internal-name - Internal Name - input - - - - defaultSection - rgba(255,0,0,.7) - System Properties - true - file-name - internal-name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + Page + page + + + + + + file-name + Page URL + file-name + + + + + + internal-name + Internal Name + input + + + + + + navLabel + Nav Label + input + + + + + + placeInNav + Place In Nav + page-nav-order + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + placeInNav + navLabel + + + + + + Component + component + + + + + + file-name + Component ID + auto-filename + + + + + + internal-name + Internal Name + input + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/repo-bootstrap/global/blueprints/2000_headless_store/config/studio/ui.xml b/src/main/webapp/repo-bootstrap/global/blueprints/2000_headless_store/config/studio/ui.xml index 7c58040005..9e5c288a70 100644 --- a/src/main/webapp/repo-bootstrap/global/blueprints/2000_headless_store/config/studio/ui.xml +++ b/src/main/webapp/repo-bootstrap/global/blueprints/2000_headless_store/config/studio/ui.xml @@ -391,6 +391,260 @@ + + + + + + Page + page + + + + + + file-name + Page URL + file-name + + + + + + internal-name + Internal Name + input + + + + + + navLabel + Nav Label + input + + + + + + placeInNav + Place In Nav + page-nav-order + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + placeInNav + navLabel + + + + + + Component + component + + + + + + file-name + Component ID + auto-filename + + + + + + internal-name + Internal Name + input + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/repo-bootstrap/global/blueprints/4000_empty/config/studio/ui.xml b/src/main/webapp/repo-bootstrap/global/blueprints/4000_empty/config/studio/ui.xml index 7ca32c02f7..f67b009b6f 100644 --- a/src/main/webapp/repo-bootstrap/global/blueprints/4000_empty/config/studio/ui.xml +++ b/src/main/webapp/repo-bootstrap/global/blueprints/4000_empty/config/studio/ui.xml @@ -385,6 +385,260 @@ + + + + + + Page + page + + + + + + file-name + Page URL + file-name + + + + + + internal-name + Internal Name + input + + + + + + navLabel + Nav Label + input + + + + + + placeInNav + Place In Nav + page-nav-order + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + placeInNav + navLabel + + + + + + Component + component + + + + + + file-name + Component ID + auto-filename + + + + + + internal-name + Internal Name + input + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/repo-bootstrap/global/blueprints/5000_headless_blog/config/studio/ui.xml b/src/main/webapp/repo-bootstrap/global/blueprints/5000_headless_blog/config/studio/ui.xml index 6e32c6300a..f135c524b7 100644 --- a/src/main/webapp/repo-bootstrap/global/blueprints/5000_headless_blog/config/studio/ui.xml +++ b/src/main/webapp/repo-bootstrap/global/blueprints/5000_headless_blog/config/studio/ui.xml @@ -383,6 +383,260 @@ + + + + + + Page + page + + + + + + file-name + Page URL + file-name + + + + + + internal-name + Internal Name + input + + + + + + navLabel + Nav Label + input + + + + + + placeInNav + Place In Nav + page-nav-order + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + placeInNav + navLabel + + + + + + Component + component + + + + + + file-name + Component ID + auto-filename + + + + + + internal-name + Internal Name + input + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/repo-bootstrap/global/configuration/samples/sample-ui.xml b/src/main/webapp/repo-bootstrap/global/configuration/samples/sample-ui.xml index dd32922a21..0183c47395 100644 --- a/src/main/webapp/repo-bootstrap/global/configuration/samples/sample-ui.xml +++ b/src/main/webapp/repo-bootstrap/global/configuration/samples/sample-ui.xml @@ -15,384 +15,384 @@ ~ along with this program. If not, see . --> - - - - - - - - <icon id="@mui/icons-material/DashboardRounded"/> - <widget id="craftercms.components.SiteDashboard"/> - </configuration> - </widget> - <widget id="craftercms.components.ToolsPanelPageButton"> - <configuration> - <title id="previewSiteExplorerPanel.title" defaultMessage="Site Explorer"/> - <icon id="craftercms.icons.SiteExplorer"/> - <widgets> - <widget id="craftercms.components.PathNavigatorTree"> - <configuration> - <id>Pages</id> - <label id="pathNavigatorTree.pages" defaultMessage="Pages"/> - <icon id="@mui/icons-material/DescriptionOutlined"/> - <rootPath>/site/website</rootPath> - <locale>en</locale> - </configuration> - </widget> - <widget id="craftercms.components.PathNavigatorTree"> - <configuration> - <id>Components</id> - <label id="pathNavigatorTree.components" defaultMessage="Components"/> - <icon id="craftercms.icons.Component"/> - <rootPath>/site/components</rootPath> - <locale>en</locale> - </configuration> - </widget> - <widget id="craftercms.components.PathNavigatorTree"> - <configuration> - <id>Taxonomy</id> - <label id="pathNavigatorTree.taxonomy" defaultMessage="Taxonomy"/> - <icon id="@mui/icons-material/LocalOfferOutlined"/> - <rootPath>/site/taxonomy</rootPath> - <locale>en</locale> - </configuration> - </widget> - <widget id="craftercms.components.PathNavigatorTree"> - <configuration> - <id>StaticAssets</id> - <label id="pathNavigatorTree.staticAssets" defaultMessage="Static Assets"/> - <icon id="@mui/icons-material/ImageOutlined"/> - <rootPath>/static-assets</rootPath> - <locale>en</locale> - </configuration> - </widget> - <widget id="craftercms.components.PathNavigatorTree"> - <configuration> - <label id="pathNavigatorTree.templates" defaultMessage="Templates"/> - <icon id="@mui/icons-material/InsertDriveFileOutlined"/> - <rootPath>/templates</rootPath> - <locale>en</locale> - </configuration> - </widget> - <widget id="craftercms.components.PathNavigatorTree"> - <configuration> - <label id="pathNavigatorTree.scripts" defaultMessage="Scripts"/> - <icon id="@mui/icons-material/CodeRounded"/> - <rootPath>/scripts</rootPath> - <locale>en</locale> - </configuration> - </widget> - </widgets> - </configuration> - </widget> - <widget id="craftercms.components.ToolsPanelPageButton"> - <permittedRoles> - <role>admin</role> - <role>developer</role> - </permittedRoles> - <configuration> - <title id="siteTools.title" defaultMessage="Project Tools"/> - <icon id="@mui/icons-material/ConstructionRounded"/> - <widgets> - <widget id="craftercms.components.SiteToolsPanel"/> - </widgets> - </configuration> - </widget> - </widgets> - </configuration> - </widget> - <widget id="craftercms.components.ICEToolsPanel"> - <configuration> - <widgets> - <widget id="craftercms.components.ToolsPanelPageButton"> - <configuration> - <target id="icePanel"/> - <title id="previewSearchPanel.title" defaultMessage="Search"/> - <icon id="@mui/icons-material/SearchRounded"/> - <widgets> - <widget id="craftercms.components.PreviewSearchPanel"/> - </widgets> - </configuration> - </widget> - <widget id="craftercms.components.ToolsPanelPageButton"> - <configuration> - <target id="icePanel"/> - <title id="previewComponentsPanel.title" defaultMessage="Add Components"/> - <icon id="@mui/icons-material/ExtensionOutlined"/> - <widgets> - <widget id="craftercms.components.PreviewComponentsPanel"/> - </widgets> - </configuration> - </widget> - <widget id="craftercms.components.ToolsPanelPageButton"> - <configuration> - <target id="icePanel"/> - <title id="previewBrowseComponentsPanel.title" defaultMessage="Browse Components"/> - <icon id="@mui/icons-material/ExtensionOutlined"/> - <widgets> - <widget id="craftercms.components.PreviewBrowseComponentsPanel"/> - </widgets> - </configuration> - </widget> - <widget id="craftercms.components.ToolsPanelPageButton"> - <configuration> - <target id="icePanel"/> - <title id="previewDropTargetsPanel.title" defaultMessage="Component Drop Targets"/> - <icon id="@mui/icons-material/ExtensionOutlined"/> - <widgets> - <widget id="craftercms.components.PreviewDropTargetsPanel"/> - </widgets> - </configuration> - </widget> - <widget id="craftercms.components.ToolsPanelPageButton"> - <configuration> - <target id="icePanel"/> - <title id="previewAssetsPanel.title" defaultMessage="Assets"/> - <icon id="@mui/icons-material/ImageOutlined"/> - <widgets> - <widget id="craftercms.components.PreviewAssetsPanel"/> - </widgets> - </configuration> - </widget> - <widget id="craftercms.components.ToolsPanelPageButton"> - <configuration> - <target id="icePanel"/> - <title id="previewAudiencesPanel.title" defaultMessage="Audience Targeting"/> - <icon id="@mui/icons-material/EmojiPeopleRounded"/> - <widgets> - <widget id="craftercms.components.PreviewAudiencesPanel"> - <configuration> - <fields> - <segment> - <id>segment</id> - <name id="previewAudiencesPanel.segmentLabel" defaultMessage="Segment"/> - <description>User segment.</description> - <type>dropdown</type> - <defaultValue>anonymous</defaultValue> - <values> - <value> - <label id="previewAudiencesPanel.guyValueLabel" defaultMessage="Guy"/> - <value>guy</value> - </value> - <value> - <label id="previewAudiencesPanel.galValueLabel" defaultMessage="Gal"/> - <value>gal</value> - </value> - <value> - <label id="previewAudiencesPanel.anonymousValueLabel" defaultMessage="Anonymous"/> - <value>anonymous</value> - </value> - </values> - <helpText id="previewAudiencesPanel.segmentHelpText" defaultMessage="Setting the segment will change content targeting to the audience selected"/> - </segment> - <name> - <id>name</id> - <name id="previewAudiencesPanel.nameLabel" defaultMessage="Name"/> - <description>User's first and last name.</description> - <type>input</type> - <helpText id="previewAudiencesPanel.nameHelpText" defaultMessage="Enter user's first and last name"/> - </name> - </fields> - </configuration> - </widget> - </widgets> - </configuration> - </widget> - <widget id="craftercms.components.ToolsPanelPageButton"> - <configuration> - <target id="icePanel"/> - <title id="previewPageExplorerPanel.title" defaultMessage="Page Explorer"/> - <icon id="craftercms.icons.PageExplorer"/> - <widgets> - <widget id="craftercms.components.PreviewPageExplorerPanel"/> - </widgets> - </configuration> - </widget> - <widget id="craftercms.components.ToolsPanelPageButton"> - <configuration> - <target id="icePanel"/> - <title id="previewSimulatorPanel.title" defaultMessage="Device Simulator"/> - <icon id="@mui/icons-material/DevicesRounded"/> - <widgets> - <widget id="craftercms.components.PreviewSimulatorPanel"> - <configuration> - <devices> - <device> - <title>smartPhone - 375 - 667 - - - tablet - 768 - 1024 - - - - - - - - - - - - <icon id="@mui/icons-material/SettingsOutlined"/> - <widgets> - <widget id="craftercms.components.PreviewSettingsPanel"/> - </widgets> - </configuration> - </widget> - </widgets> - </configuration> - </widget> - <widget id="craftercms.components.Launcher"> - <configuration> - <widgets> - <widget id="craftercms.components.LauncherSection"> - <configuration> - <title id="launcher.siteSectionTitle"> - <defaultMessage><![CDATA[Project <muted>• {siteName}</muted>]]></defaultMessage> - - - - - - <systemLinkId>siteDashboardDialog</systemLinkId> - <icon id="@mui/icons-material/DashboardRounded"/> - </configuration> - </widget> - <widget id="craftercms.components.LauncherLinkTile"> - <configuration> - <title id="words.preview" defaultMessage="Preview"/> - <systemLinkId>preview</systemLinkId> - <icon id="craftercms.icons.Preview"/> - </configuration> - </widget> - <widget id="craftercms.components.LauncherLinkTile"> - <permittedRoles> - <role>admin</role> - <role>developer</role> - </permittedRoles> - <configuration> - <title id="siteTools.title" defaultMessage="Project Tools"/> - <systemLinkId>siteToolsDialog</systemLinkId> - <icon id="@mui/icons-material/ConstructionRounded"/> - </configuration> - </widget> - <widget id="craftercms.components.LauncherLinkTile"> - <configuration> - <title id="words.search" defaultMessage="Search"/> - <systemLinkId>siteSearchDialog</systemLinkId> - <icon id="@mui/icons-material/SearchRounded"/> - </configuration> - </widget> - <widget id="craftercms.components.LauncherPublishingStatusTile"/> - </widgets> - </configuration> - </widget> - </widgets> - </configuration> - </widget> - <widget id="craftercms.components.PreviewToolbar"> - <configuration> - <leftSection> - <widgets> - <widget id="craftercms.components.SiteSwitcherSelect"/> - <widget id="craftercms.components.QuickCreate"/> - </widgets> - </leftSection> - <middleSection> - <widgets> - <widget id="craftercms.components.PreviewAddressBar"/> - </widgets> - </middleSection> - <rightSection> - <widgets> - <widget id="craftercms.components.EditModesSwitcher"/> - <widget id="craftercms.components.PublishingStatusButton"> - <configuration> - <variant>icon</variant> - </configuration> - </widget> - <widget id="craftercms.components.WidgetDialogIconButton"> - <configuration> - <title id="words.search" defaultMessage="Search"/> - <icon id="@mui/icons-material/SearchRounded"/> - <widget id="craftercms.components.Search"> - <configuration> - <embedded>true</embedded> - </configuration> - </widget> - </configuration> - </widget> - </widgets> - </rightSection> - </configuration> - </widget> - <widget id="craftercms.components.Dashboard"> - <configuration> - <mainSection> - <widgets> - <widget id="craftercms.components.MyRecentActivityDashlet"> - <permittedRoles> - <role>admin</role> - <role>developer</role> - <role>publisher</role> - </permittedRoles> - </widget> - <widget id="craftercms.components.UnpublishedDashlet"> - <permittedRoles> - <role>admin</role> - <role>developer</role> - <role>publisher</role> - </permittedRoles> - </widget> - <widget id="craftercms.components.PendingApprovalDashlet"> - <permittedRoles> - <role>admin</role> - <role>developer</role> - <role>publisher</role> - </permittedRoles> - </widget> - <widget id="craftercms.components.ScheduledDashlet"> - <permittedRoles> - <role>admin</role> - <role>developer</role> - <role>publisher</role> - </permittedRoles> - </widget> - <widget id="craftercms.components.RecentlyPublishedDashlet"> - <permittedRoles> - <role>admin</role> - <role>developer</role> - <role>publisher</role> - </permittedRoles> - </widget> - <widget id="craftercms.components.ExpiringDashlet"> - <permittedRoles> - <role>admin</role> - <role>developer</role> - <role>publisher</role> - </permittedRoles> - </widget> - </widgets> - </mainSection> - </configuration> - </widget> - <widget id="craftercms.components.TinyMCE"> - <configuration> - <setups> - <setup id="generic"> - <!-- Configuration options: https://www.tiny.cloud/docs/configure/ --> - <!-- Plugins: https://www.tiny.cloud/docs/plugins/opensource/ --> - <tinymceOptions> - <![CDATA[ + <widget + id="craftercms.components.Preview" + initialEditModeOn="true" + initialHighlightMode="all" + /> + <widget id="craftercms.components.ToolsPanel"> + <configuration> + <widgets> + <widget id="craftercms.components.ToolsPanelEmbeddedAppViewButton"> + <configuration> + <title id="words.dashboard" defaultMessage="Dashboard"/> + <icon id="@mui/icons-material/DashboardRounded"/> + <widget id="craftercms.components.SiteDashboard"/> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <title id="previewSiteExplorerPanel.title" defaultMessage="Site Explorer"/> + <icon id="craftercms.icons.SiteExplorer"/> + <widgets> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <id>Pages</id> + <label id="pathNavigatorTree.pages" defaultMessage="Pages"/> + <icon id="@mui/icons-material/DescriptionOutlined"/> + <rootPath>/site/website</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <id>Components</id> + <label id="pathNavigatorTree.components" defaultMessage="Components"/> + <icon id="craftercms.icons.Component"/> + <rootPath>/site/components</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <id>Taxonomy</id> + <label id="pathNavigatorTree.taxonomy" defaultMessage="Taxonomy"/> + <icon id="@mui/icons-material/LocalOfferOutlined"/> + <rootPath>/site/taxonomy</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <id>StaticAssets</id> + <label id="pathNavigatorTree.staticAssets" defaultMessage="Static Assets"/> + <icon id="@mui/icons-material/ImageOutlined"/> + <rootPath>/static-assets</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <label id="pathNavigatorTree.templates" defaultMessage="Templates"/> + <icon id="@mui/icons-material/InsertDriveFileOutlined"/> + <rootPath>/templates</rootPath> + <locale>en</locale> + </configuration> + </widget> + <widget id="craftercms.components.PathNavigatorTree"> + <configuration> + <label id="pathNavigatorTree.scripts" defaultMessage="Scripts"/> + <icon id="@mui/icons-material/CodeRounded"/> + <rootPath>/scripts</rootPath> + <locale>en</locale> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <permittedRoles> + <role>admin</role> + <role>developer</role> + </permittedRoles> + <configuration> + <title id="siteTools.title" defaultMessage="Project Tools"/> + <icon id="@mui/icons-material/ConstructionRounded"/> + <widgets> + <widget id="craftercms.components.SiteToolsPanel"/> + </widgets> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ICEToolsPanel"> + <configuration> + <widgets> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewSearchPanel.title" defaultMessage="Search"/> + <icon id="@mui/icons-material/SearchRounded"/> + <widgets> + <widget id="craftercms.components.PreviewSearchPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewComponentsPanel.title" defaultMessage="Add Components"/> + <icon id="@mui/icons-material/ExtensionOutlined"/> + <widgets> + <widget id="craftercms.components.PreviewComponentsPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewBrowseComponentsPanel.title" defaultMessage="Browse Components"/> + <icon id="@mui/icons-material/ExtensionOutlined"/> + <widgets> + <widget id="craftercms.components.PreviewBrowseComponentsPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewDropTargetsPanel.title" defaultMessage="Component Drop Targets"/> + <icon id="@mui/icons-material/ExtensionOutlined"/> + <widgets> + <widget id="craftercms.components.PreviewDropTargetsPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewAssetsPanel.title" defaultMessage="Assets"/> + <icon id="@mui/icons-material/ImageOutlined"/> + <widgets> + <widget id="craftercms.components.PreviewAssetsPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewAudiencesPanel.title" defaultMessage="Audience Targeting"/> + <icon id="@mui/icons-material/EmojiPeopleRounded"/> + <widgets> + <widget id="craftercms.components.PreviewAudiencesPanel"> + <configuration> + <fields> + <segment> + <id>segment</id> + <name id="previewAudiencesPanel.segmentLabel" defaultMessage="Segment"/> + <description>User segment.</description> + <type>dropdown</type> + <defaultValue>anonymous</defaultValue> + <values> + <value> + <label id="previewAudiencesPanel.guyValueLabel" defaultMessage="Guy"/> + <value>guy</value> + </value> + <value> + <label id="previewAudiencesPanel.galValueLabel" defaultMessage="Gal"/> + <value>gal</value> + </value> + <value> + <label id="previewAudiencesPanel.anonymousValueLabel" defaultMessage="Anonymous"/> + <value>anonymous</value> + </value> + </values> + <helpText id="previewAudiencesPanel.segmentHelpText" defaultMessage="Setting the segment will change content targeting to the audience selected"/> + </segment> + <name> + <id>name</id> + <name id="previewAudiencesPanel.nameLabel" defaultMessage="Name"/> + <description>User's first and last name.</description> + <type>input</type> + <helpText id="previewAudiencesPanel.nameHelpText" defaultMessage="Enter user's first and last name"/> + </name> + </fields> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewPageExplorerPanel.title" defaultMessage="Page Explorer"/> + <icon id="craftercms.icons.PageExplorer"/> + <widgets> + <widget id="craftercms.components.PreviewPageExplorerPanel"/> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.ToolsPanelPageButton"> + <configuration> + <target id="icePanel"/> + <title id="previewSimulatorPanel.title" defaultMessage="Device Simulator"/> + <icon id="@mui/icons-material/DevicesRounded"/> + <widgets> + <widget id="craftercms.components.PreviewSimulatorPanel"> + <configuration> + <devices> + <device> + <title>smartPhone + 375 + 667 + + + tablet + 768 + 1024 + + + + + + + + + + + + <icon id="@mui/icons-material/SettingsOutlined"/> + <widgets> + <widget id="craftercms.components.PreviewSettingsPanel"/> + </widgets> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.Launcher"> + <configuration> + <widgets> + <widget id="craftercms.components.LauncherSection"> + <configuration> + <title id="launcher.siteSectionTitle"> + <defaultMessage><![CDATA[Project <muted>• {siteName}</muted>]]></defaultMessage> + + + + + + <systemLinkId>siteDashboardDialog</systemLinkId> + <icon id="@mui/icons-material/DashboardRounded"/> + </configuration> + </widget> + <widget id="craftercms.components.LauncherLinkTile"> + <configuration> + <title id="words.preview" defaultMessage="Preview"/> + <systemLinkId>preview</systemLinkId> + <icon id="craftercms.icons.Preview"/> + </configuration> + </widget> + <widget id="craftercms.components.LauncherLinkTile"> + <permittedRoles> + <role>admin</role> + <role>developer</role> + </permittedRoles> + <configuration> + <title id="siteTools.title" defaultMessage="Project Tools"/> + <systemLinkId>siteToolsDialog</systemLinkId> + <icon id="@mui/icons-material/ConstructionRounded"/> + </configuration> + </widget> + <widget id="craftercms.components.LauncherLinkTile"> + <configuration> + <title id="words.search" defaultMessage="Search"/> + <systemLinkId>siteSearchDialog</systemLinkId> + <icon id="@mui/icons-material/SearchRounded"/> + </configuration> + </widget> + <widget id="craftercms.components.LauncherPublishingStatusTile"/> + </widgets> + </configuration> + </widget> + </widgets> + </configuration> + </widget> + <widget id="craftercms.components.PreviewToolbar"> + <configuration> + <leftSection> + <widgets> + <widget id="craftercms.components.SiteSwitcherSelect"/> + <widget id="craftercms.components.QuickCreate"/> + </widgets> + </leftSection> + <middleSection> + <widgets> + <widget id="craftercms.components.PreviewAddressBar"/> + </widgets> + </middleSection> + <rightSection> + <widgets> + <widget id="craftercms.components.EditModesSwitcher"/> + <widget id="craftercms.components.PublishingStatusButton"> + <configuration> + <variant>icon</variant> + </configuration> + </widget> + <widget id="craftercms.components.WidgetDialogIconButton"> + <configuration> + <title id="words.search" defaultMessage="Search"/> + <icon id="@mui/icons-material/SearchRounded"/> + <widget id="craftercms.components.Search"> + <configuration> + <embedded>true</embedded> + </configuration> + </widget> + </configuration> + </widget> + </widgets> + </rightSection> + </configuration> + </widget> + <widget id="craftercms.components.Dashboard"> + <configuration> + <mainSection> + <widgets> + <widget id="craftercms.components.MyRecentActivityDashlet"> + <permittedRoles> + <role>admin</role> + <role>developer</role> + <role>publisher</role> + </permittedRoles> + </widget> + <widget id="craftercms.components.UnpublishedDashlet"> + <permittedRoles> + <role>admin</role> + <role>developer</role> + <role>publisher</role> + </permittedRoles> + </widget> + <widget id="craftercms.components.PendingApprovalDashlet"> + <permittedRoles> + <role>admin</role> + <role>developer</role> + <role>publisher</role> + </permittedRoles> + </widget> + <widget id="craftercms.components.ScheduledDashlet"> + <permittedRoles> + <role>admin</role> + <role>developer</role> + <role>publisher</role> + </permittedRoles> + </widget> + <widget id="craftercms.components.RecentlyPublishedDashlet"> + <permittedRoles> + <role>admin</role> + <role>developer</role> + <role>publisher</role> + </permittedRoles> + </widget> + <widget id="craftercms.components.ExpiringDashlet"> + <permittedRoles> + <role>admin</role> + <role>developer</role> + <role>publisher</role> + </permittedRoles> + </widget> + </widgets> + </mainSection> + </configuration> + </widget> + <widget id="craftercms.components.TinyMCE"> + <configuration> + <setups> + <setup id="generic"> + <!-- Configuration options: https://www.tiny.cloud/docs/configure/ --> + <!-- Plugins: https://www.tiny.cloud/docs/plugins/opensource/ --> + <tinymceOptions> + <![CDATA[ { "menubar": true, "theme": "silver", @@ -423,378 +423,384 @@ "contextmenu": false } ]]> - </tinymceOptions> - </setup> - </setups> - </configuration> - </widget> - <widget id="craftercms.components.ContentTypeManagement"> - <configuration> - <objectTypes id="page"> - <descriptor> - <name>Page</name> - <type>page</type> - <fields> - <file-name> - <defaultValue /> - <description /> - <helpText /> - <id>file-name</id> - <name>Page URL</name> - <type>file-name</type> - </file-name> - <internal-name> - <defaultValue /> - <description /> - <helpText /> - <id>internal-name</id> - <name>Internal Name</name> - <type>input</type> - </internal-name> - <navLabel> - <defaultValue /> - <description /> - <helpText /> - <id>navLabel</id> - <name>Nav Label</name> - <type>input</type> - </navLabel> - <placeInNav> - <defaultValue /> - <description /> - <helpText /> - <id>placeInNav</id> - <name>Place In Nav</name> - <type>page-nav-order</type> - </placeInNav> - </fields> - <sections title="System Properties"> - <id>defaultSection</id> - <color>rgba(255,0,0,.7)</color> - <title>System Properties - true - file-name - internal-name - placeInNav - navLabel - - - - - - Component - component - - - - - - file-name - Component ID - auto-filename - - - - - - internal-name - Internal Name - input - - - - defaultSection - rgba(255,0,0,.7) - System Properties - true - file-name - internal-name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <icon id="@mui/icons-material/WidgetsOutlined"/> - <url>content-types</url> - <widget id="craftercms.components.ContentTypeManagement"/> - </tool> - <tool> - <title id="GlobalMenu.EncryptionToolEntryLabel" defaultMessage="Encryption Tool"/> - <icon id="@mui/icons-material/LockOutlined"/> - <url>encrypt-tool</url> - <widget id="craftercms.components.SiteEncryptTool"/> - </tool> - <tool> - <title id="words.configuration" defaultMessage="Configuration"/> - <icon id="@mui/icons-material/SettingsApplicationsOutlined"/> - <url>configuration</url> - <widget id="craftercms.components.SiteConfigurationManagement"/> - </tool> - <tool> - <title id="GlobalMenu.AuditEntryLabel" defaultMessage="Audit"/> - <icon id="@mui/icons-material/SubjectRounded"/> - <url>audit</url> - <widget id="craftercms.components.SiteAuditManagement"/> - </tool> - <tool> - <title id="workflowStates.title" defaultMessage="Workflow States"/> - <icon id="@mui/icons-material/SettingsOutlined"/> - <url>item-states</url> - <widget id="craftercms.components.ItemStatesManagement"/> - </tool> - <tool> - <title id="GlobalMenu.LogConsoleEntryLabel" defaultMessage="Log Console"/> - <icon id="@mui/icons-material/FormatAlignCenterRounded"/> - <url>log</url> - <widget id="craftercms.components.LogConsole"> - <configuration> - <logType>preview</logType> - </configuration> - </widget> - </tool> - <tool> - <title id="words.publishing" defaultMessage="Publishing"/> - <icon id="@mui/icons-material/CloudUploadOutlined"/> - <url>publishing</url> - <widget id="craftercms.components.PublishingDashboard"/> - </tool> - <tool> - <title id="remoteRepositories.title" defaultMessage="Remote Repositories"/> - <icon id="@mui/icons-material/StorageRounded"/> - <url>remote-repositories</url> - <widget id="craftercms.components.RemoteRepositoriesManagement"/> - </tool> - <tool> - <title>GraphQL - - graphiql - - - - - <icon id="@mui/icons-material/ExtensionOutlined"/> - <url>plugins</url> - <widget id="craftercms.components.PluginManagement"/> - </tool> - </tools> - </reference> - <reference id="craftercms.freemarkerCodeSnippets"> - <contentVariable label="Content variable"> - <value><![CDATA[${contentModel.VARIABLE_NAME}]]></value> - </contentVariable> - <requestParameter label="Request parameter"> - <value><![CDATA[${RequestParameters["PARAM_NAME"]!"DEFAULT"}]]></value> - </requestParameter> - <crafterSupportMacros label="Crafter support macros"> - <value><![CDATA[<#import "/templates/system/common/crafter.ftl" as crafter />]]></value> - </crafterSupportMacros> - <transformPathToUrl label="Transform PATH to URL"> - <value><![CDATA[${urlTransformationService.transform('storeUrlToRenderUrl', STORE_URL)}]]></value> - </transformPathToUrl> - <renderComponentsList label="Render list of components"> - <value><![CDATA[<#list contentModel.VARIABLE_NAME.item as module> + </tinymceOptions> + </setup> + </setups> + </configuration> + </widget> + <widget id="craftercms.components.ContentTypeManagement"> + <configuration> + <objectTypes> + <objectType id="page"> + <descriptor> + <name>Page</name> + <type>page</type> + <fields> + <file-name> + <defaultValue/> + <description/> + <helpText/> + <id>file-name</id> + <name>Page URL</name> + <type>file-name</type> + </file-name> + <internal-name> + <defaultValue/> + <description/> + <helpText/> + <id>internal-name</id> + <name>Internal Name</name> + <type>input</type> + </internal-name> + <navLabel> + <defaultValue/> + <description/> + <helpText/> + <id>navLabel</id> + <name>Nav Label</name> + <type>input</type> + </navLabel> + <placeInNav> + <defaultValue/> + <description/> + <helpText/> + <id>placeInNav</id> + <name>Place In Nav</name> + <type>page-nav-order</type> + </placeInNav> + </fields> + <sections title="System Properties"> + <id>defaultSection</id> + <color>rgba(255,0,0,.7)</color> + <title>System Properties + true + file-name + internal-name + placeInNav + navLabel + + + + + + Component + component + + + + + + file-name + Component ID + auto-filename + + + + + + internal-name + Internal Name + input + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <icon id="@mui/icons-material/WidgetsOutlined"/> + <url>content-types</url> + <widget id="craftercms.components.ContentTypeManagement"/> + </tool> + <tool> + <title id="GlobalMenu.EncryptionToolEntryLabel" defaultMessage="Encryption Tool"/> + <icon id="@mui/icons-material/LockOutlined"/> + <url>encrypt-tool</url> + <widget id="craftercms.components.SiteEncryptTool"/> + </tool> + <tool> + <title id="words.configuration" defaultMessage="Configuration"/> + <icon id="@mui/icons-material/SettingsApplicationsOutlined"/> + <url>configuration</url> + <widget id="craftercms.components.SiteConfigurationManagement"/> + </tool> + <tool> + <title id="GlobalMenu.AuditEntryLabel" defaultMessage="Audit"/> + <icon id="@mui/icons-material/SubjectRounded"/> + <url>audit</url> + <widget id="craftercms.components.SiteAuditManagement"/> + </tool> + <tool> + <title id="workflowStates.title" defaultMessage="Workflow States"/> + <icon id="@mui/icons-material/SettingsOutlined"/> + <url>item-states</url> + <widget id="craftercms.components.ItemStatesManagement"/> + </tool> + <tool> + <title id="GlobalMenu.LogConsoleEntryLabel" defaultMessage="Log Console"/> + <icon id="@mui/icons-material/FormatAlignCenterRounded"/> + <url>log</url> + <widget id="craftercms.components.LogConsole"> + <configuration> + <logType>preview</logType> + </configuration> + </widget> + </tool> + <tool> + <title id="words.publishing" defaultMessage="Publishing"/> + <icon id="@mui/icons-material/CloudUploadOutlined"/> + <url>publishing</url> + <widget id="craftercms.components.PublishingDashboard"/> + </tool> + <tool> + <title id="remoteRepositories.title" defaultMessage="Remote Repositories"/> + <icon id="@mui/icons-material/StorageRounded"/> + <url>remote-repositories</url> + <widget id="craftercms.components.RemoteRepositoriesManagement"/> + </tool> + <tool> + <title>GraphQL + + graphiql + + + + + <icon id="@mui/icons-material/ExtensionOutlined"/> + <url>plugins</url> + <widget id="craftercms.components.PluginManagement"/> + </tool> + </tools> + </reference> + <reference id="craftercms.freemarkerCodeSnippets"> + <contentVariable label="Content variable"> + <value><![CDATA[${contentModel.VARIABLE_NAME}]]></value> + </contentVariable> + <requestParameter label="Request parameter"> + <value><![CDATA[${RequestParameters["PARAM_NAME"]!"DEFAULT"}]]></value> + </requestParameter> + <crafterSupportMacros label="Crafter support macros"> + <value><![CDATA[<#import "/templates/system/common/crafter.ftl" as crafter />]]></value> + </crafterSupportMacros> + <transformPathToUrl label="Transform PATH to URL"> + <value><![CDATA[${urlTransformationService.transform('storeUrlToRenderUrl', STORE_URL)}]]></value> + </transformPathToUrl> + <renderComponentsList label="Render list of components"> + <value><![CDATA[<#list contentModel.VARIABLE_NAME.item as module> <@renderComponent component=module /> </#list>]]></value> - </renderComponentsList> - <iterateItemsListLoadContentItem label="Iterate over a list of items and load content item"> - <value><![CDATA[<#list contentModel.VARIABLE_NAME.item as myItem> + </renderComponentsList> + <iterateItemsListLoadContentItem label="Iterate over a list of items and load content item"> + <value><![CDATA[<#list contentModel.VARIABLE_NAME.item as myItem> <#assign myContentItem = siteItemService.getSiteItem(myItem.key) /> ${myContentItem.variableName} </#list>]]></value> - </iterateItemsListLoadContentItem> - <iterateRepeatGroup label="Iterate over repeat group"> - <value><![CDATA[<#list contentModel.VARIABLE_NAME.item as row> + </iterateItemsListLoadContentItem> + <iterateRepeatGroup label="Iterate over repeat group"> + <value><![CDATA[<#list contentModel.VARIABLE_NAME.item as row> ${row.VARIABLE_NAME} </#list>]]></value> - </iterateRepeatGroup> - <fremarkerValueAssignment label="Freemarker value assignment"> - <value><![CDATA[<#assign imageSource = contentModel.image!"" />]]></value> - </fremarkerValueAssignment> - <freemarkerIf label="Freemarker value IF"> - <value><![CDATA[<#if CONDITION> + </iterateRepeatGroup> + <fremarkerValueAssignment label="Freemarker value assignment"> + <value><![CDATA[<#assign imageSource = contentModel.image!"" />]]></value> + </fremarkerValueAssignment> + <freemarkerIf label="Freemarker value IF"> + <value><![CDATA[<#if CONDITION> ... </#if>]]></value> - </freemarkerIf> - <freemarkerLoop label="Freemarker value LOOP"> - <value><![CDATA[<#list ARRAY as value> + </freemarkerIf> + <freemarkerLoop label="Freemarker value LOOP"> + <value><![CDATA[<#list ARRAY as value> ${value_index}: ${value} </#list>]]></value> - </freemarkerLoop> - <freemarkerFragmentInclude label="Freemarker Fragment include"> - <value><![CDATA[<#include "/templates/PATH" />]]></value> - </freemarkerFragmentInclude> - <freemarkerLibraryImport label="Freemarker Library import"> - <value><![CDATA[<#import "/templates/PATH" as NAMESPACE />]]></value> - </freemarkerLibraryImport> - <htmlPage label="HTML Page"> - <value><![CDATA[<#import "/templates/system/common/crafter.ftl" as crafter /> + </freemarkerLoop> + <freemarkerFragmentInclude label="Freemarker Fragment include"> + <value><![CDATA[<#include "/templates/PATH" />]]></value> + </freemarkerFragmentInclude> + <freemarkerLibraryImport label="Freemarker Library import"> + <value><![CDATA[<#import "/templates/PATH" as NAMESPACE />]]></value> + </freemarkerLibraryImport> + <htmlPage label="HTML Page"> + <value><![CDATA[<#import "/templates/system/common/crafter.ftl" as crafter /> <!doctype html> <html lang="en"> <head> @@ -807,16 +813,16 @@ <@crafter.body_bottom /> </body> </html>]]></value> - </htmlPage> - <specificHTMLTag label="Field (Specific HTML Tag)"> - <value><![CDATA[<@crafter.DESIRED_TAG $field="FIELD_ID">${contentModel.FIELD_ID}</@crafter.DESIRED_TAG>]]></value> - </specificHTMLTag> - <renderComponentCollection label="Render Component Collection"> - <value><![CDATA[<#-- Macro docs @ https://craftercms.com/docs/current/search.html?q=renderComponentCollection&check_keywords=yes&area=default --> + </htmlPage> + <specificHTMLTag label="Field (Specific HTML Tag)"> + <value><![CDATA[<@crafter.DESIRED_TAG $field="FIELD_ID">${contentModel.FIELD_ID}</@crafter.DESIRED_TAG>]]></value> + </specificHTMLTag> + <renderComponentCollection label="Render Component Collection"> + <value><![CDATA[<#-- Macro docs @ https://craftercms.com/docs/current/search.html?q=renderComponentCollection&check_keywords=yes&area=default --> <@crafter.renderComponentCollection $field="features_o" $containerAttributes={ "class": "features-container" } $itemAttributes={ "data-custom-attribute": "true" } />]]></value> - </renderComponentCollection> - <renderRepeatGroup label="Render Repeat Group"> - <value><![CDATA[<#-- Macro docs @ https://craftercms.com/docs/current/search.html?q=renderRepeatCollection&check_keywords=yes&area=default --> + </renderComponentCollection> + <renderRepeatGroup label="Render Repeat Group"> + <value><![CDATA[<#-- Macro docs @ https://craftercms.com/docs/current/search.html?q=renderRepeatCollection&check_keywords=yes&area=default --> <@crafter.renderRepeatGroup $field="VARIABLE_NAME" $containerAttributes={'attr': 'value'}; @@ -829,9 +835,9 @@ ${item.itemField} </@crafter.div> </@crafter.renderRepeatGroup>]]></value> - </renderRepeatGroup> - <navigation label="Navigation"> - <value><![CDATA[<#-- Macro docs @ https://craftercms.com/docs/current/search.html?q=crafter.navigation&check_keywords=yes&area=default --> + </renderRepeatGroup> + <navigation label="Navigation"> + <value><![CDATA[<#-- Macro docs @ https://craftercms.com/docs/current/search.html?q=crafter.navigation&check_keywords=yes&area=default --> <@crafter.navigation showNavElement=false url="NAVIGATION_URL" @@ -840,69 +846,69 @@ itemClass="item-class" depth=2 />]]></value> - </navigation> - <breadcrumb label="Breadcrumb"> - <value><![CDATA[<#-- Macro docs @ https://craftercms.com/docs/current/search.html?q=crafter.breadcrumb&check_keywords=yes&area=default --> + </navigation> + <breadcrumb label="Breadcrumb"> + <value><![CDATA[<#-- Macro docs @ https://craftercms.com/docs/current/search.html?q=crafter.breadcrumb&check_keywords=yes&area=default --> <@crafter.breadcrumb url=contentModel.storeUrl containerElementClass="container-element-class" itemWrapperClass="item-wrapper-class" navElementAttributes={ "data-custom-attribute": "true" } />]]></value> - </breadcrumb> - </reference> - <reference id="craftercms.groovyCodeSnippets"> - <accessContentModel label="Access Content variable"> - <value><![CDATA[contentModel.VARIABLE_NAME]]></value> - </accessContentModel> - <accessTemplateodel label="Access Template variable"> - <value><![CDATA[templateModel]]></value> - </accessTemplateodel> - <currentSiteId label="Current Site ID"> - <value><![CDATA[siteContext.siteName]]></value> - </currentSiteId> - <requestParameters label="Request Parameters"> - <value><![CDATA[params]]></value> - </requestParameters> - <cookies label="Cookies"> - <value><![CDATA[cookies]]></value> - </cookies> - <httpRequest label="HTTP Request"> - <value><![CDATA[request]]></value> - </httpRequest> - <httpResponse label="HTTP Response"> - <value><![CDATA[response]]></value> - </httpResponse> - <session label="Session"> - <value><![CDATA[session]]></value> - </session> - <transformPathToUrl label="Transform PATH to URL"> - <value><![CDATA[urlTransformationService.transform('storeUrlToRenderUrl', STORE_URL)]]></value> - </transformPathToUrl> - <userProfile label="User Profile"> - <value><![CDATA[profile]]></value> - </userProfile> - <currentAuthentication label="Current Authentication"> - <value><![CDATA[authentication]]></value> - </currentAuthentication> - <logInfo label="Log an INFO"> - <value><![CDATA[logger.info('MY MESSAGE')]]></value> - </logInfo> - <logError label="Log an ERROR"> - <value><![CDATA[logger.error('MY MESSAGE')]]></value> - </logError> - <searchService label="Search Service"> - <value><![CDATA[searchService]]></value> - </searchService> - <siteItemService label="Site Item Service"> - <value><![CDATA[siteItemService]]></value> - </siteItemService> - <profileService label="Profile Service"> - <value><![CDATA[profileService]]></value> - </profileService> - <getSpringBean label="Get Spring Bean"> - <value><![CDATA[applicationContext.get("SPRING_BEAN_NAME")]]></value> - </getSpringBean> - </reference> - </references> + </breadcrumb> + </reference> + <reference id="craftercms.groovyCodeSnippets"> + <accessContentModel label="Access Content variable"> + <value><![CDATA[contentModel.VARIABLE_NAME]]></value> + </accessContentModel> + <accessTemplateodel label="Access Template variable"> + <value><![CDATA[templateModel]]></value> + </accessTemplateodel> + <currentSiteId label="Current Site ID"> + <value><![CDATA[siteContext.siteName]]></value> + </currentSiteId> + <requestParameters label="Request Parameters"> + <value><![CDATA[params]]></value> + </requestParameters> + <cookies label="Cookies"> + <value><![CDATA[cookies]]></value> + </cookies> + <httpRequest label="HTTP Request"> + <value><![CDATA[request]]></value> + </httpRequest> + <httpResponse label="HTTP Response"> + <value><![CDATA[response]]></value> + </httpResponse> + <session label="Session"> + <value><![CDATA[session]]></value> + </session> + <transformPathToUrl label="Transform PATH to URL"> + <value><![CDATA[urlTransformationService.transform('storeUrlToRenderUrl', STORE_URL)]]></value> + </transformPathToUrl> + <userProfile label="User Profile"> + <value><![CDATA[profile]]></value> + </userProfile> + <currentAuthentication label="Current Authentication"> + <value><![CDATA[authentication]]></value> + </currentAuthentication> + <logInfo label="Log an INFO"> + <value><![CDATA[logger.info('MY MESSAGE')]]></value> + </logInfo> + <logError label="Log an ERROR"> + <value><![CDATA[logger.error('MY MESSAGE')]]></value> + </logError> + <searchService label="Search Service"> + <value><![CDATA[searchService]]></value> + </searchService> + <siteItemService label="Site Item Service"> + <value><![CDATA[siteItemService]]></value> + </siteItemService> + <profileService label="Profile Service"> + <value><![CDATA[profileService]]></value> + </profileService> + <getSpringBean label="Get Spring Bean"> + <value><![CDATA[applicationContext.get("SPRING_BEAN_NAME")]]></value> + </getSpringBean> + </reference> + </references> </siteUi> diff --git a/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml b/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml index d1bc63e22a..7e8615533b 100644 --- a/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml +++ b/src/test/resources/crafter/studio/upgrade/xslt/ui/v5.0/5.0.0.1/expected.xml @@ -392,251 +392,256 @@ </widget> <widget id="craftercms.components.ContentTypeManagement"> <configuration> - <objectTypes id="page"> - <descriptor> - <name>Page</name> - <type>page</type> - <fields> - <file-name> - <defaultValue /> - <description /> - <helpText /> - <id>file-name</id> - <name>Page URL</name> - <type>file-name</type> - </file-name> - <internal-name> - <defaultValue /> - <description /> - <helpText /> - <id>internal-name</id> - <name>Internal Name</name> - <type>input</type> - </internal-name> - <navLabel> - <defaultValue /> - <description /> - <helpText /> - <id>navLabel</id> - <name>Nav Label</name> - <type>input</type> - </navLabel> - <placeInNav> - <defaultValue /> - <description /> - <helpText /> - <id>placeInNav</id> - <name>Place In Nav</name> - <type>page-nav-order</type> - </placeInNav> - </fields> - <sections title="System Properties"> - <id>defaultSection</id> - <color>rgba(255,0,0,.7)</color> - <title>System Properties - true - file-name - internal-name - placeInNav - navLabel - - + + + + Page + page + + + + + + file-name + Page URL + file-name + + + + + + internal-name + Internal Name + input + + + + + + navLabel + Nav Label + input + + + + + + placeInNav + Place In Nav + page-nav-order + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + placeInNav + navLabel + + + + + + Component + component + + + + + + file-name + Component ID + auto-filename + + + + + + internal-name + Internal Name + input + + + + defaultSection + rgba(255,0,0,.7) + System Properties + true + file-name + internal-name + + + - - - Component - component - - - - - - file-name - Component ID - auto-filename - - - - - - internal-name - Internal Name - input - - - - defaultSection - rgba(255,0,0,.7) - System Properties - true - file-name - internal-name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +