ghost 5.53.4 → 5.54.1
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/README.md +1 -1
- package/components/tryghost-adapter-cache-memory-ttl-5.54.1.tgz +0 -0
- package/components/tryghost-adapter-cache-redis-5.54.1.tgz +0 -0
- package/components/{tryghost-adapter-manager-5.53.4.tgz → tryghost-adapter-manager-5.54.1.tgz} +0 -0
- package/components/tryghost-announcement-bar-settings-5.54.1.tgz +0 -0
- package/components/{tryghost-api-framework-5.53.4.tgz → tryghost-api-framework-5.54.1.tgz} +0 -0
- package/components/{tryghost-api-version-compatibility-service-5.53.4.tgz → tryghost-api-version-compatibility-service-5.54.1.tgz} +0 -0
- package/components/tryghost-audience-feedback-5.54.1.tgz +0 -0
- package/components/tryghost-bootstrap-socket-5.54.1.tgz +0 -0
- package/components/tryghost-collections-5.54.1.tgz +0 -0
- package/components/tryghost-constants-5.54.1.tgz +0 -0
- package/components/tryghost-custom-theme-settings-service-5.54.1.tgz +0 -0
- package/components/{tryghost-data-generator-5.53.4.tgz → tryghost-data-generator-5.54.1.tgz} +0 -0
- package/components/tryghost-domain-events-5.54.1.tgz +0 -0
- package/components/tryghost-dynamic-routing-events-5.54.1.tgz +0 -0
- package/components/tryghost-email-analytics-provider-mailgun-5.54.1.tgz +0 -0
- package/components/tryghost-email-analytics-service-5.54.1.tgz +0 -0
- package/components/tryghost-email-content-generator-5.54.1.tgz +0 -0
- package/components/tryghost-email-events-5.54.1.tgz +0 -0
- package/components/tryghost-email-service-5.54.1.tgz +0 -0
- package/components/tryghost-email-suppression-list-5.54.1.tgz +0 -0
- package/components/tryghost-event-aware-cache-wrapper-5.54.1.tgz +0 -0
- package/components/tryghost-express-dynamic-redirects-5.54.1.tgz +0 -0
- package/components/tryghost-external-media-inliner-5.54.1.tgz +0 -0
- package/components/{tryghost-extract-api-key-5.53.4.tgz → tryghost-extract-api-key-5.54.1.tgz} +0 -0
- package/components/{tryghost-html-to-plaintext-5.53.4.tgz → tryghost-html-to-plaintext-5.54.1.tgz} +0 -0
- package/components/tryghost-i18n-5.54.1.tgz +0 -0
- package/components/{tryghost-importer-handler-content-files-5.53.4.tgz → tryghost-importer-handler-content-files-5.54.1.tgz} +0 -0
- package/components/tryghost-importer-revue-5.54.1.tgz +0 -0
- package/components/tryghost-in-memory-repository-5.54.1.tgz +0 -0
- package/components/{tryghost-job-manager-5.53.4.tgz → tryghost-job-manager-5.54.1.tgz} +0 -0
- package/components/tryghost-link-redirects-5.54.1.tgz +0 -0
- package/components/tryghost-link-replacer-5.54.1.tgz +0 -0
- package/components/{tryghost-link-tracking-5.53.4.tgz → tryghost-link-tracking-5.54.1.tgz} +0 -0
- package/components/{tryghost-magic-link-5.53.4.tgz → tryghost-magic-link-5.54.1.tgz} +0 -0
- package/components/tryghost-mail-events-5.54.1.tgz +0 -0
- package/components/tryghost-mailgun-client-5.54.1.tgz +0 -0
- package/components/tryghost-member-attribution-5.54.1.tgz +0 -0
- package/components/tryghost-member-events-5.54.1.tgz +0 -0
- package/components/tryghost-members-api-5.54.1.tgz +0 -0
- package/components/tryghost-members-csv-5.54.1.tgz +0 -0
- package/components/{tryghost-members-events-service-5.53.4.tgz → tryghost-members-events-service-5.54.1.tgz} +0 -0
- package/components/tryghost-members-importer-5.54.1.tgz +0 -0
- package/components/tryghost-members-offers-5.54.1.tgz +0 -0
- package/components/tryghost-members-payments-5.54.1.tgz +0 -0
- package/components/tryghost-members-ssr-5.54.1.tgz +0 -0
- package/components/tryghost-members-stripe-service-5.54.1.tgz +0 -0
- package/components/tryghost-mentions-email-report-5.54.1.tgz +0 -0
- package/components/tryghost-milestones-5.54.1.tgz +0 -0
- package/components/tryghost-minifier-5.54.1.tgz +0 -0
- package/components/tryghost-model-to-domain-event-interceptor-5.54.1.tgz +0 -0
- package/components/tryghost-mw-api-version-mismatch-5.54.1.tgz +0 -0
- package/components/tryghost-mw-cache-control-5.54.1.tgz +0 -0
- package/components/{tryghost-mw-error-handler-5.53.4.tgz → tryghost-mw-error-handler-5.54.1.tgz} +0 -0
- package/components/tryghost-mw-session-from-token-5.54.1.tgz +0 -0
- package/components/tryghost-mw-update-user-last-seen-5.54.1.tgz +0 -0
- package/components/tryghost-mw-version-match-5.54.1.tgz +0 -0
- package/components/tryghost-mw-vhost-5.54.1.tgz +0 -0
- package/components/tryghost-oembed-service-5.54.1.tgz +0 -0
- package/components/{tryghost-package-json-5.53.4.tgz → tryghost-package-json-5.54.1.tgz} +0 -0
- package/components/tryghost-post-revisions-5.54.1.tgz +0 -0
- package/components/tryghost-posts-service-5.54.1.tgz +0 -0
- package/components/tryghost-referrers-5.54.1.tgz +0 -0
- package/components/{tryghost-security-5.53.4.tgz → tryghost-security-5.54.1.tgz} +0 -0
- package/components/tryghost-session-service-5.54.1.tgz +0 -0
- package/components/tryghost-settings-path-manager-5.54.1.tgz +0 -0
- package/components/tryghost-slack-notifications-5.54.1.tgz +0 -0
- package/components/tryghost-staff-service-5.54.1.tgz +0 -0
- package/components/{tryghost-stats-service-5.53.4.tgz → tryghost-stats-service-5.54.1.tgz} +0 -0
- package/components/{tryghost-tiers-5.53.4.tgz → tryghost-tiers-5.54.1.tgz} +0 -0
- package/components/tryghost-update-check-service-5.54.1.tgz +0 -0
- package/components/{tryghost-verification-trigger-5.53.4.tgz → tryghost-verification-trigger-5.54.1.tgz} +0 -0
- package/components/tryghost-version-notifications-data-service-5.54.1.tgz +0 -0
- package/components/{tryghost-webmentions-5.53.4.tgz → tryghost-webmentions-5.54.1.tgz} +0 -0
- 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 +1 -13
- package/content/themes/casper/assets/css/screen.css +18 -0
- package/content/themes/casper/default.hbs +4 -0
- package/content/themes/casper/package.json +1 -1
- package/content/themes/casper/page.hbs +26 -24
- package/core/boot.js +0 -8
- 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/mappers/posts.js +1 -1
- package/core/server/api/endpoints/utils/serializers/output/roles.js +17 -12
- package/core/server/api/endpoints/utils/serializers/output/utils/clean.js +4 -0
- 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/importer/importers/data/PostsImporter.js +2 -2
- 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/migrations/versions/5.54/2023-07-07-11-57-add-show-title-and-feature-image-column-to-posts.js +7 -0
- package/core/server/data/schema/commands.js +0 -1
- package/core/server/data/schema/schema.js +1 -0
- 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 +2 -2
- 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/collections/intercept-events.js +10 -0
- package/core/server/services/collections/service.js +7 -7
- 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 +5 -2
- package/package.json +181 -161
- package/yarn.lock +1739 -3319
- package/components/tryghost-adapter-cache-memory-ttl-5.53.4.tgz +0 -0
- package/components/tryghost-adapter-cache-redis-5.53.4.tgz +0 -0
- package/components/tryghost-announcement-bar-settings-5.53.4.tgz +0 -0
- package/components/tryghost-audience-feedback-5.53.4.tgz +0 -0
- package/components/tryghost-bootstrap-socket-5.53.4.tgz +0 -0
- package/components/tryghost-collections-5.53.4.tgz +0 -0
- package/components/tryghost-constants-5.53.4.tgz +0 -0
- package/components/tryghost-custom-theme-settings-service-5.53.4.tgz +0 -0
- package/components/tryghost-domain-events-5.53.4.tgz +0 -0
- package/components/tryghost-dynamic-routing-events-5.53.4.tgz +0 -0
- package/components/tryghost-email-analytics-provider-mailgun-5.53.4.tgz +0 -0
- package/components/tryghost-email-analytics-service-5.53.4.tgz +0 -0
- package/components/tryghost-email-content-generator-5.53.4.tgz +0 -0
- package/components/tryghost-email-events-5.53.4.tgz +0 -0
- package/components/tryghost-email-service-5.53.4.tgz +0 -0
- package/components/tryghost-email-suppression-list-5.53.4.tgz +0 -0
- package/components/tryghost-event-aware-cache-wrapper-5.53.4.tgz +0 -0
- package/components/tryghost-express-dynamic-redirects-5.53.4.tgz +0 -0
- package/components/tryghost-external-media-inliner-5.53.4.tgz +0 -0
- package/components/tryghost-i18n-5.53.4.tgz +0 -0
- package/components/tryghost-importer-revue-5.53.4.tgz +0 -0
- package/components/tryghost-in-memory-repository-5.53.4.tgz +0 -0
- package/components/tryghost-link-redirects-5.53.4.tgz +0 -0
- package/components/tryghost-link-replacer-5.53.4.tgz +0 -0
- package/components/tryghost-mail-events-5.53.4.tgz +0 -0
- package/components/tryghost-mailgun-client-5.53.4.tgz +0 -0
- package/components/tryghost-member-attribution-5.53.4.tgz +0 -0
- package/components/tryghost-member-events-5.53.4.tgz +0 -0
- package/components/tryghost-members-api-5.53.4.tgz +0 -0
- package/components/tryghost-members-csv-5.53.4.tgz +0 -0
- package/components/tryghost-members-importer-5.53.4.tgz +0 -0
- package/components/tryghost-members-offers-5.53.4.tgz +0 -0
- package/components/tryghost-members-payments-5.53.4.tgz +0 -0
- package/components/tryghost-members-ssr-5.53.4.tgz +0 -0
- package/components/tryghost-members-stripe-service-5.53.4.tgz +0 -0
- package/components/tryghost-mentions-email-report-5.53.4.tgz +0 -0
- package/components/tryghost-milestones-5.53.4.tgz +0 -0
- package/components/tryghost-minifier-5.53.4.tgz +0 -0
- package/components/tryghost-mw-api-version-mismatch-5.53.4.tgz +0 -0
- package/components/tryghost-mw-cache-control-5.53.4.tgz +0 -0
- package/components/tryghost-mw-session-from-token-5.53.4.tgz +0 -0
- package/components/tryghost-mw-update-user-last-seen-5.53.4.tgz +0 -0
- package/components/tryghost-mw-version-match-5.53.4.tgz +0 -0
- package/components/tryghost-mw-vhost-5.53.4.tgz +0 -0
- package/components/tryghost-oembed-service-5.53.4.tgz +0 -0
- package/components/tryghost-post-revisions-5.53.4.tgz +0 -0
- package/components/tryghost-posts-service-5.53.4.tgz +0 -0
- package/components/tryghost-referrers-5.53.4.tgz +0 -0
- package/components/tryghost-session-service-5.53.4.tgz +0 -0
- package/components/tryghost-settings-path-manager-5.53.4.tgz +0 -0
- package/components/tryghost-slack-notifications-5.53.4.tgz +0 -0
- package/components/tryghost-staff-service-5.53.4.tgz +0 -0
- package/components/tryghost-update-check-service-5.53.4.tgz +0 -0
- package/components/tryghost-version-notifications-data-service-5.53.4.tgz +0 -0
- package/core/built/admin/assets/chunk.143.f2d9c8138f58822ff602.js +0 -35
- package/core/built/admin/assets/chunk.178.61bd07fdecafaa04e917.js +0 -11
- package/core/built/admin/assets/chunk.976.64982d690133b4ba977b.js +0 -12712
- package/core/built/admin/assets/chunk.976.64982d690133b4ba977b.js.LICENSE.txt +0 -250
- package/core/built/admin/assets/codemirror/codemirror-31d641cdd0cb3388688402609608cb10.js +0 -1440
- package/core/built/admin/assets/fonts/Inter-italic.var.woff2 +0 -0
- package/core/built/admin/assets/fonts/Inter-roman.var.woff2 +0 -0
- package/core/built/admin/assets/ghost-69a3b39781fc4aca282abd2ebf232e60.js +0 -6643
- package/core/built/admin/assets/ghost-7ed28c8f2ec8aaa157a0d8e693c4173d.css +0 -1
- package/core/built/admin/assets/ghost-dark-d8ff14f0db8a03f04d342792d7126348.css +0 -1
- package/core/built/admin/assets/img/404-ghost-e112dbfadde79cf30dbca8e8cfe7a21a.png +0 -0
- package/core/built/admin/assets/img/404-ghost@2x-34c1119ed15cc3ea71e4406f80c8e810.png +0 -0
- package/core/built/admin/assets/img/amp-d7b72aae3315fda95921fb575dfca100.svg +0 -4
- package/core/built/admin/assets/img/apple-touch-icon-74680e326a7e87b159d366c7d4fb3d4b.png +0 -0
- package/core/built/admin/assets/img/buffer-db31f6b5dc27a298050e16312619c586.png +0 -0
- package/core/built/admin/assets/img/community-background-3f501ff1d764d0cb81f7c2cbacfc6503.jpg +0 -0
- package/core/built/admin/assets/img/disqus-43503a3fa4f38dc8c61c7358b811f343.svg +0 -4
- package/core/built/admin/assets/img/favicon-a9c6dbdcdc3ae568f4e0dad92149a0e3.ico +0 -0
- package/core/built/admin/assets/img/firstpromoter-ce8b5219e5b5ebda463bd60396c6ab81.png +0 -0
- package/core/built/admin/assets/img/footer-marketplace-bg-572b6c6486a7e26316954d599eaa9f30.png +0 -0
- package/core/built/admin/assets/img/github-c3a739c59df26fed12c10ffb00b33bd4.svg +0 -4
- package/core/built/admin/assets/img/google-analytics-e05fc1327377939663407200d4978eba.png +0 -0
- package/core/built/admin/assets/img/google-docs-1e42cc272fc088da49e4b0ddfb01b006.svg +0 -6
- package/core/built/admin/assets/img/large-ac90af7c93a4b47e8d956fa9fef31d9d.png +0 -0
- package/core/built/admin/assets/img/latest-posts-1-ea1e669b275f2c7dfa23abd4be8d7ad5.png +0 -0
- package/core/built/admin/assets/img/latest-posts-2-e6b0809353ac31642839a6f3bab0d4e8.png +0 -0
- package/core/built/admin/assets/img/latest-posts-3-ac8c2e95dd9adecb9029a7b037ed7f15.png +0 -0
- package/core/built/admin/assets/img/loadingcat-5f501b7a8c7bd54b253463e261c99634.gif +0 -0
- package/core/built/admin/assets/img/logos/ghost-logo-black-1-fb561a374422b405ec90fa586b05ebdf.png +0 -0
- package/core/built/admin/assets/img/logos/orb-black-1-32b72766be2164fdea6ab2565fb1c137.png +0 -0
- package/core/built/admin/assets/img/logos/orb-black-2-4b0baef1ec34816af6f3fbede7ab191d.png +0 -0
- package/core/built/admin/assets/img/logos/orb-black-3-9780c5e9991b69ed2303b526aa3e3252.png +0 -0
- package/core/built/admin/assets/img/logos/orb-black-4-d9c3caacb8d2ba98a52517ff2971433c.png +0 -0
- package/core/built/admin/assets/img/logos/orb-black-5-063a200f749e09c587b9443ffd2c4cfa.png +0 -0
- package/core/built/admin/assets/img/logos/orb-pink-3-a66abc6df2b6ab64d1459a6535b725cd.png +0 -0
- package/core/built/admin/assets/img/mailchimp-f22b1e130aac764965b9306d7265a6b2.svg +0 -8
- package/core/built/admin/assets/img/marketing/analytics-1-aa2d72c4e7347a3cb5666d07916b92aa.jpg +0 -0
- package/core/built/admin/assets/img/marketing/analytics-2-389d53f80041ff98111cce79facf66b8.jpg +0 -0
- package/core/built/admin/assets/img/marketing/members-1-8b89a1f48fe7b336754e91a429531f65.jpg +0 -0
- package/core/built/admin/assets/img/marketing/members-2-791205c82d5cf221f8c99a74f9ee1739.jpg +0 -0
- package/core/built/admin/assets/img/marketing/offers-1-f2e1b653c4d5bb90eea9d7a2862530f9.jpg +0 -0
- package/core/built/admin/assets/img/marketing/offers-2-28a225d34cc39d133748431536961d00.jpg +0 -0
- package/core/built/admin/assets/img/marketing/offers-3-2094c91ab21a16c37fbe6ec16c140160.jpg +0 -0
- package/core/built/admin/assets/img/medium-fef07013cffd5c45a655a250912a0ad7.png +0 -0
- package/core/built/admin/assets/img/mentions-background-fa39b7597e875c165b12190eda606993.png +0 -0
- package/core/built/admin/assets/img/orb-squircle-645fd62e92a80557905c0cb60874b699.png +0 -0
- package/core/built/admin/assets/img/patreon-b19a5e6418a72977a16b30039d374d04.svg +0 -7
- package/core/built/admin/assets/img/paypal-38e9448ce7549ea4caf8e7753ae661d6.svg +0 -8
- package/core/built/admin/assets/img/pintura-75cf0fd7cbc6ca3c8fbdb3f1b31f730b.png +0 -0
- package/core/built/admin/assets/img/pintura-screenshot-7668975389aac80607ec489b48b75e0f.png +0 -0
- package/core/built/admin/assets/img/plausible-1b754a95e19a6d935e0bc8bf6790ba56.png +0 -0
- package/core/built/admin/assets/img/resource-1-722f202795856e4a5596c8a3b7bedc43.jpg +0 -0
- package/core/built/admin/assets/img/slackicon-406aadea8994ca2ddee9c1d7157208db.png +0 -0
- package/core/built/admin/assets/img/small-b90396925485f17b2ca82c31be42de5f.png +0 -0
- package/core/built/admin/assets/img/stripe-3af79c77413d7e58d0322c1de5bfdb8e.svg +0 -1
- package/core/built/admin/assets/img/themes/Alto-0dfe76694ed222d6d96fc9c8db979a38.png +0 -0
- package/core/built/admin/assets/img/themes/Bulletin-d66dec818ad0ba2965dd7eb3130c621c.png +0 -0
- package/core/built/admin/assets/img/themes/Casper-9a0ce71df3a1c589c1414ad2aa5b8aeb.png +0 -0
- package/core/built/admin/assets/img/themes/Dawn-302fbfdbc352098a256137159bd83dd8.png +0 -0
- package/core/built/admin/assets/img/themes/Digest-698e78d8e8481daff8ae4a8647528dc9.png +0 -0
- package/core/built/admin/assets/img/themes/Dope-d099dfca697adae16baa76f89520c5b3.png +0 -0
- package/core/built/admin/assets/img/themes/Ease-7075f809892f10c58892e15a57a4aae4.png +0 -0
- package/core/built/admin/assets/img/themes/Edge-1e5e0eec6941d7bdca02cebb66187357.png +0 -0
- package/core/built/admin/assets/img/themes/Edition-10111a2b8458168dcff81b7fb151be70.png +0 -0
- package/core/built/admin/assets/img/themes/Episode-e4c86d1f75ef1d8a77791d7fd519fdd4.png +0 -0
- package/core/built/admin/assets/img/themes/Headline-f70eaf49b9fcae1ddfe3d4496d8be54d.png +0 -0
- package/core/built/admin/assets/img/themes/Journal-07d35b2311501d2738bad1907ba2f7e1.png +0 -0
- package/core/built/admin/assets/img/themes/London-4e042390da16fecef947f3a7001d03db.png +0 -0
- package/core/built/admin/assets/img/themes/Ruby-b896885448e0f28ca62c6dcd56c732aa.png +0 -0
- package/core/built/admin/assets/img/themes/Solo-0292eb9ae0ca7b578cff50824d40cc86.png +0 -0
- package/core/built/admin/assets/img/themes/Taste-a24d2a786900d9caff7e773ca0040991.png +0 -0
- package/core/built/admin/assets/img/themes/Wave-b98fadfd3ed16e8b2e383dd8e8e5dca2.png +0 -0
- package/core/built/admin/assets/img/touch-icon-ipad-2e78629d62ad05746f980f14623dfadb.png +0 -0
- package/core/built/admin/assets/img/touch-icon-iphone-93ed4382d391be9180093fd77ce8f410.png +0 -0
- package/core/built/admin/assets/img/twitter-7a7a0ba12d9b5bfb8a2058764a827c31.svg +0 -4
- package/core/built/admin/assets/img/typeform-9f23f8712d776a7515594676285266f5.svg +0 -7
- package/core/built/admin/assets/img/ulysses-3c66b59fb45c285bf336b4b613dc86e4.png +0 -0
- package/core/built/admin/assets/img/unsplash-404-71ab3705c9920a9706bb822c3d7e34d1.png +0 -0
- package/core/built/admin/assets/img/unsplash-5b329eef0b11447b4117eaf817ebad6f.svg +0 -4
- package/core/built/admin/assets/img/user-cover-e8f42b12b5fcba292a8b5dfa81e13dd2.png +0 -0
- package/core/built/admin/assets/img/user-image-639a88b784fb5f10964be8b975ca9fdf.png +0 -0
- package/core/built/admin/assets/img/zapier-bf93bc440a3fd43b73489a63c215cdc7.svg +0 -4
- package/core/built/admin/assets/img/zapier-logo-a125f24313dfe01ef49af01fc90061fb.svg +0 -4
- package/core/built/admin/assets/img/zero-bounce-ee799eddb1f88e33ab8c462858cbfed9.png +0 -0
- package/core/built/admin/assets/simplemde/simplemde-d16ff9bcc5bf6ad4916fb0034a30adb1.js +0 -1874
- package/core/built/admin/assets/vendor-3e6947aa681f0fb82b193090e520dc73.css +0 -1512
- package/core/built/admin/assets/vendor-c85ef50819caa584c404a0e3dcaa4e69.js +0 -14096
- package/core/built/admin/assets/videos/logo-loader.mp4 +0 -0
- package/core/built/admin/index.html +0 -64
- package/core/frontend/public/ghost.min.css +0 -1
- package/core/server/services/collections/PostsDataRepositoryBookshelf.js +0 -23
- package/core/server/services/collections/model-to-domain-events-bridge.js +0 -74
|
@@ -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({
|
|
@@ -29,7 +29,7 @@ module.exports = async (model, frame, options = {}) => {
|
|
|
29
29
|
if (typeof model.toJSON === 'function') {
|
|
30
30
|
jsonModel = model.toJSON(frame.options);
|
|
31
31
|
} else {
|
|
32
|
-
// This is to
|
|
32
|
+
// This is to satisfy the interface which extraAttrs needs
|
|
33
33
|
model = {
|
|
34
34
|
id: jsonModel.id,
|
|
35
35
|
get(attr) {
|
|
@@ -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');
|
|
@@ -237,7 +237,7 @@ class PostsImporter extends BaseImporter {
|
|
|
237
237
|
// CASE 1: you are importing old editor posts
|
|
238
238
|
// CASE 2: you are importing Koenig Beta posts
|
|
239
239
|
// CASE 3: you are importing Koenig 2.0 posts
|
|
240
|
-
if (model.mobiledoc) {
|
|
240
|
+
if (model.mobiledoc && !model.lexical) {
|
|
241
241
|
let mobiledoc;
|
|
242
242
|
|
|
243
243
|
try {
|
|
@@ -272,7 +272,7 @@ class PostsImporter extends BaseImporter {
|
|
|
272
272
|
|
|
273
273
|
model.mobiledoc = JSON.stringify(mobiledoc);
|
|
274
274
|
model.html = mobiledocLib.mobiledocHtmlRenderer.render(JSON.parse(model.mobiledoc));
|
|
275
|
-
} else if (model.html) {
|
|
275
|
+
} else if (model.html && !model.lexical) {
|
|
276
276
|
model.mobiledoc = JSON.stringify(mobiledocLib.htmlToMobiledocConverter(model.html));
|
|
277
277
|
model.html = mobiledocLib.mobiledocHtmlRenderer.render(JSON.parse(model.mobiledoc));
|
|
278
278
|
}
|
|
@@ -91,6 +91,7 @@ module.exports = {
|
|
|
91
91
|
custom_template: {type: 'string', maxlength: 100, nullable: true},
|
|
92
92
|
canonical_url: {type: 'text', maxlength: 2000, nullable: true},
|
|
93
93
|
newsletter_id: {type: 'string', maxlength: 24, nullable: true, references: 'newsletters.id'},
|
|
94
|
+
show_title_and_feature_image: {type: 'boolean', nullable: false, defaultTo: true},
|
|
94
95
|
'@@UNIQUE_CONSTRAINTS@@': [
|
|
95
96
|
['slug', 'type']
|
|
96
97
|
]
|
|
@@ -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');
|
|
@@ -94,7 +93,8 @@ Post = ghostBookshelf.Model.extend({
|
|
|
94
93
|
type: 'post',
|
|
95
94
|
tiers,
|
|
96
95
|
visibility: visibility,
|
|
97
|
-
email_recipient_filter: 'all'
|
|
96
|
+
email_recipient_filter: 'all',
|
|
97
|
+
show_title_and_feature_image: true
|
|
98
98
|
};
|
|
99
99
|
},
|
|
100
100
|
|