diff --git a/modules/app/src/main/resources/admin/tools/main/main.html b/modules/app/src/main/resources/admin/tools/main/main.html
index cf9df45d27..c1fb2ecb68 100644
--- a/modules/app/src/main/resources/admin/tools/main/main.html
+++ b/modules/app/src/main/resources/admin/tools/main/main.html
@@ -39,7 +39,8 @@
-
+
+
{{#isBrowseMode}}
diff --git a/modules/app/src/main/resources/admin/tools/main/main.js b/modules/app/src/main/resources/admin/tools/main/main.js
index 824da16838..565dcbea5b 100644
--- a/modules/app/src/main/resources/admin/tools/main/main.js
+++ b/modules/app/src/main/resources/admin/tools/main/main.js
@@ -4,6 +4,7 @@ const admin = require('/lib/xp/admin');
const mustache = require('/lib/mustache');
const portal = require('/lib/xp/portal');
const i18n = require('/lib/xp/i18n');
+const configLib = require('/lib/config');
exports.renderTemplate = function (path, params) {
const view = resolve('./main.html');
@@ -45,10 +46,8 @@ exports.getParams = function () {
locale: admin.getLocales()
}),
launcherPath: admin.getLauncherPath(),
- configServiceUrl: portal.apiUrl({
- application: app.name,
- api: 'config',
- }),
+ configScriptId: configLib.generateScriptConfigId(),
+ configAsJson: JSON.stringify(configLib.getConfig(), null, 4).replace(/<(\/?script|!--)/gi, "\\u003C$1"),
toolBaseUrl: toolUrlBase,
toolAppName: app.name,
}
diff --git a/modules/app/src/main/resources/admin/tools/main/main.xml b/modules/app/src/main/resources/admin/tools/main/main.xml
index 71ae74a86e..995b7b218e 100644
--- a/modules/app/src/main/resources/admin/tools/main/main.xml
+++ b/modules/app/src/main/resources/admin/tools/main/main.xml
@@ -8,7 +8,6 @@
chartdata
collaboration
- config
content
export
i18n
@@ -17,6 +16,5 @@
com.enonic.xp.app.main:launcher
com.enonic.xp.app.main:i18n
admin:widget
- com.enonic.app.contentstudio.plus:i18n
diff --git a/modules/app/src/main/resources/admin/widgets/settings/settings.html b/modules/app/src/main/resources/admin/widgets/settings/settings.html
index 7ba569a07f..1d6144b3b6 100644
--- a/modules/app/src/main/resources/admin/widgets/settings/settings.html
+++ b/modules/app/src/main/resources/admin/widgets/settings/settings.html
@@ -1,3 +1,4 @@
-
+
+
diff --git a/modules/app/src/main/resources/admin/widgets/settings/settings.js b/modules/app/src/main/resources/admin/widgets/settings/settings.js
index ef6c8def8e..d266032fb0 100644
--- a/modules/app/src/main/resources/admin/widgets/settings/settings.js
+++ b/modules/app/src/main/resources/admin/widgets/settings/settings.js
@@ -2,6 +2,7 @@
const portal = require('/lib/xp/portal');
const mustache = require('/lib/mustache');
+const configLib = require('../../../lib/config');
function handleGet() {
const view = resolve('./settings.html');
@@ -9,10 +10,8 @@ function handleGet() {
assetsUri: portal.assetUrl({
path: 'js/settings.js'
}),
- configServiceUrl: portal.apiUrl({
- application: app.name,
- api: 'config',
- }),
+ configScriptId: configLib.generateScriptConfigId(),
+ configAsJson: JSON.stringify(configLib.getConfig(), null, 4).replace(/<(\/?script|!--)/gi, "\\u003C$1"),
};
return {
diff --git a/modules/app/src/main/resources/apis/config/config.js b/modules/app/src/main/resources/apis/config/config.js
deleted file mode 100644
index 2849a7949b..0000000000
--- a/modules/app/src/main/resources/apis/config/config.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/*global app, resolve*/
-
-const admin = require('/lib/xp/admin');
-const portal = require('/lib/xp/portal');
-const contextLib = require('/lib/xp/context');
-
-function handleGet() {
- const context = contextLib.get();
- const branch = context.branch;
- const allowContentUpdate = app.config['publishingWizard.allowContentUpdate'] !== 'false';
- const excludeDependencies = app.config['publishingWizard.excludeDependencies'] === 'true' || false;
- const allowPathTransliteration = app.config['contentWizard.allowPathTransliteration'] !== 'false';
- const enableCollaboration = app.config['contentWizard.enableCollaboration'] !== 'false';
- const defaultPublishFromTime = parseTime(app.config['publishingWizard.defaultPublishFromTime']);
- const toolUri = admin.getToolUrl(
- app.name,
- 'main'
- );
- return {
- status: 200,
- contentType: 'application/json',
- body: {
- allowContentUpdate,
- excludeDependencies,
- allowPathTransliteration,
- adminUrl: admin.getBaseUri(),
- assetsUri: portal.assetUrl({
- path: ''
- }),
- toolUri: toolUri,
- appId: app.name,
- appVersion: app.version,
- branch,
- enableCollaboration,
- defaultPublishFromTime,
- locale: admin.getLocale(),
- services: {
- contentUrl: portal.apiUrl({
- application: app.name,
- api: 'content',
- }),
- i18nUrl: portal.apiUrl({
- application: app.name,
- api: 'i18n',
- }),
- licenseUrl: portal.apiUrl({
- application: app.name,
- api: 'license',
- }),
- stylesUrl: portal.apiUrl({
- application: app.name,
- api: 'styles',
- }),
- collaborationUrl: portal.apiUrl({
- application: app.name,
- api: 'collaboration',
- }),
- exportServiceUrl: portal.apiUrl({
- application: app.name,
- api: 'export',
- }),
- },
- theme: 'light',
- /* Remove in CS/lib-admin-ui 5.0 */
- launcher: {
- theme: 'light'
- },
- widgetApiUrl: portal.apiUrl({
- application: 'admin',
- api: 'widget',
- }),
- }
- };
-}
-
-function parseTime(value) {
- const timeRegex = /^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$/;
- return timeRegex.test(value) ? value : null;
-}
-
-exports.get = handleGet;
diff --git a/modules/app/src/main/resources/apis/config/config.xml b/modules/app/src/main/resources/apis/config/config.xml
deleted file mode 100644
index f28a669188..0000000000
--- a/modules/app/src/main/resources/apis/config/config.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
- role:system.authenticated
-
-
diff --git a/modules/app/src/main/resources/assets/js/main.ts b/modules/app/src/main/resources/assets/js/main.ts
index 3eac736869..e838b0949e 100644
--- a/modules/app/src/main/resources/assets/js/main.ts
+++ b/modules/app/src/main/resources/assets/js/main.ts
@@ -65,6 +65,7 @@ import {UrlAction} from 'lib-contentstudio/app/UrlAction';
import {ContentAppHelper} from 'lib-contentstudio/app/wizard/ContentAppHelper';
import {ContentWizardPanelParams} from 'lib-contentstudio/app/wizard/ContentWizardPanelParams';
import * as Q from 'q';
+import {JSONObject} from '@enonic/lib-admin-ui/types';
// Dynamically import and execute all input types, since they are used
// on-demand, when parsing XML schemas and has not real usage in app
@@ -638,12 +639,11 @@ function initProjectContext(application: Application): Q.Promise {
if (!document.currentScript) {
throw Error('Legacy browsers are not supported');
}
- const configServiceUrl = document.currentScript.getAttribute('data-config-service-url');
- if (!configServiceUrl) {
+ const configScriptId = document.currentScript.getAttribute('data-config-script-id');
+ if (!configScriptId) {
throw Error('Unable to fetch app config');
}
-
- await CONFIG.init(configServiceUrl);
+ CONFIG.setConfig(JSON.parse(document.getElementById(configScriptId).innerText) as JSONObject);
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
await i18nInit(CONFIG.getString('services.i18nUrl'));
diff --git a/modules/app/src/main/resources/assets/js/settings.ts b/modules/app/src/main/resources/assets/js/settings.ts
index 1d1f81c9fb..65e8300a13 100644
--- a/modules/app/src/main/resources/assets/js/settings.ts
+++ b/modules/app/src/main/resources/assets/js/settings.ts
@@ -4,7 +4,7 @@ import {ElementEvent} from '@enonic/lib-admin-ui/dom/ElementEvent';
import {SettingsAppContainer} from 'lib-contentstudio/app/settings/SettingsAppContainer';
import {CONFIG} from '@enonic/lib-admin-ui/util/Config';
import {ProjectConfigContext} from 'lib-contentstudio/app/settings/data/project/ProjectConfigContext';
-import * as Q from 'q';
+import {JSONObject} from '@enonic/lib-admin-ui/types';
const waitForWidgetElemAttached = (elemId: string): void => {
const body: Body = Body.get();
@@ -24,8 +24,8 @@ const appendHtml = (widgetElem: Element): void => {
widgetElem.appendChild(c);
};
-const init = async (configUri: string, elemId: string): Promise => {
- await CONFIG.init(configUri);
+const init = async (configScriptId: string, elemId: string): Promise => {
+ CONFIG.setConfig(JSON.parse(document.getElementById(configScriptId).innerText) as JSONObject);
await ProjectConfigContext.get().init();
const body: Body = Body.get();
@@ -43,12 +43,12 @@ void (async (currentScript: HTMLOrSVGScriptElement) => {
throw Error('Legacy browsers are not supported');
}
- const configUri: string = currentScript.getAttribute('data-config-service-url');
+ const configScriptId: string = currentScript.getAttribute('data-config-script-id');
const elemId: string = currentScript.getAttribute('data-widget-id');
- if (!configUri || !elemId) {
+ if (!configScriptId || !elemId) {
throw Error('Missing attributes on inject script');
}
- await init(configUri, elemId);
+ await init(configScriptId, elemId);
})(document.currentScript);
diff --git a/modules/app/src/main/resources/lib/config.js b/modules/app/src/main/resources/lib/config.js
new file mode 100644
index 0000000000..d59ea19edf
--- /dev/null
+++ b/modules/app/src/main/resources/lib/config.js
@@ -0,0 +1,76 @@
+/*global app, resolve*/
+
+const admin = require('/lib/xp/admin');
+const portal = require('/lib/xp/portal');
+const contextLib = require('/lib/xp/context');
+
+function getConfig() {
+ const context = contextLib.get();
+ const branch = context.branch;
+ const allowContentUpdate = app.config['publishingWizard.allowContentUpdate'] !== 'false';
+ const excludeDependencies = app.config['publishingWizard.excludeDependencies'] === 'true' || false;
+ const allowPathTransliteration = app.config['contentWizard.allowPathTransliteration'] !== 'false';
+ const enableCollaboration = app.config['contentWizard.enableCollaboration'] !== 'false';
+ const defaultPublishFromTime = parseTime(app.config['publishingWizard.defaultPublishFromTime']);
+ const toolUri = admin.getToolUrl(
+ app.name,
+ 'main'
+ );
+ return {
+ allowContentUpdate,
+ excludeDependencies,
+ allowPathTransliteration,
+ adminUrl: admin.getBaseUri(),
+ assetsUri: portal.assetUrl({
+ path: ''
+ }),
+ toolUri: toolUri,
+ appId: app.name,
+ appVersion: app.version,
+ branch,
+ enableCollaboration,
+ defaultPublishFromTime,
+ locale: admin.getLocale(),
+ services: {
+ contentUrl: portal.apiUrl({
+ api: 'content',
+ }),
+ i18nUrl: portal.apiUrl({
+ api: 'i18n',
+ }),
+ licenseUrl: portal.apiUrl({
+ api: 'license',
+ }),
+ stylesUrl: portal.apiUrl({
+ api: 'styles',
+ }),
+ collaborationUrl: portal.apiUrl({
+ api: 'collaboration',
+ }),
+ exportServiceUrl: portal.apiUrl({
+ api: 'export',
+ }),
+ },
+ theme: 'light',
+ /* Remove in CS/lib-admin-ui 5.0 */
+ launcher: {
+ theme: 'light'
+ },
+ widgetApiUrl: portal.apiUrl({
+ application: 'admin',
+ api: 'widget',
+ }),
+ };
+}
+
+function parseTime(value) {
+ const timeRegex = /^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$/;
+ return timeRegex.test(value) ? value : null;
+}
+
+function generateScriptConfigId() {
+ return Math.random().toString(36).substring(2, 15);
+}
+
+exports.getConfig = getConfig;
+exports.generateScriptConfigId = generateScriptConfigId;