diff --git a/crowdin.yml b/crowdin.yml
index 818ddc187..114bcd3ff 100644
--- a/crowdin.yml
+++ b/crowdin.yml
@@ -69,4 +69,22 @@ files: [
"escape_special_characters": 0,
"escape_quotes" : 0,
},
+ {
+ "source" : "/layout-webapp/src/main/resources/locale/portlet/Analytics_en.properties",
+
+ "translation" : "%original_path%/%file_name%!_%locale_with_underscore%.%file_extension%",
+ "translation_replace" : {
+ "_en!": "","ar_SA": "ar","ar_OM": "aro","az_AZ": "az","ca_ES": "ca","ceb_PH": "ceb",
+ "co_FR": "co","cs_CZ": "cs","de_DE": "de","el_GR": "el","en_US": "en","es_ES": "es_ES","eu_ES": "eu","fa_IR": "fa",
+ "fi_FI": "fi","fil_PH": "fil","fr_FR": "fr","hi_IN": "hi","hu_HU": "hu","id_ID": "id","it_IT": "it","ja_JP": "ja",
+ "kab_KAB": "kab","ko_KR": "ko","lt_LT": "lt","ms_MY": "ms","nl_NL": "nl","no_NO": "no","pcm_NG": "pcm","pl_PL": "pl",
+ "pt_BR": "pt_BR","pt_PT": "pt_PT","ro_RO": "ro","ru_RU": "ru","sk_SK": "sk","sl_SI": "sl","sq_AL": "sq",
+ "sv_SE": "sv_SE","th_TH": "th","tl_PH": "tl","tr_TR": "tr","uk_UA": "uk","ur_IN": "ur_IN","vi_VN": "vi",
+ "zh_CN": "zh_CN","zh_TW": "zh_TW",
+ },
+ "dest" : "add__ons/layout/portlet/Analytics.properties",
+ "update_option" : "update_as_unapproved",
+ "escape_special_characters": 0,
+ "escape_quotes" : 0,
+ },
]
\ No newline at end of file
diff --git a/layout-webapp/src/main/resources/locale/portlet/Analytics_en.properties b/layout-webapp/src/main/resources/locale/portlet/Analytics_en.properties
new file mode 100644
index 000000000..a8a372d30
--- /dev/null
+++ b/layout-webapp/src/main/resources/locale/portlet/Analytics_en.properties
@@ -0,0 +1,30 @@
+analytics.field.label.applicationName=Application Name
+
+analytics.field.label.pageTemplateId=Page Template Id
+analytics.field.label.pageTemplateName=Page Template Name
+analytics.field.label.pageTemplateCategory=Page Template Category
+analytics.field.label.pageTemplateDisabled=Is Page Template Disabled
+analytics.field.label.pageTemplateSystem=Is Page Template System
+analytics.field.label.pageTemplateIllustrationId=Page Template illustration id
+analytics.field.label.pageTemplatePage=Page Template originating page
+analytics.field.label.pageReference=Page reference
+analytics.field.label.siteName=Site name
+analytics.field.label.siteType=Site type
+analytics.field.label.pageType=Page type
+analytics.field.label.pageName=Page name
+
+analytics.pageLayout=Page Layout
+analytics.createPageLayout=Create Page Layout
+analytics.createPageTemplate=Create Page Template
+analytics.updatePageTemplate=Update Page Template
+analytics.deletePageTemplate=Delete Page Template
+analytics.enablePageTemplate=Enable Page Template
+analytics.disablePageTemplate=Disable Page Template
+analytics.siteNavigation=Site topbar navigation
+analytics.siteManagement=Sites Management
+analytics.pageTemplateManagement=Page Templates Management
+analytics.pageLayoutEditor=Layout Editor
+
+analytics.customized=Customized
+analytics.blank=Blank
+analytics.analytics=Analytics
\ No newline at end of file
diff --git a/layout-webapp/src/main/webapp/vue-app/common-layout-components/components/site-navigation/SiteNavigationElementDrawer.vue b/layout-webapp/src/main/webapp/vue-app/common-layout-components/components/site-navigation/SiteNavigationElementDrawer.vue
index 2f7b0cba6..e5777c582 100644
--- a/layout-webapp/src/main/webapp/vue-app/common-layout-components/components/site-navigation/SiteNavigationElementDrawer.vue
+++ b/layout-webapp/src/main/webapp/vue-app/common-layout-components/components/site-navigation/SiteNavigationElementDrawer.vue
@@ -247,7 +247,8 @@ export default {
this.navigationNode.siteKey.name,
this.navigationNode.siteKey.type,
this.elementType, this.elementType === 'LINK' && this.link || null,
- this.elementType === 'PAGE' && this.pageTemplate?.id || null)
+ this.elementType === 'PAGE' && this.pageTemplate?.id || null
+ )
.then((createdPage) => {
const pageRef = createdPage?.key?.ref || `${createdPage?.key.site.typeName}::${createdPage?.key.site.name}::${createdPage?.pageContext?.key.name}`;
this.$root.$emit('save-node-with-page', {
@@ -257,6 +258,9 @@ export default {
'createdPage': createdPage,
'openEditLayout': this.elementType === 'PAGE',
});
+ return createdPage;
+ }).then(page => {
+ this.$root.$emit('page-layout-created', page, this.pageTemplate);
}).catch(() => {
this.$root.$emit('alert-message', this.$t('siteNavigation.label.pageCreation.error'), 'error');
}).finally(() => this.loading = false);
diff --git a/layout-webapp/src/main/webapp/vue-app/common/components/LayoutAnalytics.vue b/layout-webapp/src/main/webapp/vue-app/common/components/LayoutAnalytics.vue
new file mode 100644
index 000000000..d7c5312b0
--- /dev/null
+++ b/layout-webapp/src/main/webapp/vue-app/common/components/LayoutAnalytics.vue
@@ -0,0 +1,109 @@
+
\ No newline at end of file
diff --git a/layout-webapp/src/main/webapp/vue-app/common/initComponents.js b/layout-webapp/src/main/webapp/vue-app/common/initComponents.js
new file mode 100644
index 000000000..aba8b87e3
--- /dev/null
+++ b/layout-webapp/src/main/webapp/vue-app/common/initComponents.js
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the Meeds project (https://meeds.io/).
+ *
+ * Copyright (C) 2020 - 2024 Meeds Association contact@meeds.io
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import LayoutAnalytics from './components/LayoutAnalytics.vue';
+
+const components = {
+ 'layout-analytics': LayoutAnalytics,
+};
+
+for (const key in components) {
+ Vue.component(key, components[key]);
+}
diff --git a/layout-webapp/src/main/webapp/vue-app/layout-editor/components/LayoutEditor.vue b/layout-webapp/src/main/webapp/vue-app/layout-editor/components/LayoutEditor.vue
index 4d73160d1..65dd5127e 100644
--- a/layout-webapp/src/main/webapp/vue-app/layout-editor/components/LayoutEditor.vue
+++ b/layout-webapp/src/main/webapp/vue-app/layout-editor/components/LayoutEditor.vue
@@ -36,6 +36,8 @@
@modified="modified = true" />
+