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;