ghost 5.54.0 → 5.54.2
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/components/tryghost-adapter-cache-memory-ttl-5.54.2.tgz +0 -0
- package/components/tryghost-adapter-cache-redis-5.54.2.tgz +0 -0
- package/components/{tryghost-adapter-manager-5.54.0.tgz → tryghost-adapter-manager-5.54.2.tgz} +0 -0
- package/components/{tryghost-announcement-bar-settings-5.54.0.tgz → tryghost-announcement-bar-settings-5.54.2.tgz} +0 -0
- package/components/{tryghost-api-framework-5.54.0.tgz → tryghost-api-framework-5.54.2.tgz} +0 -0
- package/components/tryghost-api-version-compatibility-service-5.54.2.tgz +0 -0
- package/components/tryghost-audience-feedback-5.54.2.tgz +0 -0
- package/components/tryghost-bootstrap-socket-5.54.2.tgz +0 -0
- package/components/tryghost-collections-5.54.2.tgz +0 -0
- package/components/tryghost-constants-5.54.2.tgz +0 -0
- package/components/tryghost-custom-theme-settings-service-5.54.2.tgz +0 -0
- package/components/{tryghost-data-generator-5.54.0.tgz → tryghost-data-generator-5.54.2.tgz} +0 -0
- package/components/tryghost-domain-events-5.54.2.tgz +0 -0
- package/components/tryghost-dynamic-routing-events-5.54.2.tgz +0 -0
- package/components/tryghost-email-analytics-provider-mailgun-5.54.2.tgz +0 -0
- package/components/tryghost-email-analytics-service-5.54.2.tgz +0 -0
- package/components/tryghost-email-content-generator-5.54.2.tgz +0 -0
- package/components/tryghost-email-events-5.54.2.tgz +0 -0
- package/components/{tryghost-email-service-5.54.0.tgz → tryghost-email-service-5.54.2.tgz} +0 -0
- package/components/tryghost-email-suppression-list-5.54.2.tgz +0 -0
- package/components/tryghost-event-aware-cache-wrapper-5.54.2.tgz +0 -0
- package/components/tryghost-express-dynamic-redirects-5.54.2.tgz +0 -0
- package/components/tryghost-external-media-inliner-5.54.2.tgz +0 -0
- package/components/tryghost-extract-api-key-5.54.2.tgz +0 -0
- package/components/tryghost-html-to-plaintext-5.54.2.tgz +0 -0
- package/components/tryghost-i18n-5.54.2.tgz +0 -0
- package/components/tryghost-importer-handler-content-files-5.54.2.tgz +0 -0
- package/components/tryghost-importer-revue-5.54.2.tgz +0 -0
- package/components/tryghost-in-memory-repository-5.54.2.tgz +0 -0
- package/components/{tryghost-job-manager-5.54.0.tgz → tryghost-job-manager-5.54.2.tgz} +0 -0
- package/components/tryghost-link-redirects-5.54.2.tgz +0 -0
- package/components/tryghost-link-replacer-5.54.2.tgz +0 -0
- package/components/tryghost-link-tracking-5.54.2.tgz +0 -0
- package/components/{tryghost-magic-link-5.54.0.tgz → tryghost-magic-link-5.54.2.tgz} +0 -0
- package/components/tryghost-mail-events-5.54.2.tgz +0 -0
- package/components/tryghost-mailgun-client-5.54.2.tgz +0 -0
- package/components/{tryghost-member-attribution-5.54.0.tgz → tryghost-member-attribution-5.54.2.tgz} +0 -0
- package/components/tryghost-member-events-5.54.2.tgz +0 -0
- package/components/tryghost-members-api-5.54.2.tgz +0 -0
- package/components/tryghost-members-csv-5.54.2.tgz +0 -0
- package/components/{tryghost-members-events-service-5.54.0.tgz → tryghost-members-events-service-5.54.2.tgz} +0 -0
- package/components/tryghost-members-importer-5.54.2.tgz +0 -0
- package/components/tryghost-members-offers-5.54.2.tgz +0 -0
- package/components/tryghost-members-payments-5.54.2.tgz +0 -0
- package/components/tryghost-members-ssr-5.54.2.tgz +0 -0
- package/components/tryghost-members-stripe-service-5.54.2.tgz +0 -0
- package/components/tryghost-mentions-email-report-5.54.2.tgz +0 -0
- package/components/tryghost-milestones-5.54.2.tgz +0 -0
- package/components/tryghost-minifier-5.54.2.tgz +0 -0
- package/components/tryghost-model-to-domain-event-interceptor-5.54.2.tgz +0 -0
- package/components/tryghost-mw-api-version-mismatch-5.54.2.tgz +0 -0
- package/components/tryghost-mw-cache-control-5.54.2.tgz +0 -0
- package/components/{tryghost-mw-error-handler-5.54.0.tgz → tryghost-mw-error-handler-5.54.2.tgz} +0 -0
- package/components/tryghost-mw-session-from-token-5.54.2.tgz +0 -0
- package/components/{tryghost-mw-update-user-last-seen-5.54.0.tgz → tryghost-mw-update-user-last-seen-5.54.2.tgz} +0 -0
- package/components/tryghost-mw-version-match-5.54.2.tgz +0 -0
- package/components/tryghost-mw-vhost-5.54.2.tgz +0 -0
- package/components/tryghost-oembed-service-5.54.2.tgz +0 -0
- package/components/{tryghost-package-json-5.54.0.tgz → tryghost-package-json-5.54.2.tgz} +0 -0
- package/components/tryghost-post-revisions-5.54.2.tgz +0 -0
- package/components/{tryghost-posts-service-5.54.0.tgz → tryghost-posts-service-5.54.2.tgz} +0 -0
- package/components/tryghost-referrers-5.54.2.tgz +0 -0
- package/components/{tryghost-security-5.54.0.tgz → tryghost-security-5.54.2.tgz} +0 -0
- package/components/tryghost-session-service-5.54.2.tgz +0 -0
- package/components/tryghost-settings-path-manager-5.54.2.tgz +0 -0
- package/components/tryghost-slack-notifications-5.54.2.tgz +0 -0
- package/components/tryghost-staff-service-5.54.2.tgz +0 -0
- package/components/{tryghost-stats-service-5.54.0.tgz → tryghost-stats-service-5.54.2.tgz} +0 -0
- package/components/{tryghost-tiers-5.54.0.tgz → tryghost-tiers-5.54.2.tgz} +0 -0
- package/components/tryghost-update-check-service-5.54.2.tgz +0 -0
- package/components/tryghost-verification-trigger-5.54.2.tgz +0 -0
- package/components/tryghost-version-notifications-data-service-5.54.2.tgz +0 -0
- package/components/{tryghost-webmentions-5.54.0.tgz → tryghost-webmentions-5.54.2.tgz} +0 -0
- 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/screen.css +5 -0
- package/content/themes/casper/page.hbs +26 -24
- package/core/built/admin/assets/{chunk.143.8efdcfa0b261cebe27ff.js → chunk.143.8c62e04ae59bfd9beb9b.js} +5 -5
- package/core/built/admin/assets/{chunk.178.477f1722cea0a8238b37.js → chunk.178.3d7b59b0da7194d453ee.js} +4 -4
- package/core/built/admin/assets/{chunk.976.64982d690133b4ba977b.js → chunk.400.ba8e47ffe962dee508dc.js} +1573 -1570
- package/core/built/admin/assets/ghost-4c37b19a127806313f64fcd759eaa0e2.css +1 -0
- package/core/built/admin/assets/{ghost-8b412e593aa2ccde5e17f6a738f66fa4.js → ghost-5298a1ba0c432899d0c00086354e96dd.js} +71 -75
- package/core/built/admin/assets/ghost-dark-b80a5d657c788174451fd218428af744.css +1 -0
- package/core/built/admin/assets/simplemde/{simplemde-d16ff9bcc5bf6ad4916fb0034a30adb1.js → simplemde-8f638be9b49c6c5fc95902d6e470c1a3.js} +7 -7
- package/core/built/admin/assets/{vendor-4b645d0063c36a91810fae5aefcd4dd1.js → vendor-0d244308df4eb04209cbd5fa6abe358b.js} +582 -608
- package/core/built/admin/index.html +6 -6
- package/core/frontend/services/apps/loader.js +4 -4
- package/core/frontend/services/data/entry-lookup.js +0 -1
- package/core/frontend/services/data/fetch-data.js +15 -10
- package/core/frontend/services/proxy.js +3 -0
- package/core/frontend/services/rendering/format-response.js +27 -1
- package/core/frontend/services/rendering/render-entry.js +1 -1
- package/core/frontend/services/routing/controllers/static.js +10 -8
- package/core/frontend/services/rss/generate-feed.js +0 -1
- package/core/frontend/src/cards/css/signup.css +4 -4
- package/core/server/adapters/storage/LocalStorageBase.js +0 -1
- package/core/server/api/endpoints/authentication.js +0 -1
- package/core/server/api/endpoints/authors-public.js +0 -1
- package/core/server/api/endpoints/db.js +5 -5
- package/core/server/api/endpoints/invites.js +0 -1
- package/core/server/api/endpoints/labels.js +0 -1
- package/core/server/api/endpoints/mail.js +0 -1
- package/core/server/api/endpoints/session.js +0 -1
- package/core/server/api/endpoints/snippets.js +0 -1
- package/core/server/api/endpoints/tags-public.js +0 -1
- package/core/server/api/endpoints/tags.js +0 -1
- package/core/server/api/endpoints/users.js +0 -1
- package/core/server/api/endpoints/utils/permissions.js +0 -1
- package/core/server/api/endpoints/utils/serializers/output/roles.js +17 -12
- package/core/server/api/endpoints/utils/validators/input/invitations.js +0 -1
- package/core/server/api/endpoints/utils/validators/input/invites.js +0 -1
- package/core/server/api/endpoints/utils/validators/input/oembed.js +0 -1
- package/core/server/api/endpoints/utils/validators/input/password_reset.js +0 -1
- package/core/server/api/endpoints/utils/validators/input/settings.js +0 -1
- package/core/server/api/endpoints/utils/validators/input/users.js +0 -1
- package/core/server/data/migrations/hooks/init/before.js +0 -1
- package/core/server/data/migrations/hooks/migrate/afterEach.js +0 -1
- package/core/server/data/migrations/hooks/migrate/beforeEach.js +0 -1
- package/core/server/data/schema/commands.js +0 -1
- package/core/server/data/schema/validator.js +0 -2
- package/core/server/lib/image/BlogIcon.js +2 -3
- package/core/server/lib/image/Gravatar.js +0 -1
- package/core/server/lib/image/ImageSize.js +6 -7
- package/core/server/models/base/listeners.js +3 -3
- package/core/server/models/base/utils.js +0 -1
- package/core/server/models/invite.js +0 -1
- package/core/server/models/post.js +0 -1
- package/core/server/models/role.js +0 -1
- package/core/server/models/user.js +7 -8
- package/core/server/models/webhook.js +0 -1
- package/core/server/services/notifications/Notifications.js +0 -1
- package/core/server/services/permissions/can-this.js +0 -1
- package/core/server/services/permissions/providers.js +0 -1
- package/core/server/services/route-settings/DefaultSettingsManager.js +0 -1
- package/core/server/services/route-settings/RouteSettings.js +3 -2
- package/core/server/services/webhooks/payload.js +0 -1
- package/core/server/web/shared/middleware/api/spam-prevention.js +1 -1
- package/core/shared/labs.js +3 -2
- package/package.json +179 -161
- package/yarn.lock +1631 -3205
- package/components/tryghost-adapter-cache-memory-ttl-5.54.0.tgz +0 -0
- package/components/tryghost-adapter-cache-redis-5.54.0.tgz +0 -0
- package/components/tryghost-api-version-compatibility-service-5.54.0.tgz +0 -0
- package/components/tryghost-audience-feedback-5.54.0.tgz +0 -0
- package/components/tryghost-bootstrap-socket-5.54.0.tgz +0 -0
- package/components/tryghost-collections-5.54.0.tgz +0 -0
- package/components/tryghost-constants-5.54.0.tgz +0 -0
- package/components/tryghost-custom-theme-settings-service-5.54.0.tgz +0 -0
- package/components/tryghost-domain-events-5.54.0.tgz +0 -0
- package/components/tryghost-dynamic-routing-events-5.54.0.tgz +0 -0
- package/components/tryghost-email-analytics-provider-mailgun-5.54.0.tgz +0 -0
- package/components/tryghost-email-analytics-service-5.54.0.tgz +0 -0
- package/components/tryghost-email-content-generator-5.54.0.tgz +0 -0
- package/components/tryghost-email-events-5.54.0.tgz +0 -0
- package/components/tryghost-email-suppression-list-5.54.0.tgz +0 -0
- package/components/tryghost-event-aware-cache-wrapper-5.54.0.tgz +0 -0
- package/components/tryghost-express-dynamic-redirects-5.54.0.tgz +0 -0
- package/components/tryghost-external-media-inliner-5.54.0.tgz +0 -0
- package/components/tryghost-extract-api-key-5.54.0.tgz +0 -0
- package/components/tryghost-html-to-plaintext-5.54.0.tgz +0 -0
- package/components/tryghost-i18n-5.54.0.tgz +0 -0
- package/components/tryghost-importer-handler-content-files-5.54.0.tgz +0 -0
- package/components/tryghost-importer-revue-5.54.0.tgz +0 -0
- package/components/tryghost-in-memory-repository-5.54.0.tgz +0 -0
- package/components/tryghost-link-redirects-5.54.0.tgz +0 -0
- package/components/tryghost-link-replacer-5.54.0.tgz +0 -0
- package/components/tryghost-link-tracking-5.54.0.tgz +0 -0
- package/components/tryghost-mail-events-5.54.0.tgz +0 -0
- package/components/tryghost-mailgun-client-5.54.0.tgz +0 -0
- package/components/tryghost-member-events-5.54.0.tgz +0 -0
- package/components/tryghost-members-api-5.54.0.tgz +0 -0
- package/components/tryghost-members-csv-5.54.0.tgz +0 -0
- package/components/tryghost-members-importer-5.54.0.tgz +0 -0
- package/components/tryghost-members-offers-5.54.0.tgz +0 -0
- package/components/tryghost-members-payments-5.54.0.tgz +0 -0
- package/components/tryghost-members-ssr-5.54.0.tgz +0 -0
- package/components/tryghost-members-stripe-service-5.54.0.tgz +0 -0
- package/components/tryghost-mentions-email-report-5.54.0.tgz +0 -0
- package/components/tryghost-milestones-5.54.0.tgz +0 -0
- package/components/tryghost-minifier-5.54.0.tgz +0 -0
- package/components/tryghost-model-to-domain-event-interceptor-5.54.0.tgz +0 -0
- package/components/tryghost-mw-api-version-mismatch-5.54.0.tgz +0 -0
- package/components/tryghost-mw-cache-control-5.54.0.tgz +0 -0
- package/components/tryghost-mw-session-from-token-5.54.0.tgz +0 -0
- package/components/tryghost-mw-version-match-5.54.0.tgz +0 -0
- package/components/tryghost-mw-vhost-5.54.0.tgz +0 -0
- package/components/tryghost-oembed-service-5.54.0.tgz +0 -0
- package/components/tryghost-post-revisions-5.54.0.tgz +0 -0
- package/components/tryghost-referrers-5.54.0.tgz +0 -0
- package/components/tryghost-session-service-5.54.0.tgz +0 -0
- package/components/tryghost-settings-path-manager-5.54.0.tgz +0 -0
- package/components/tryghost-slack-notifications-5.54.0.tgz +0 -0
- package/components/tryghost-staff-service-5.54.0.tgz +0 -0
- package/components/tryghost-update-check-service-5.54.0.tgz +0 -0
- package/components/tryghost-verification-trigger-5.54.0.tgz +0 -0
- package/components/tryghost-version-notifications-data-service-5.54.0.tgz +0 -0
- package/core/built/admin/assets/ghost-792c3ca38b2564ec779a4513eeb4d10c.css +0 -1
- package/core/built/admin/assets/ghost-dark-0ac006215fbff8210f7bb6d3a8c9a1f9.css +0 -1
- package/core/frontend/public/ghost.min.css +0 -1
- package/core/server/services/collections/PostsDataRepositoryBookshelf.js +0 -23
- /package/core/built/admin/assets/{chunk.976.64982d690133b4ba977b.js.LICENSE.txt → chunk.400.ba8e47ffe962dee508dc.js.LICENSE.txt} +0 -0
- /package/core/built/admin/assets/fonts/{Inter-italic.var.woff2 → Inter-italic.var-1f7ca6383ea7c74a7f5ddd76c3d3cef2.woff2} +0 -0
- /package/core/built/admin/assets/fonts/{Inter-roman.var.woff2 → Inter-roman.var-66c6e40883646a7ad993108b2ce2da32.woff2} +0 -0
- /package/core/built/admin/assets/videos/{logo-loader.mp4 → logo-loader-d91f93ba1dbf0f52a22815b5a571bd31.mp4} +0 -0
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
</style>
|
|
38
38
|
|
|
39
39
|
<link integrity="" rel="stylesheet" href="assets/vendor-3e6947aa681f0fb82b193090e520dc73.css">
|
|
40
|
-
<link integrity="" rel="stylesheet" href="assets/ghost-
|
|
40
|
+
<link integrity="" rel="stylesheet" href="assets/ghost-4c37b19a127806313f64fcd759eaa0e2.css" title="light">
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
</head>
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<div class="ember-load-indicator">
|
|
47
47
|
<div class="gh-loading-content">
|
|
48
48
|
<video width="100" height="100" loop autoplay muted playsinline preload="metadata" style="width: 100px; height: 100px;">
|
|
49
|
-
<source src="assets/videos/logo-loader.mp4" type="video/mp4" />
|
|
49
|
+
<source src="assets/videos/logo-loader-d91f93ba1dbf0f52a22815b5a571bd31.mp4" type="video/mp4" />
|
|
50
50
|
<div class="gh-loading-spinner"></div>
|
|
51
51
|
</video>
|
|
52
52
|
</div>
|
|
@@ -56,9 +56,9 @@
|
|
|
56
56
|
|
|
57
57
|
<div id="ember-basic-dropdown-wormhole"></div>
|
|
58
58
|
|
|
59
|
-
<script src="assets/vendor-
|
|
60
|
-
<script src="assets/chunk.
|
|
61
|
-
<script src="assets/chunk.143.
|
|
62
|
-
<script src="assets/ghost-
|
|
59
|
+
<script src="assets/vendor-0d244308df4eb04209cbd5fa6abe358b.js"></script>
|
|
60
|
+
<script src="assets/chunk.400.ba8e47ffe962dee508dc.js"></script>
|
|
61
|
+
<script src="assets/chunk.143.8c62e04ae59bfd9beb9b.js"></script>
|
|
62
|
+
<script src="assets/ghost-5298a1ba0c432899d0c00086354e96dd.js"></script>
|
|
63
63
|
</body>
|
|
64
64
|
</html>
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
const path = require('path');
|
|
2
2
|
const _ = require('lodash');
|
|
3
|
-
const Promise = require('bluebird');
|
|
4
3
|
const errors = require('@tryghost/errors');
|
|
5
4
|
const tpl = require('@tryghost/tpl');
|
|
6
5
|
const config = require('../../../shared/config');
|
|
@@ -35,7 +34,7 @@ function getAppByName(name) {
|
|
|
35
34
|
|
|
36
35
|
module.exports = {
|
|
37
36
|
// Activate a app and return it
|
|
38
|
-
activateAppByName: function (name) {
|
|
37
|
+
activateAppByName: async function (name) {
|
|
39
38
|
const {app, proxy} = getAppByName(name);
|
|
40
39
|
|
|
41
40
|
// Check for an activate() method on the app.
|
|
@@ -45,8 +44,9 @@ module.exports = {
|
|
|
45
44
|
}));
|
|
46
45
|
}
|
|
47
46
|
|
|
48
|
-
// Wrapping the activate() with a
|
|
47
|
+
// Wrapping the activate() with a Promise because it's possible
|
|
49
48
|
// to not return a promise from it.
|
|
50
|
-
|
|
49
|
+
await Promise.resolve(app.activate(proxy));
|
|
50
|
+
return app;
|
|
51
51
|
}
|
|
52
52
|
};
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
* Dynamically build and execute queries on the API
|
|
4
4
|
*/
|
|
5
5
|
const _ = require('lodash');
|
|
6
|
-
const Promise = require('bluebird');
|
|
7
6
|
|
|
8
7
|
// The default settings for a default post query
|
|
9
8
|
const queryDefaults = {
|
|
@@ -64,7 +63,7 @@ function processQuery(query, slugParam, locals) {
|
|
|
64
63
|
* Fetch data from API helper for controllers.
|
|
65
64
|
*
|
|
66
65
|
* Calls out to get posts per page, builds the final posts query & builds any additional queries
|
|
67
|
-
*
|
|
66
|
+
* Uses Promise.all to handle the queries and ensure concurrent execution.
|
|
68
67
|
* Does a first round of formatting on the response, and returns
|
|
69
68
|
*/
|
|
70
69
|
function fetchData(pathOptions, routerOptions, locals) {
|
|
@@ -72,7 +71,7 @@ function fetchData(pathOptions, routerOptions, locals) {
|
|
|
72
71
|
routerOptions = routerOptions || {};
|
|
73
72
|
|
|
74
73
|
let postQuery = _.cloneDeep(defaultPostQuery);
|
|
75
|
-
let
|
|
74
|
+
let promises = [];
|
|
76
75
|
|
|
77
76
|
if (routerOptions.filter) {
|
|
78
77
|
postQuery.options.filter = routerOptions.filter;
|
|
@@ -92,26 +91,32 @@ function fetchData(pathOptions, routerOptions, locals) {
|
|
|
92
91
|
|
|
93
92
|
// CASE: always fetch post entries
|
|
94
93
|
// The filter can in theory contain a "%s" e.g. filter="primary_tag:%s"
|
|
95
|
-
|
|
94
|
+
promises.push(processQuery(postQuery, pathOptions.slug, locals));
|
|
96
95
|
|
|
97
96
|
// CASE: fetch more data defined by the router e.g. tags, authors - see TaxonomyRouter
|
|
98
97
|
_.each(routerOptions.data, function (query, name) {
|
|
99
98
|
const dataQueryOptions = _.merge(query, defaultDataQueryOptions[name]);
|
|
100
|
-
|
|
99
|
+
promises.push(processQuery(dataQueryOptions, pathOptions.slug, locals));
|
|
101
100
|
});
|
|
102
101
|
|
|
103
|
-
return Promise.
|
|
102
|
+
return Promise.all(promises)
|
|
104
103
|
.then(function formatResponse(results) {
|
|
105
|
-
const response = _.cloneDeep(results
|
|
104
|
+
const response = _.cloneDeep(results[0]);
|
|
106
105
|
|
|
107
106
|
if (routerOptions.data) {
|
|
108
107
|
response.data = {};
|
|
109
108
|
|
|
109
|
+
let resultIndex = 1;
|
|
110
|
+
|
|
110
111
|
_.each(routerOptions.data, function (config, name) {
|
|
111
|
-
|
|
112
|
+
if (results[resultIndex]) {
|
|
113
|
+
response.data[name] = results[resultIndex][config.resource];
|
|
114
|
+
|
|
115
|
+
if (config.type === 'browse') {
|
|
116
|
+
response.data[name].meta = results[resultIndex].meta;
|
|
117
|
+
}
|
|
112
118
|
|
|
113
|
-
|
|
114
|
-
response.data[name].meta = results[name].meta;
|
|
119
|
+
resultIndex = resultIndex + 1;
|
|
115
120
|
}
|
|
116
121
|
});
|
|
117
122
|
}
|
|
@@ -27,6 +27,9 @@ module.exports = {
|
|
|
27
27
|
resource.feature_image_caption = new SafeString(resource.feature_image_caption);
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
|
+
|
|
31
|
+
// some properties are extracted to local template data to force one way of using it
|
|
32
|
+
delete data.show_title_and_feature_image;
|
|
30
33
|
},
|
|
31
34
|
|
|
32
35
|
/**
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const _ = require('lodash');
|
|
2
|
+
const hbs = require('../theme-engine/engine');
|
|
2
3
|
const {prepareContextResource} = require('../proxy');
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -50,7 +51,17 @@ function formatPageResponse(result, pageAsPost = false) {
|
|
|
50
51
|
*
|
|
51
52
|
* @return {Object} containing page variables
|
|
52
53
|
*/
|
|
53
|
-
function formatResponse(post, context) {
|
|
54
|
+
function formatResponse(post, context, locals = {}) {
|
|
55
|
+
// build up @page data for use in templates
|
|
56
|
+
// - done here rather than `update-local-template-options` middleware because
|
|
57
|
+
// we need access to the rendered entry's data which isn't available in middleware
|
|
58
|
+
const pageData = {
|
|
59
|
+
show_title_and_feature_image: true // default behaviour
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// grab data off of the post that will be deleted in prepareContextResource
|
|
63
|
+
const showTitleAndFeatureImage = post.show_title_and_feature_image;
|
|
64
|
+
|
|
54
65
|
prepareContextResource(post);
|
|
55
66
|
|
|
56
67
|
let entry = {
|
|
@@ -60,8 +71,23 @@ function formatResponse(post, context) {
|
|
|
60
71
|
// NOTE: preview context is a special case where the internal preview api returns the post model's type field
|
|
61
72
|
if (context?.includes('page') || (context?.includes('preview') && post.type === 'page')) {
|
|
62
73
|
entry.page = post;
|
|
74
|
+
|
|
75
|
+
// move properties from the page context object onto @page
|
|
76
|
+
// - makes the value available outside of the page context
|
|
77
|
+
// - data is removed from the post object in prepareContextResource so use of @page is forced
|
|
78
|
+
if (showTitleAndFeatureImage !== undefined) {
|
|
79
|
+
pageData.show_title_and_feature_image = showTitleAndFeatureImage;
|
|
80
|
+
}
|
|
63
81
|
}
|
|
64
82
|
|
|
83
|
+
// merge @page into local template options
|
|
84
|
+
const localTemplateOptions = hbs.getLocalTemplateOptions(locals);
|
|
85
|
+
hbs.updateLocalTemplateOptions(locals, _.merge({}, localTemplateOptions, {
|
|
86
|
+
data: {
|
|
87
|
+
page: pageData
|
|
88
|
+
}
|
|
89
|
+
}));
|
|
90
|
+
|
|
65
91
|
return entry;
|
|
66
92
|
}
|
|
67
93
|
|
|
@@ -13,6 +13,6 @@ module.exports = function renderEntry(req, res) {
|
|
|
13
13
|
return function renderEntryClosure(entry) {
|
|
14
14
|
// Format data 2 - 1 is in preview/entry
|
|
15
15
|
// Render
|
|
16
|
-
return renderer(req, res, formatResponse.entry(entry, res.routerOptions?.context));
|
|
16
|
+
return renderer(req, res, formatResponse.entry(entry, res.routerOptions?.context, res.locals));
|
|
17
17
|
};
|
|
18
18
|
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
const _ = require('lodash');
|
|
2
|
-
const Promise = require('bluebird');
|
|
3
2
|
const debug = require('@tryghost/debug')('services:routing:controllers:static');
|
|
4
3
|
const renderer = require('../../rendering');
|
|
5
4
|
|
|
@@ -36,27 +35,30 @@ function processQuery(query, locals) {
|
|
|
36
35
|
module.exports = function staticController(req, res, next) {
|
|
37
36
|
debug('staticController', res.routerOptions);
|
|
38
37
|
|
|
39
|
-
let
|
|
38
|
+
let promises = [];
|
|
40
39
|
|
|
41
|
-
_.each(res.routerOptions.data, function (query
|
|
42
|
-
|
|
40
|
+
_.each(res.routerOptions.data, function (query) {
|
|
41
|
+
promises.push(processQuery(query, res.locals));
|
|
43
42
|
});
|
|
44
43
|
|
|
45
|
-
return Promise.
|
|
44
|
+
return Promise.all(promises)
|
|
46
45
|
.then(function handleResult(result) {
|
|
47
46
|
let response = {};
|
|
48
47
|
|
|
49
48
|
if (res.routerOptions.data) {
|
|
50
49
|
response.data = {};
|
|
51
50
|
|
|
51
|
+
let resultIndex = 0;
|
|
52
52
|
_.each(res.routerOptions.data, function (config, name) {
|
|
53
|
-
response.data[name] = result[
|
|
53
|
+
response.data[name] = result[resultIndex][config.resource];
|
|
54
54
|
|
|
55
55
|
if (config.type === 'browse') {
|
|
56
|
-
response.data[name].meta = result[
|
|
56
|
+
response.data[name].meta = result[resultIndex].meta;
|
|
57
57
|
// @TODO: remove in Ghost 3.0 (see https://github.com/TryGhost/Ghost/issues/10434)
|
|
58
|
-
response.data[name][config.resource] = result[
|
|
58
|
+
response.data[name][config.resource] = result[resultIndex][config.resource];
|
|
59
59
|
}
|
|
60
|
+
|
|
61
|
+
resultIndex = resultIndex + 1;
|
|
60
62
|
});
|
|
61
63
|
}
|
|
62
64
|
|
|
@@ -39,19 +39,19 @@
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
.kg-width-full .kg-signup-card-text {
|
|
42
|
-
padding:
|
|
42
|
+
padding: 12vmax 0;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
.kg-layout-split .kg-signup-card-text {
|
|
46
|
-
padding:
|
|
46
|
+
padding: 12vmax 4vmax;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
.kg-layout-split.kg-content-wide .kg-signup-card-text {
|
|
50
|
-
padding:
|
|
50
|
+
padding: 10vmax 0 10vmax 4vmax;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
.kg-layout-split.kg-content-wide.kg-swapped .kg-signup-card-text {
|
|
54
|
-
padding:
|
|
54
|
+
padding: 10vmax 4vmax 10vmax 0;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
.kg-swapped .kg-signup-card-text {
|
|
@@ -4,7 +4,6 @@ const serveStatic = require('../../../shared/express').static;
|
|
|
4
4
|
|
|
5
5
|
const fs = require('fs-extra');
|
|
6
6
|
const path = require('path');
|
|
7
|
-
const Promise = require('bluebird');
|
|
8
7
|
const moment = require('moment');
|
|
9
8
|
const tpl = require('@tryghost/tpl');
|
|
10
9
|
const logging = require('@tryghost/logging');
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const Promise = require('bluebird');
|
|
2
1
|
const moment = require('moment-timezone');
|
|
3
2
|
const dbBackup = require('../../data/db/backup');
|
|
4
3
|
const exporter = require('../../data/exporter');
|
|
5
4
|
const importer = require('../../data/importer');
|
|
6
5
|
const mediaInliner = require('../../services/media-inliner');
|
|
7
6
|
const errors = require('@tryghost/errors');
|
|
7
|
+
const {pool} = require('@tryghost/promise');
|
|
8
8
|
const models = require('../../models');
|
|
9
9
|
const settingsCache = require('../../../shared/settings-cache');
|
|
10
10
|
|
|
@@ -151,15 +151,15 @@ module.exports = {
|
|
|
151
151
|
|
|
152
152
|
return models.Post.findAll(queryOpts)
|
|
153
153
|
.then((response) => {
|
|
154
|
-
return
|
|
154
|
+
return pool(response.models.map(post => () => {
|
|
155
155
|
return models.Post.destroy(Object.assign({id: post.id}, queryOpts));
|
|
156
|
-
},
|
|
156
|
+
}), 100);
|
|
157
157
|
})
|
|
158
158
|
.then(() => models.Tag.findAll(queryOpts))
|
|
159
159
|
.then((response) => {
|
|
160
|
-
return
|
|
160
|
+
return pool(response.models.map(tag => () => {
|
|
161
161
|
return models.Tag.destroy(Object.assign({id: tag.id}, queryOpts));
|
|
162
|
-
},
|
|
162
|
+
}), 100);
|
|
163
163
|
})
|
|
164
164
|
.catch((err) => {
|
|
165
165
|
throw new errors.InternalServerError({
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const Promise = require('bluebird');
|
|
2
1
|
const debug = require('@tryghost/debug')('api:endpoints:utils:serializers:output:roles');
|
|
3
2
|
const canThis = require('../../../../../services/permissions').canThis;
|
|
4
3
|
|
|
@@ -13,17 +12,23 @@ module.exports = {
|
|
|
13
12
|
roles: roles
|
|
14
13
|
};
|
|
15
14
|
} else {
|
|
16
|
-
return Promise.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
15
|
+
return Promise.all(
|
|
16
|
+
roles.map(async (role) => {
|
|
17
|
+
let permissionResult;
|
|
18
|
+
try {
|
|
19
|
+
await canThis(frame.options.context).assign.role(role);
|
|
20
|
+
permissionResult = role;
|
|
21
|
+
} catch (err) {
|
|
22
|
+
permissionResult = {};
|
|
23
|
+
}
|
|
24
|
+
return permissionResult && permissionResult.name && (permissionResult.name !== 'Owner');
|
|
25
|
+
}))
|
|
26
|
+
.then(results => roles.filter((_v, index) => results[index]))
|
|
27
|
+
.then((filteredRoles) => {
|
|
28
|
+
return frame.response = {
|
|
29
|
+
roles: filteredRoles
|
|
30
|
+
};
|
|
31
|
+
});
|
|
27
32
|
}
|
|
28
33
|
}
|
|
29
34
|
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
/* eslint-disable ghost/filenames/match-regex */
|
|
2
|
-
const Promise = require('bluebird');
|
|
3
2
|
const validator = require('@tryghost/validator');
|
|
4
3
|
const debug = require('@tryghost/debug')('api:endpoints:utils:validators:input:passwordreset');
|
|
5
4
|
const tpl = require('@tryghost/tpl');
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
const sizeOf = require('image-size');
|
|
2
|
-
const Promise = require('bluebird');
|
|
3
2
|
const _ = require('lodash');
|
|
4
3
|
const path = require('path');
|
|
5
4
|
const errors = require('@tryghost/errors');
|
|
@@ -40,12 +39,12 @@ class BlogIcon {
|
|
|
40
39
|
}).height;
|
|
41
40
|
}
|
|
42
41
|
|
|
43
|
-
|
|
42
|
+
resolve({
|
|
44
43
|
width: dimensions.width,
|
|
45
44
|
height: dimensions.height
|
|
46
45
|
});
|
|
47
46
|
} catch (err) {
|
|
48
|
-
|
|
47
|
+
reject(new errors.ValidationError({
|
|
49
48
|
message: tpl(messages.error, {
|
|
50
49
|
file: storagePath,
|
|
51
50
|
error: err.message
|
|
@@ -3,7 +3,6 @@ const sizeOf = require('image-size');
|
|
|
3
3
|
const probeSizeOf = require('probe-image-size');
|
|
4
4
|
const url = require('url');
|
|
5
5
|
const path = require('path');
|
|
6
|
-
const Promise = require('bluebird');
|
|
7
6
|
const _ = require('lodash');
|
|
8
7
|
const errors = require('@tryghost/errors');
|
|
9
8
|
const tpl = require('@tryghost/tpl');
|
|
@@ -59,9 +58,9 @@ class ImageSize {
|
|
|
59
58
|
dimensions.height = _.maxBy(dimensions.images, img => img.height).height;
|
|
60
59
|
}
|
|
61
60
|
|
|
62
|
-
|
|
61
|
+
resolve(dimensions);
|
|
63
62
|
} catch (err) {
|
|
64
|
-
|
|
63
|
+
reject(err);
|
|
65
64
|
}
|
|
66
65
|
});
|
|
67
66
|
}
|
|
@@ -113,9 +112,9 @@ class ImageSize {
|
|
|
113
112
|
const extension = (extensionMatch[1] || '').toLowerCase();
|
|
114
113
|
|
|
115
114
|
if (FETCH_ONLY_FORMATS.includes(extension)) {
|
|
116
|
-
|
|
115
|
+
resolve(this._fetchImageSizeFromUrl(imageUrl));
|
|
117
116
|
} else {
|
|
118
|
-
|
|
117
|
+
resolve(this._probeImageSizeFromUrl(imageUrl));
|
|
119
118
|
}
|
|
120
119
|
});
|
|
121
120
|
}
|
|
@@ -344,12 +343,12 @@ class ImageSize {
|
|
|
344
343
|
}).height;
|
|
345
344
|
}
|
|
346
345
|
|
|
347
|
-
|
|
346
|
+
resolve({
|
|
348
347
|
width: dimensions.width,
|
|
349
348
|
height: dimensions.height
|
|
350
349
|
});
|
|
351
350
|
} catch (err) {
|
|
352
|
-
|
|
351
|
+
reject(new errors.ValidationError({
|
|
353
352
|
message: tpl(messages.invalidDimensions, {
|
|
354
353
|
file: imagePath,
|
|
355
354
|
error: err.message
|
|
@@ -3,7 +3,7 @@ const _ = require('lodash');
|
|
|
3
3
|
const models = require('../../models');
|
|
4
4
|
const logging = require('@tryghost/logging');
|
|
5
5
|
const errors = require('@tryghost/errors');
|
|
6
|
-
const
|
|
6
|
+
const {sequence} = require('@tryghost/promise');
|
|
7
7
|
|
|
8
8
|
// Listen to settings.timezone.edited and settings.notifications.edited to bind extra logic to settings, similar to the bridge and member service
|
|
9
9
|
const events = require('../../lib/common/events');
|
|
@@ -46,7 +46,7 @@ events.on('settings.timezone.edited', function (settingModel, options) {
|
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
await
|
|
49
|
+
await sequence(results.map(post => async () => {
|
|
50
50
|
const newPublishedAtMoment = moment(post.get('published_at')).add(timezoneOffsetDiff, 'minutes');
|
|
51
51
|
|
|
52
52
|
/**
|
|
@@ -73,7 +73,7 @@ events.on('settings.timezone.edited', function (settingModel, options) {
|
|
|
73
73
|
err
|
|
74
74
|
}));
|
|
75
75
|
}
|
|
76
|
-
});
|
|
76
|
+
}));
|
|
77
77
|
} catch (err) {
|
|
78
78
|
logging.error(new errors.InternalServerError({
|
|
79
79
|
err: err,
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
const _ = require('lodash');
|
|
3
3
|
const uuid = require('uuid');
|
|
4
4
|
const moment = require('moment');
|
|
5
|
-
const Promise = require('bluebird');
|
|
6
5
|
const {sequence} = require('@tryghost/promise');
|
|
7
6
|
const tpl = require('@tryghost/tpl');
|
|
8
7
|
const errors = require('@tryghost/errors');
|