ghost 4.23.0 → 4.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +39 -0
- package/content/themes/casper/assets/built/casper.js +1 -1
- package/content/themes/casper/assets/built/casper.js.map +1 -1
- package/content/themes/casper/assets/built/global.css +1 -1
- package/content/themes/casper/assets/built/global.css.map +1 -1
- package/content/themes/casper/assets/built/screen.css +1 -1
- package/content/themes/casper/assets/built/screen.css.map +1 -1
- package/content/themes/casper/assets/css/global.css +6 -1
- package/content/themes/casper/assets/css/screen.css +50 -215
- package/content/themes/casper/default.hbs +2 -2
- package/content/themes/casper/package.json +3 -2
- package/content/themes/casper/post.hbs +1 -1
- package/content/themes/casper/yarn.lock +173 -123
- package/core/app.js +20 -5
- package/core/boot.js +77 -36
- package/core/bridge.js +10 -10
- package/core/built/assets/ghost-dark-ef86e3bc7f0fb83d39d3d6a49bff8dd5.css +1 -0
- package/core/built/assets/ghost.min-57c1e677f42d596942d317ce93e8a62c.css +1 -0
- package/core/built/assets/{ghost.min-cccc107e881b74c7aaf1a73e1e5e0dee.js → ghost.min-f3c6886e191d34450e9ffca0c8fa056e.js} +543 -618
- package/core/built/assets/icons/audio-upload.svg +8 -0
- package/core/built/assets/{vendor.min-c9002845b6c30ac978abdadde9f33d7c.js → vendor.min-b6b8d2a31d61830c2d8f65c5ba54236a.js} +2656 -2118
- package/core/frontend/apps/amp/lib/helpers/amp_content.js +2 -2
- package/core/frontend/apps/amp/lib/views/amp.hbs +75 -0
- package/core/frontend/apps/private-blogging/index.js +1 -1
- package/core/frontend/helpers/url.js +18 -1
- package/core/frontend/services/apps/index.js +1 -1
- package/core/frontend/services/apps/loader.js +3 -3
- package/core/frontend/services/card-assets/index.js +0 -12
- package/core/frontend/services/card-assets/service.js +22 -21
- package/core/frontend/services/helpers/handlebars.js +1 -1
- package/core/frontend/services/theme-engine/middleware/ensure-active-theme.js +34 -0
- package/core/frontend/services/theme-engine/middleware/index.js +6 -0
- package/core/frontend/services/theme-engine/middleware/update-global-template-options.js +116 -0
- package/core/frontend/services/theme-engine/middleware/update-local-template-data.js +9 -0
- package/core/frontend/services/theme-engine/middleware/update-local-template-options.js +57 -0
- package/core/frontend/src/cards/css/audio.css +186 -0
- package/core/frontend/src/cards/css/blockquote.css +27 -0
- package/core/frontend/src/cards/css/bookmark.css +7 -0
- package/core/frontend/src/cards/css/button.css +4 -0
- package/core/frontend/src/cards/css/callout.css +23 -15
- package/core/frontend/src/cards/css/gallery.css +13 -3
- package/core/frontend/src/cards/css/toggle.css +48 -15
- package/core/frontend/src/cards/js/audio.js +137 -0
- package/core/frontend/web/middleware/error-handler.js +93 -0
- package/core/frontend/web/middleware/handle-image-sizes.js +3 -6
- package/core/frontend/web/middleware/index.js +1 -0
- package/core/frontend/web/middleware/serve-public-file.js +25 -8
- package/core/frontend/web/site.js +2 -5
- package/core/server/adapters/scheduling/SchedulingDefault.js +2 -2
- package/core/server/adapters/storage/LocalStorageBase.js +2 -2
- package/core/server/api/canary/db.js +2 -2
- package/core/server/api/canary/media.js +3 -2
- package/core/server/api/canary/oembed.js +16 -1
- package/core/server/api/canary/session.js +1 -1
- package/core/server/api/canary/slugs.js +1 -1
- package/core/server/api/canary/utils/permissions.js +2 -2
- package/core/server/api/canary/utils/serializers/output/config.js +2 -6
- package/core/server/api/v2/db.js +2 -2
- package/core/server/api/v2/session.js +1 -1
- package/core/server/api/v2/slugs.js +1 -1
- package/core/server/api/v2/utils/permissions.js +2 -2
- package/core/server/api/v3/db.js +2 -2
- package/core/server/api/v3/session.js +1 -1
- package/core/server/api/v3/slugs.js +1 -1
- package/core/server/api/v3/utils/permissions.js +2 -2
- package/core/server/data/db/state-manager.js +4 -4
- package/core/server/data/exporter/export-filename.js +1 -1
- package/core/server/data/importer/handlers/json.js +1 -1
- package/core/server/data/importer/import-manager.js +1 -1
- package/core/server/data/importer/importers/data/base.js +1 -1
- package/core/server/data/migrations/utils.js +2 -2
- package/core/server/data/migrations/versions/1.25/1-update-koenig-beta-html.js +1 -0
- package/core/server/data/migrations/versions/3.1/08-add-uuid-values-to-members.js +1 -0
- package/core/server/data/migrations/versions/3.22/02-settings-key-renames.js +2 -0
- package/core/server/data/migrations/versions/3.22/05-migrate-members-subscription-settings.js +3 -0
- package/core/server/data/migrations/versions/3.22/06-migrate-stripe-connect-settings.js +2 -0
- package/core/server/data/migrations/versions/3.23/01-migrate-bulk-email-settings.js +1 -0
- package/core/server/data/migrations/versions/3.29/01-remove-duplicate-subscriptions.js +2 -0
- package/core/server/data/migrations/versions/3.29/02-remove-duplicate-customers.js +2 -0
- package/core/server/data/migrations/versions/3.38/04-populate-recipient-filter-column.js +2 -0
- package/core/server/data/migrations/versions/4.0/01-update-mobiledoc.js +2 -0
- package/core/server/data/migrations/versions/4.0/03-populate-status-column-for-members.js +4 -0
- package/core/server/data/migrations/versions/4.0/06-populate-members-subscribe-events-table.js +1 -0
- package/core/server/data/migrations/versions/4.0/17-populate-members-status-events-table.js +1 -0
- package/core/server/data/migrations/versions/4.0/18-transform-urls-absolute-to-transform-ready.js +5 -0
- package/core/server/data/migrations/versions/4.0/22-solve-orphaned-webhooks.js +1 -0
- package/core/server/data/migrations/versions/4.0/23-regenerate-posts-html.js +1 -0
- package/core/server/data/migrations/versions/4.0/25-populate-members-paid-subscription-events-table.js +2 -1
- package/core/server/data/migrations/versions/4.12/02-fix-member-statuses.js +1 -0
- package/core/server/data/migrations/versions/4.14/01-fix-comped-member-statuses.js +3 -0
- package/core/server/data/migrations/versions/4.14/02-fix-free-members-status-events.js +1 -0
- package/core/server/data/migrations/versions/4.20/05-remove-not-null-constraint-from-portal-title.js +2 -0
- package/core/server/data/migrations/versions/4.23/01-truncate-offer-names.js +1 -0
- package/core/server/data/migrations/versions/4.3/04-attach-members-to-product.js +1 -0
- package/core/server/data/migrations/versions/4.4/01-restore-free-members-signup-setting-from-backup.js +1 -0
- package/core/server/data/migrations/versions/4.6/01-remove-comped-status.js +1 -0
- package/core/server/data/migrations/versions/4.8/04-migrate-show-newsletter-header-setting.js +1 -0
- package/core/server/data/migrations/versions/4.9/05-fix-missed-mobiledoc-url-transforms.js +1 -0
- package/core/server/data/migrations/versions/4.9/06-add-comped-status.js +1 -0
- package/core/server/data/migrations/versions/4.9/07-update-comped-members-status-events.js +1 -0
- package/core/server/data/schema/commands.js +2 -2
- package/core/server/ghost-server.js +2 -2
- package/core/server/lib/image/image-size.js +2 -2
- package/core/server/models/base/listeners.js +2 -2
- package/core/server/models/member-email-change-event.js +2 -2
- package/core/server/models/member-login-event.js +2 -2
- package/core/server/models/member-paid-subscription-event.js +3 -3
- package/core/server/models/member-payment-event.js +3 -3
- package/core/server/models/member-product-event.js +6 -6
- package/core/server/models/member-status-event.js +5 -3
- package/core/server/models/member-subscribe-event.js +9 -3
- package/core/server/models/relations/authors.js +1 -1
- package/core/server/models/settings.js +1 -1
- package/core/server/notify.js +1 -2
- package/core/server/services/auth/passwordreset.js +1 -1
- package/core/server/services/auth/setup.js +1 -1
- package/core/server/services/email-analytics/jobs/index.js +1 -1
- package/core/server/services/mega/mega.js +6 -4
- package/core/server/services/mega/template.js +47 -17
- package/core/server/services/members/api.js +22 -0
- package/core/server/services/members/config.js +1 -1
- package/core/server/services/members/emails/signup-paid.js +168 -0
- package/core/server/services/members/service.js +6 -2
- package/core/server/services/members/stripe-connect.js +4 -2
- package/core/server/services/nft-oembed.js +7 -2
- package/core/server/services/oembed.js +15 -3
- package/core/server/services/permissions/can-this.js +1 -1
- package/core/server/services/redirects/api.js +20 -25
- package/core/server/services/redirects/index.js +18 -10
- package/core/server/services/redirects/utils.js +14 -0
- package/core/server/services/redirects/validation.js +10 -0
- package/core/server/services/route-settings/default-settings-manager.js +1 -1
- package/core/server/services/route-settings/index.js +40 -17
- package/core/server/services/route-settings/route-settings.js +120 -115
- package/core/server/services/route-settings/settings-loader.js +18 -36
- package/core/server/services/route-settings/yaml-parser.js +1 -1
- package/core/server/services/slack.js +1 -1
- package/core/server/services/themes/activation-bridge.js +3 -3
- package/core/server/services/themes/storage.js +2 -2
- package/core/server/services/twitter-embed.js +81 -0
- package/core/server/services/url/LocalFileCache.js +75 -0
- package/core/server/services/url/UrlService.js +15 -47
- package/core/server/services/url/index.js +17 -4
- package/core/server/services/xmlrpc.js +2 -2
- package/core/server/web/admin/app.js +2 -5
- package/core/server/web/admin/controller.js +35 -12
- package/core/server/web/admin/middleware/redirect-admin-urls.js +15 -0
- package/core/server/web/admin/views/default-prod.html +4 -4
- package/core/server/web/admin/views/default.html +4 -4
- package/core/server/web/api/canary/admin/app.js +0 -3
- package/core/server/web/api/canary/admin/middleware.js +1 -1
- package/core/server/web/api/canary/content/app.js +0 -3
- package/core/server/web/api/v2/admin/app.js +0 -3
- package/core/server/web/api/v2/admin/middleware.js +1 -1
- package/core/server/web/api/v2/content/app.js +0 -3
- package/core/server/web/api/v3/admin/app.js +0 -3
- package/core/server/web/api/v3/admin/middleware.js +1 -1
- package/core/server/web/api/v3/content/app.js +0 -3
- package/core/server/web/members/app.js +0 -3
- package/core/server/web/oauth/app.js +0 -4
- package/core/server/web/parent/app.js +2 -13
- package/core/server/web/parent/backend.js +2 -0
- package/core/server/web/shared/middleware/error-handler.js +57 -162
- package/core/server/web/shared/middleware/index.js +0 -4
- package/core/shared/config/defaults.json +7 -1
- package/core/shared/express.js +1 -1
- package/core/shared/labs.js +12 -7
- package/core/shared/sentry.js +1 -1
- package/package.json +41 -40
- package/yarn.lock +799 -948
- package/content/themes/casper/assets/js/gallery-card.js +0 -24
- package/core/built/assets/ghost-dark-42cf6e0c730578940ec069bda45aea41.css +0 -1
- package/core/built/assets/ghost.min-fcf6a0738421f86c47c55f20d00c5ba9.css +0 -1
- package/core/frontend/services/theme-engine/middleware.js +0 -209
- package/core/server/web/shared/middleware/maintenance.js +0 -25
package/core/boot.js
CHANGED
|
@@ -69,8 +69,9 @@ async function initDatabase({config, logging}) {
|
|
|
69
69
|
* @param {object} options.ghostServer
|
|
70
70
|
* @param {object} options.config
|
|
71
71
|
* @param {object} options.bootLogger
|
|
72
|
+
* @param {boolean} options.frontend
|
|
72
73
|
*/
|
|
73
|
-
async function initCore({ghostServer, config, bootLogger}) {
|
|
74
|
+
async function initCore({ghostServer, config, bootLogger, frontend}) {
|
|
74
75
|
debug('Begin: initCore');
|
|
75
76
|
|
|
76
77
|
// URL Utils is a bit slow, put it here so the timing is visible separate from models
|
|
@@ -95,25 +96,29 @@ async function initCore({ghostServer, config, bootLogger}) {
|
|
|
95
96
|
debug('Begin: Url Service');
|
|
96
97
|
const urlService = require('./server/services/url');
|
|
97
98
|
// Note: there is no await here, we do not wait for the url service to finish
|
|
98
|
-
// We can return, but the site will remain in
|
|
99
|
-
// This is managed on request: https://github.com/TryGhost/Ghost/blob/main/core/
|
|
99
|
+
// We can return, but the site will remain in maintenance mode until this finishes
|
|
100
|
+
// This is managed on request: https://github.com/TryGhost/Ghost/blob/main/core/app.js#L10
|
|
100
101
|
urlService.init({
|
|
101
102
|
onFinished: () => {
|
|
102
103
|
bootLogger.log('URL Service Ready');
|
|
103
|
-
}
|
|
104
|
+
},
|
|
105
|
+
urlCache: !frontend // hacky parameter to make the cache initialization kick in as we can't initialize labs before the boot
|
|
104
106
|
});
|
|
105
107
|
debug('End: Url Service');
|
|
106
108
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
109
|
+
if (ghostServer) {
|
|
110
|
+
// Job Service allows parts of Ghost to run in the background
|
|
111
|
+
debug('Begin: Job Service');
|
|
112
|
+
const jobService = require('./server/services/jobs');
|
|
113
|
+
ghostServer.registerCleanupTask(async () => {
|
|
114
|
+
await jobService.shutdown();
|
|
115
|
+
});
|
|
116
|
+
debug('End: Job Service');
|
|
117
|
+
|
|
118
|
+
ghostServer.registerCleanupTask(async () => {
|
|
119
|
+
await urlService.shutdown();
|
|
120
|
+
});
|
|
121
|
+
}
|
|
117
122
|
|
|
118
123
|
debug('End: initCore');
|
|
119
124
|
}
|
|
@@ -129,6 +134,11 @@ async function initServicesForFrontend() {
|
|
|
129
134
|
await routeSettings.init();
|
|
130
135
|
debug('End: Routing Settings');
|
|
131
136
|
|
|
137
|
+
debug('Begin: Redirects');
|
|
138
|
+
const customRedirects = require('./server/services/redirects');
|
|
139
|
+
await customRedirects.init(),
|
|
140
|
+
debug('End: Redirects');
|
|
141
|
+
|
|
132
142
|
debug('Begin: Themes');
|
|
133
143
|
// customThemSettingsService.api must be initialized before any theme activation occurs
|
|
134
144
|
const customThemeSettingsService = require('./server/services/custom-theme-settings');
|
|
@@ -149,9 +159,6 @@ async function initFrontend() {
|
|
|
149
159
|
const helperService = require('./frontend/services/helpers');
|
|
150
160
|
await helperService.init();
|
|
151
161
|
|
|
152
|
-
const cardAssetService = require('./frontend/services/card-assets');
|
|
153
|
-
await cardAssetService.init();
|
|
154
|
-
|
|
155
162
|
debug('End: initFrontend');
|
|
156
163
|
}
|
|
157
164
|
|
|
@@ -159,10 +166,30 @@ async function initFrontend() {
|
|
|
159
166
|
* At the moment we load our express apps all in one go, they require themselves and are co-located
|
|
160
167
|
* What we want is to be able to optionally load various components and mount them
|
|
161
168
|
* So eventually this function should go away
|
|
169
|
+
* @param {Object} options
|
|
170
|
+
* @param {Boolean} options.backend
|
|
171
|
+
* @param {Boolean} options.frontend
|
|
172
|
+
* @param {Object} options.config
|
|
162
173
|
*/
|
|
163
|
-
async function initExpressApps() {
|
|
174
|
+
async function initExpressApps({frontend, backend, config}) {
|
|
164
175
|
debug('Begin: initExpressApps');
|
|
176
|
+
|
|
165
177
|
const parentApp = require('./server/web/parent/app')();
|
|
178
|
+
const vhost = require('@tryghost/vhost-middleware');
|
|
179
|
+
|
|
180
|
+
// Mount the express apps on the parentApp
|
|
181
|
+
if (backend) {
|
|
182
|
+
// ADMIN + API
|
|
183
|
+
const backendApp = require('./server/web/parent/backend')();
|
|
184
|
+
parentApp.use(vhost(config.getBackendMountPath(), backendApp));
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (frontend) {
|
|
188
|
+
// SITE + MEMBERS
|
|
189
|
+
const frontendApp = require('./server/web/parent/frontend')({});
|
|
190
|
+
parentApp.use(vhost(config.getFrontendMountPath(), frontendApp));
|
|
191
|
+
}
|
|
192
|
+
|
|
166
193
|
debug('End: initExpressApps');
|
|
167
194
|
return parentApp;
|
|
168
195
|
}
|
|
@@ -178,6 +205,7 @@ async function initDynamicRouting() {
|
|
|
178
205
|
const routing = require('./frontend/services/routing');
|
|
179
206
|
const routeSettingsService = require('./server/services/route-settings');
|
|
180
207
|
const bridge = require('./bridge');
|
|
208
|
+
bridge.init();
|
|
181
209
|
|
|
182
210
|
// We pass the frontend API version + the dynamic routes here, so that the frontend services are slightly less tightly-coupled
|
|
183
211
|
const apiVersion = bridge.getFrontendApiVersion();
|
|
@@ -219,7 +247,6 @@ async function initServices({config}) {
|
|
|
219
247
|
const appService = require('./frontend/services/apps');
|
|
220
248
|
const limits = require('./server/services/limits');
|
|
221
249
|
const scheduling = require('./server/adapters/scheduling');
|
|
222
|
-
const customRedirects = require('./server/services/redirects');
|
|
223
250
|
|
|
224
251
|
const urlUtils = require('./shared/url-utils');
|
|
225
252
|
|
|
@@ -233,7 +260,6 @@ async function initServices({config}) {
|
|
|
233
260
|
await offers.init();
|
|
234
261
|
|
|
235
262
|
await Promise.all([
|
|
236
|
-
customRedirects.init(),
|
|
237
263
|
members.init(),
|
|
238
264
|
permissions.init(),
|
|
239
265
|
xmlrpc.listen(),
|
|
@@ -271,7 +297,7 @@ async function initBackgroundServices({config}) {
|
|
|
271
297
|
themeService.loadInactiveThemes();
|
|
272
298
|
|
|
273
299
|
// we don't want to kick off background services that will interfere with tests
|
|
274
|
-
if (process.env.NODE_ENV.
|
|
300
|
+
if (process.env.NODE_ENV.startsWith('test')) {
|
|
275
301
|
return;
|
|
276
302
|
}
|
|
277
303
|
|
|
@@ -297,7 +323,7 @@ async function initBackgroundServices({config}) {
|
|
|
297
323
|
|
|
298
324
|
* @returns {Promise<object>} ghostServer
|
|
299
325
|
*/
|
|
300
|
-
async function bootGhost() {
|
|
326
|
+
async function bootGhost({backend = true, frontend = true, server = true} = {}) {
|
|
301
327
|
// Metrics
|
|
302
328
|
const startTime = Date.now();
|
|
303
329
|
debug('Begin Boot');
|
|
@@ -345,12 +371,15 @@ async function bootGhost() {
|
|
|
345
371
|
|
|
346
372
|
// Step 2 - Start server with minimal app in global maintenance mode
|
|
347
373
|
debug('Begin: load server + minimal app');
|
|
348
|
-
const rootApp = require('./app');
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
374
|
+
const rootApp = require('./app')();
|
|
375
|
+
|
|
376
|
+
if (server) {
|
|
377
|
+
const GhostServer = require('./server/ghost-server');
|
|
378
|
+
ghostServer = new GhostServer({url: config.getSiteUrl()});
|
|
379
|
+
await ghostServer.start(rootApp);
|
|
380
|
+
bootLogger.log('server started');
|
|
381
|
+
debug('End: load server + minimal app');
|
|
382
|
+
}
|
|
354
383
|
|
|
355
384
|
// Step 3 - Get the DB ready
|
|
356
385
|
debug('Begin: Get DB ready');
|
|
@@ -360,11 +389,18 @@ async function bootGhost() {
|
|
|
360
389
|
|
|
361
390
|
// Step 4 - Load Ghost with all its services
|
|
362
391
|
debug('Begin: Load Ghost Services & Apps');
|
|
363
|
-
await initCore({ghostServer, config, bootLogger});
|
|
392
|
+
await initCore({ghostServer, config, bootLogger, frontend});
|
|
364
393
|
await initServicesForFrontend();
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
394
|
+
|
|
395
|
+
if (frontend) {
|
|
396
|
+
await initFrontend();
|
|
397
|
+
}
|
|
398
|
+
const ghostApp = await initExpressApps({frontend, backend, config});
|
|
399
|
+
|
|
400
|
+
if (frontend) {
|
|
401
|
+
await initDynamicRouting();
|
|
402
|
+
}
|
|
403
|
+
|
|
368
404
|
await initServices({config});
|
|
369
405
|
debug('End: Load Ghost Services & Apps');
|
|
370
406
|
|
|
@@ -383,15 +419,20 @@ async function bootGhost() {
|
|
|
383
419
|
initBackgroundServices({config});
|
|
384
420
|
|
|
385
421
|
// We return the server purely for testing purposes
|
|
386
|
-
|
|
387
|
-
|
|
422
|
+
if (server) {
|
|
423
|
+
debug('End Boot: Returning Ghost Server');
|
|
424
|
+
return ghostServer;
|
|
425
|
+
} else {
|
|
426
|
+
debug('End boot: Returning Root App');
|
|
427
|
+
return rootApp;
|
|
428
|
+
}
|
|
388
429
|
} catch (error) {
|
|
389
430
|
const errors = require('@tryghost/errors');
|
|
390
431
|
|
|
391
432
|
// Ensure the error we have is an ignition error
|
|
392
433
|
let serverStartError = error;
|
|
393
|
-
if (!errors.utils.
|
|
394
|
-
serverStartError = new errors.
|
|
434
|
+
if (!errors.utils.isGhostError(serverStartError)) {
|
|
435
|
+
serverStartError = new errors.InternalServerError({message: serverStartError.message, err: serverStartError});
|
|
395
436
|
}
|
|
396
437
|
|
|
397
438
|
logging.error(serverStartError);
|
package/core/bridge.js
CHANGED
|
@@ -16,6 +16,7 @@ const config = require('./shared/config');
|
|
|
16
16
|
const logging = require('@tryghost/logging');
|
|
17
17
|
const tpl = require('@tryghost/tpl');
|
|
18
18
|
const themeEngine = require('./frontend/services/theme-engine');
|
|
19
|
+
const cardAssetService = require('./frontend/services/card-assets');
|
|
19
20
|
const routerManager = require('./frontend/services/routing').routerManager;
|
|
20
21
|
const settingsCache = require('./shared/settings-cache');
|
|
21
22
|
|
|
@@ -27,7 +28,7 @@ const messages = {
|
|
|
27
28
|
};
|
|
28
29
|
|
|
29
30
|
class Bridge {
|
|
30
|
-
|
|
31
|
+
init() {
|
|
31
32
|
/**
|
|
32
33
|
* When locale changes, we reload theme translations
|
|
33
34
|
* @deprecated: the term "lang" was deprecated in favor of "locale" publicly in 4.0
|
|
@@ -49,7 +50,7 @@ class Bridge {
|
|
|
49
50
|
return themeEngine.getActive();
|
|
50
51
|
}
|
|
51
52
|
|
|
52
|
-
activateTheme(loadedTheme, checkedTheme) {
|
|
53
|
+
async activateTheme(loadedTheme, checkedTheme) {
|
|
53
54
|
let settings = {
|
|
54
55
|
locale: settingsCache.get('lang')
|
|
55
56
|
};
|
|
@@ -67,8 +68,12 @@ class Bridge {
|
|
|
67
68
|
|
|
68
69
|
if (previousGhostAPI !== undefined && (previousGhostAPI !== currentGhostAPI)) {
|
|
69
70
|
events.emit('services.themes.api.changed');
|
|
70
|
-
this.reloadFrontend();
|
|
71
|
+
await this.reloadFrontend();
|
|
71
72
|
}
|
|
73
|
+
|
|
74
|
+
const cardAssetConfig = this.getCardAssetConfig();
|
|
75
|
+
debug('reload card assets config', cardAssetConfig);
|
|
76
|
+
await cardAssetService.load(cardAssetConfig);
|
|
72
77
|
} catch (err) {
|
|
73
78
|
logging.error(new errors.InternalServerError({
|
|
74
79
|
message: tpl(messages.activateFailed, {theme: loadedTheme.name}),
|
|
@@ -93,17 +98,12 @@ class Bridge {
|
|
|
93
98
|
}
|
|
94
99
|
}
|
|
95
100
|
|
|
96
|
-
reloadFrontend() {
|
|
101
|
+
async reloadFrontend() {
|
|
97
102
|
const apiVersion = this.getFrontendApiVersion();
|
|
98
|
-
const cardAssetConfig = this.getCardAssetConfig();
|
|
99
|
-
|
|
100
|
-
debug('reload card assets config', cardAssetConfig);
|
|
101
|
-
const cardAssetService = require('./frontend/services/card-assets');
|
|
102
|
-
cardAssetService.load(cardAssetConfig);
|
|
103
103
|
|
|
104
104
|
debug('reload frontend', apiVersion);
|
|
105
105
|
const siteApp = require('./frontend/web/site');
|
|
106
|
-
siteApp.reload({apiVersion});
|
|
106
|
+
await siteApp.reload({apiVersion});
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
|