ghost 6.58.0 → 6.59.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/components/tryghost-adapter-base-scheduling-0.2.2.tgz +0 -0
- package/components/tryghost-adapter-base-sso-0.1.2.tgz +0 -0
- package/components/tryghost-i18n-0.0.0.tgz +0 -0
- package/components/tryghost-kg-default-nodes-2.2.0.tgz +0 -0
- package/components/tryghost-kg-html-to-lexical-1.4.0.tgz +0 -0
- package/components/tryghost-kg-lexical-html-renderer-1.5.0.tgz +0 -0
- package/content/themes/casper/.github/workflows/test.yml +11 -1
- package/content/themes/casper/AGENTS.md +25 -0
- package/content/themes/casper/assets/built/screen.css +1 -1
- package/content/themes/casper/assets/css/screen.css +15 -1
- package/content/themes/casper/gulpfile.js +3 -0
- package/content/themes/casper/package.json +8 -8
- package/content/themes/source/.gitattributes +5 -0
- package/content/themes/source/.github/workflows/test.yml +39 -0
- package/content/themes/source/AGENTS.md +25 -0
- package/content/themes/source/README.md +33 -4
- package/content/themes/source/assets/built/screen.css +1 -1
- package/content/themes/source/assets/css/screen.css +15 -0
- package/content/themes/source/gulpfile.js +6 -3
- package/content/themes/source/package.json +13 -10
- package/content/themes/source/pnpm-workspace.yaml +3 -0
- package/core/boot.js +11 -4
- package/core/built/admin/assets/Combination-BCm9FL4o.js +41 -0
- package/core/built/admin/assets/about-BdSCpjXG.js +1 -0
- package/core/built/admin/assets/account-migration-BpKAqo8k.js +1 -0
- package/core/built/admin/assets/activitypub/{account-migration-BpDeIF3G.js → account-migration-DVnYS1XG.js} +8 -8
- package/core/built/admin/assets/activitypub/activitypub.js +2 -2
- package/core/built/admin/assets/activitypub/{bluesky-sharing-aPMtrS3L.js → bluesky-sharing-DLVeE9ii.js} +31 -31
- package/core/built/admin/assets/activitypub/{content-formatters-BORfuA9G.js → content-formatters-DCsVic-t.js} +2 -2
- package/core/built/admin/assets/activitypub/{dist-ByFmDSNP2.js → dist-ByFmDSNP.js} +1 -1
- package/core/built/admin/assets/activitypub/{domain-CPdiB27_.js → domain-rrvDLfnK.js} +8 -8
- package/core/built/admin/assets/activitypub/{edit-profile-BY2PawIe.js → edit-profile-VT-piVxq.js} +23 -23
- package/core/built/admin/assets/activitypub/{explore-Sp9bgAwq.js → explore-DZg3m48P.js} +14 -14
- package/core/built/admin/assets/activitypub/{feed-BjtF4ohL.js → feed-BJqQvDMI.js} +41 -41
- package/core/built/admin/assets/activitypub/{field-BDOYVTg6.js → field-BezS4-1J.js} +2 -2
- package/core/built/admin/assets/activitypub/inbox-Uf0GVrI_.js +1284 -0
- package/core/built/admin/assets/activitypub/{label-1jhN-qhD.js → label-CZ6if4zK.js} +2 -2
- package/core/built/admin/assets/activitypub/layout-DNuYT4Gu.js +1 -0
- package/core/built/admin/assets/activitypub/moderation-CP6mDVky.js +340 -0
- package/core/built/admin/assets/activitypub/{note-nr_m_5yb.js → note-BlFkye2g.js} +16 -16
- package/core/built/admin/assets/activitypub/{notifications-BdcyivbT.js → notifications-GGTrGEdu.js} +163 -126
- package/core/built/admin/assets/activitypub/{preferences-CNqy1x9C.js → preferences-CjZXrZqr.js} +1550 -1551
- package/core/built/admin/assets/activitypub/{profile-DlY4rhbO.js → profile-CcXYxydm.js} +248 -248
- package/core/built/admin/assets/activitypub/{routes-CEHdEZzS.js → routes-nHCKlZl-.js} +1971 -1747
- package/core/built/admin/assets/activitypub/settings-pDzybcb3.js +315 -0
- package/core/built/admin/assets/activitypub/{site-CtBUCPBz.js → site-BZF0F8LN.js} +101 -101
- package/core/built/admin/assets/activitypub/{step-1-D9jGWyAy.js → step-1-C-Ns1Tfg.js} +3 -3
- package/core/built/admin/assets/activitypub/{step-3-KpUqpGWi.js → step-3-rDMNGmLg.js} +8 -8
- package/core/built/admin/assets/activitypub/{tabs-DvlsxTCI.js → tabs-CDjh3_Jp.js} +198 -198
- package/core/built/admin/assets/activitypub/{topic-filter-CIN1E2jg.js → topic-filter-CmTc8hpN.js} +2 -2
- package/core/built/admin/assets/activitypub/{use-activity-pub-queries-CATFd6YV.js → use-activity-pub-queries-DUDEdSdR.js} +286 -243
- package/core/built/admin/assets/activitypub/{use-reply-chain-data-DJ0vhA8V.js → use-reply-chain-data-TunGtmJl.js} +14 -14
- package/core/built/admin/assets/add-integration-modal-CXRQi1x0.js +1 -0
- package/core/built/admin/assets/add-newsletter-modal-t447KRYz.js +1 -0
- package/core/built/admin/assets/add-recommendation-modal-D882MdnR.js +1 -0
- package/core/built/admin/assets/{analytics-BC2oR8ay.js → analytics-Dj-WlzPf.js} +1 -1
- package/core/built/admin/assets/announcement-bar-modal-CwHKKw-a.js +1 -0
- package/core/built/admin/assets/api-keys-Boy5pLbD.js +1 -0
- package/core/built/admin/assets/audience-Cc40y7zQ.js +1 -0
- package/core/built/admin/assets/automations-DNLK5Udr.js +1 -0
- package/core/built/admin/assets/bluesky-sharing-Cm4aFaOl.js +1 -0
- package/core/built/admin/assets/breadcrumb-CcFr_ltt.js +1 -0
- package/core/built/admin/assets/button-BshWPHvn.js +1 -0
- package/core/built/admin/assets/chart-helpers-BsbzoWhK.js +1 -0
- package/core/built/admin/assets/{checkbox-LmClhqcS.js → checkbox-1G6KfK2q.js} +1 -1
- package/core/built/admin/assets/chunk-KS7C4IRE-DCsL4i4D.js +4 -0
- package/core/built/admin/assets/{chunk.408.1a258af360eb8d905508.js → chunk.301.5673a0caf7c49bb00212.js} +3 -3
- package/core/built/admin/assets/{chunk.524.4c693c3a00ac91df34fa.js → chunk.524.86db0d945468c852374b.js} +4 -4
- package/core/built/admin/assets/{chunk.582.20b600e329e58d12d7c2.js → chunk.582.c2f6216d3c4af303e236.js} +6 -6
- package/core/built/admin/assets/{code-editor-view-DqTOUnbM.js → code-editor-view-BVjtWyst.js} +1 -1
- package/core/built/admin/assets/{code-editor-view-bA0lfxUL.js → code-editor-view-y_zVfmCa.js} +1 -1
- package/core/built/admin/assets/color-picker-XEMPgNJE.js +3 -0
- package/core/built/admin/assets/{color-picker-field-Cv9GOJQZ.js → color-picker-field-BhplXcy5.js} +1 -1
- package/core/built/admin/assets/combobox-CRMJrvcQ.js +1 -0
- package/core/built/admin/assets/command-151T2eRx.js +1 -0
- package/core/built/admin/assets/comments-Bjbl9toF.js +1 -0
- package/core/built/admin/assets/confirmation-context-QmFxSjWy.js +1 -0
- package/core/built/admin/assets/{content-api-modal-BOFWRUkC.js → content-api-modal-CpeABXne.js} +1 -1
- package/core/built/admin/assets/{copy-field-8biQvNMD.js → copy-field-CglgRZyG.js} +1 -1
- package/core/built/admin/assets/custom-field-type-option-DSyJw4T4.js +1 -0
- package/core/built/admin/assets/custom-integration-modal-DWB9bRVp.js +1 -0
- package/core/built/admin/assets/date-range-select-kaKtab5O.js +1 -0
- package/core/built/admin/assets/design-and-theme-modal-86s2AaZ-.js +23 -0
- package/core/built/admin/assets/dirty-confirm-dialog-CTFdXXy7.js +1 -0
- package/core/built/admin/assets/disabled-sources-indicator-BFyCxUOx.js +1 -0
- package/core/built/admin/assets/dist-C1-Oy3Db.js +1 -0
- package/core/built/admin/assets/dist-CJJqYPep.js +1 -0
- package/core/built/admin/assets/dist-CNlMj7ML.js +1 -0
- package/core/built/admin/assets/dist-Kll2twSG.js +1 -0
- package/core/built/admin/assets/domain-BOoMvBG3.js +1 -0
- package/core/built/admin/assets/{dropzone-B21Entqz.js → dropzone-B6KWzsrb.js} +2 -2
- package/core/built/admin/assets/edit-profile-BagrYOrN.js +1 -0
- package/core/built/admin/assets/editor-AaJjqbpk.js +8 -0
- package/core/built/admin/assets/embed-signup-form-modal-B8L95KwR.js +8 -0
- package/core/built/admin/assets/explore-xbykZTlO.js +1 -0
- package/core/built/admin/assets/feed-BAHSipWv.js +1 -0
- package/core/built/admin/assets/{field-BQqLTgHM.js → field-kJYZ2T3C.js} +1 -1
- package/core/built/admin/assets/{filter-sources-FgqoUIL7.js → filter-sources-QeqFGNRB.js} +1 -1
- package/core/built/admin/assets/{filters-D0uIMD8n.js → filters-By5KQeV6.js} +1 -1
- package/core/built/admin/assets/filters-DtYpAkDd.js +1 -0
- package/core/built/admin/assets/first-promoter-modal-8A02oyjA.js +1 -0
- package/core/built/admin/assets/{ghost-ba408063a5922b458b4a8f216cf23251.js → ghost-f110822e67868c9fdf9a6c23754b2559.js} +9 -8
- package/core/built/admin/assets/gift-link-modal-DbYCyuhF.js +1 -0
- package/core/built/admin/assets/global-data-context-gAMDH9u1.js +1 -0
- package/core/built/admin/assets/growth-BSOxJGey.js +3 -0
- package/core/built/admin/assets/growth-BZTjURq5.js +1 -0
- package/core/built/admin/assets/history-modal-CCgWtlZE.js +1 -0
- package/core/built/admin/assets/html-field-BQC7XyLA.js +1 -0
- package/core/built/admin/assets/iframe-buffering-DnOlWTD4.js +1 -0
- package/core/built/admin/assets/{images-3cQgwfTD.js → images-D5UKr2SG.js} +1 -1
- package/core/built/admin/assets/{inbox-Dz_JblyJ.js → inbox-DvN15_YH.js} +45 -39
- package/core/built/admin/assets/index-BJz9Zlsc.js +67 -0
- package/core/built/admin/assets/index-Dg8cdR8E.css +1 -0
- package/core/built/admin/assets/{input-group-DpogNUIt.js → input-group-BPAxETpQ.js} +1 -1
- package/core/built/admin/assets/invite-user-modal-jcUaaNkW.js +1 -0
- package/core/built/admin/assets/{koenig-lexical-2KuqRwZI.js → koenig-lexical-CfXTYeli.js} +1 -1
- package/core/built/admin/assets/koenig-loader-DktFM3Uh.js +1 -0
- package/core/built/admin/assets/{kpi-card-Ck3tT2Wg.js → kpi-card-fUHZlzBX.js} +1 -1
- package/core/built/admin/assets/{kpi-card-DDIxptaS.js → kpi-card-o0urVtNL.js} +1 -1
- package/core/built/admin/assets/kpi-helpers-2FTF4a3-.js +1 -0
- package/core/built/admin/assets/kpi-tabs-B8-_k2dQ.js +1 -0
- package/core/built/admin/assets/{label-DodDsMzn.js → label-CiRS3i_f.js} +1 -1
- package/core/built/admin/assets/label-picker-ao7tuPaK.js +1 -0
- package/core/built/admin/assets/layout-DC6QGDaw.js +1 -0
- package/core/built/admin/assets/member-custom-fields-BW756-EV.js +1 -0
- package/core/built/admin/assets/member-detail-CGGgUTSl.js +1 -0
- package/core/built/admin/assets/members-ZcPthwG0.js +11 -0
- package/core/built/admin/assets/moderation-24bElWs3.js +1 -0
- package/core/built/admin/assets/multi-select-combobox-CZPrgz-Z.js +1 -0
- package/core/built/admin/assets/navigation-modal-BiTP4U_J.js +1 -0
- package/core/built/admin/assets/newsletter-B3Ihwizp.js +1 -0
- package/core/built/admin/assets/newsletter-detail-modal-CYsu4qhl.js +1 -0
- package/core/built/admin/assets/newsletter-emails-CDPR4-SP.js +1 -0
- package/core/built/admin/assets/newsletters-bJiYLJWl.js +1 -0
- package/core/built/admin/assets/note-7f6urVVA.js +1 -0
- package/core/built/admin/assets/notifications-rosQCyXH.js +1 -0
- package/core/built/admin/assets/offers-container-modal-J2j6NpDL.js +1 -0
- package/core/built/admin/assets/onboarding-route-DTjcThKl.js +1 -0
- package/core/built/admin/assets/overview-BxvWzGaf.js +1 -0
- package/core/built/admin/assets/overview-D6JG0hkZ.js +1 -0
- package/core/built/admin/assets/{page-header-VLPJfj_d.js → page-header-l7vXmLIw.js} +1 -1
- package/core/built/admin/assets/pintura-modal-BGHmudVB.js +1 -0
- package/core/built/admin/assets/portal-frame-DVc4VHX_.js +1 -0
- package/core/built/admin/assets/portal-modal-BCOcdiRi.js +1 -0
- package/core/built/admin/assets/{post-analytics-Gv81eN_g.js → post-analytics-CTSZMK6I.js} +1 -1
- package/core/built/admin/assets/post-analytics-header-Dt4RQGq0.js +1 -0
- package/core/built/admin/assets/{post-analytics-provider-O2YjZMhN.js → post-analytics-provider-C4ydiboO.js} +1 -1
- package/core/built/admin/assets/post-share-modal-DjH_a_1L.js +1 -0
- package/core/built/admin/assets/preferences-BLo6VJUS.js +5 -0
- package/core/built/admin/assets/preview-modal-BOgjgsJL.js +1 -0
- package/core/built/admin/assets/profile-DG6iCdRH.js +1 -0
- package/core/built/admin/assets/radio-group-ChHD4EQJ.js +1 -0
- package/core/built/admin/assets/router-provider-Bexg1t-V.js +1 -0
- package/core/built/admin/assets/select-ChxknEcT.js +1 -0
- package/core/built/admin/assets/settings-B0VDAhgV.js +1 -0
- package/core/built/admin/assets/settings-Dwo3CeAD.js +4 -0
- package/core/built/admin/assets/settings-breadcrumbs-sLDNedBW.js +1 -0
- package/core/built/admin/assets/share-modal-BDb2nacg.js +1 -0
- package/core/built/admin/assets/skeleton-D7hwjdry.js +1 -0
- package/core/built/admin/assets/slack-modal-CwNAD69x.js +1 -0
- package/core/built/admin/assets/sort-button-DhqpxkrO.js +1 -0
- package/core/built/admin/assets/source-icon-BPsD5ees.js +1 -0
- package/core/built/admin/assets/stats-WdDJ8c_1.js +1 -0
- package/core/built/admin/assets/stats-view-J3PI2eT_.js +1 -0
- package/core/built/admin/assets/step-1-2q1SjerQ.js +1 -0
- package/core/built/admin/assets/step-2-D5mJB3Uu.js +1 -0
- package/core/built/admin/assets/step-3-BpAuYTGZ.js +2 -0
- package/core/built/admin/assets/{stripe-button-Bh4p6Wud.js → stripe-button-DDoUKN5a.js} +1 -1
- package/core/built/admin/assets/stripe-connect-modal-pMdF3t4S.js +1 -0
- package/core/built/admin/assets/switch-B_1yU3Aw.js +1 -0
- package/core/built/admin/assets/{table-DghJxZMH.js → table-CrqQtkR2.js} +1 -1
- package/core/built/admin/assets/tabs-BhzVdh5p.js +1 -0
- package/core/built/admin/assets/tag-detail-CwJhI4qg.js +2 -0
- package/core/built/admin/assets/tags-CvJ0PgrB.js +1 -0
- package/core/built/admin/assets/testimonials-modal-CV82IAnI.js +1 -0
- package/core/built/admin/assets/tier-detail-modal-pLzCOfeg.js +1 -0
- package/core/built/admin/assets/toggle-group-BW_T4yn6.js +1 -0
- package/core/built/admin/assets/topic-filter-DkXjDejV.js +1 -0
- package/core/built/admin/assets/transistor-modal-TMRvHZ6B.js +1 -0
- package/core/built/admin/assets/unsplash-modal-CV92RdPw.js +1 -0
- package/core/built/admin/assets/{use-analytics-data-IxJcSjc9.js → use-analytics-data-BM_uV9SU.js} +1 -1
- package/core/built/admin/assets/use-check-theme-limit-error-DkBnXMSY.js +1 -0
- package/core/built/admin/assets/use-confirm-unload-SzlkOIpm.js +1 -0
- package/core/built/admin/assets/use-feature-flag-cahOlMva.js +1 -0
- package/core/built/admin/assets/use-filter-params-BX5qf0Cg.js +1 -0
- package/core/built/admin/assets/{use-growth-stats-1NW-8eEZ.js → use-growth-stats-D0LlWBe6.js} +1 -1
- package/core/built/admin/assets/{use-hash-link-navigation-guard-B9j6HIrV.js → use-hash-link-navigation-guard-B_Y3FhYH.js} +1 -1
- package/core/built/admin/assets/use-limiter-D3DHSoAj.js +2 -0
- package/core/built/admin/assets/{use-pintura-config-BjFChXV1.js → use-pintura-config-D63Xu0SG.js} +1 -1
- package/core/built/admin/assets/use-pintura-editor-Z51aFnC8.js +1 -0
- package/core/built/admin/assets/{use-post-referrers-Dp1BnTAK.js → use-post-referrers-Cvymr3gt.js} +1 -1
- package/core/built/admin/assets/use-query-params-BfzuqbcD.js +1 -0
- package/core/built/admin/assets/use-reply-chain-data-Dc18Ujqo.js +1 -0
- package/core/built/admin/assets/use-setting-group-DYRIzqC0.js +1 -0
- package/core/built/admin/assets/use-settings-navigation-aDSLtmEl.js +1 -0
- package/core/built/admin/assets/{use-simple-pagination-DsEGSJhe.js → use-simple-pagination-B2TdNX67.js} +1 -1
- package/core/built/admin/assets/{use-tinybird-query-Ci_DiPkX.js → use-tinybird-query-BvQIVuRc.js} +1 -1
- package/core/built/admin/assets/{use-tinybird-token-CsUwc722.js → use-tinybird-token-COQTPIwL.js} +1 -1
- package/core/built/admin/assets/use-upgrade-route-BZf1g59m.js +1 -0
- package/core/built/admin/assets/{use-url-input-BEZJpVgN.js → use-url-input-PcqZadXa.js} +1 -1
- package/core/built/admin/assets/user-detail-modal-DeO3SAZq.js +1 -0
- package/core/built/admin/assets/{virtual-list-D5ugXyZY.js → virtual-list-D3MfPNOh.js} +1 -1
- package/core/built/admin/assets/web-CDdyG7z1.js +2 -0
- package/core/built/admin/assets/web-CwQ8_QUc.js +1 -0
- package/core/built/admin/assets/zapier-modal-a7t75iNI.js +1 -0
- package/core/built/admin/index.html +15 -12
- package/core/frontend/apps/private-blogging/lib/helpers/input_password.js +2 -1
- package/core/frontend/helpers/body_class.js +2 -1
- package/core/frontend/helpers/cancel_link.js +2 -1
- package/core/frontend/helpers/color_to_rgba.js +2 -1
- package/core/frontend/helpers/content_api_key.js +2 -1
- package/core/frontend/helpers/content_api_url.js +2 -1
- package/core/frontend/helpers/contrast_text_color.js +2 -1
- package/core/frontend/helpers/facebook_url.js +2 -1
- package/core/frontend/helpers/ghost_foot.js +2 -1
- package/core/frontend/helpers/ghost_head.js +2 -1
- package/core/frontend/helpers/has.js +4 -2
- package/core/frontend/helpers/link_class.js +2 -1
- package/core/frontend/helpers/meta_description.js +2 -1
- package/core/frontend/helpers/meta_title.js +2 -1
- package/core/frontend/helpers/navigation.js +113 -22
- package/core/frontend/helpers/page_url.js +2 -1
- package/core/frontend/helpers/post_class.js +2 -1
- package/core/frontend/helpers/reading_time.js +2 -1
- package/core/frontend/helpers/social_accounts.js +2 -1
- package/core/frontend/helpers/social_url.js +2 -1
- package/core/frontend/helpers/total_members.js +2 -1
- package/core/frontend/helpers/total_paid_members.js +2 -1
- package/core/frontend/helpers/tpl/navigation.hbs +1 -1
- package/core/frontend/helpers/twitter_url.js +2 -1
- package/core/frontend/public/cards.manifest.json +1 -1
- package/core/server/api/endpoints/posts.js +7 -4
- package/core/server/api/endpoints/utils/permissions.js +2 -1
- package/core/server/api/endpoints/utils/validators/input/settings.js +83 -1
- package/core/server/data/exporter/table-lists.js +1 -0
- package/core/server/data/importer/handlers/json.js +2 -1
- package/core/server/data/migrations/versions/5.19/2022-09-02-20-52-backfill-new-product-columns.js +2 -1
- package/core/server/data/migrations/versions/5.21/2022-10-26-04-50-member-subscription-created-batch-id.js +4 -2
- package/core/server/data/migrations/versions/5.22/2022-10-31-12-03-backfill-new-product-columns.js +2 -1
- package/core/server/data/migrations/versions/6.58/2026-08-11-21-22-48-rename-email-batches-provider-id.js +1 -1
- package/core/server/data/migrations/versions/6.59/2026-08-18-17-06-46-add-gift-delivery-fields-to-gifts.js +26 -0
- package/core/server/data/migrations/versions/6.59/2026-08-18-17-07-01-add-gift-deliveries.js +20 -0
- package/core/server/data/schema/commands.js +48 -24
- package/core/server/data/schema/schema.js +28 -7
- package/core/server/data/seeders/importers/automation-action-revisions-importer.js +3 -36
- package/core/server/data/seeders/importers/automation-actions-importer.js +5 -41
- package/core/server/data/seeders/importers/automation-run-steps-importer.js +3 -36
- package/core/server/data/seeders/importers/automation-runs-importer.js +7 -42
- package/core/server/data/seeders/importers/automations-importer.js +3 -36
- package/core/server/data/seeders/importers/comment-reports-importer.js +5 -5
- package/core/server/data/seeders/importers/comments-importer.js +5 -5
- package/core/server/data/seeders/importers/email-batches-importer.js +5 -4
- package/core/server/data/seeders/importers/email-recipients-importer.js +12 -20
- package/core/server/data/seeders/importers/emails-importer.js +6 -6
- package/core/server/data/seeders/importers/labels-importer.js +3 -3
- package/core/server/data/seeders/importers/members-click-events-importer.js +5 -5
- package/core/server/data/seeders/importers/members-created-events-importer.js +13 -12
- package/core/server/data/seeders/importers/members-feedback-importer.js +7 -7
- package/core/server/data/seeders/importers/members-importer.js +4 -4
- package/core/server/data/seeders/importers/members-login-events-importer.js +3 -3
- package/core/server/data/seeders/importers/members-products-importer.js +2 -2
- package/core/server/data/seeders/importers/members-status-events-importer.js +4 -3
- package/core/server/data/seeders/importers/members-stripe-customers-importer.js +2 -2
- package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +7 -7
- package/core/server/data/seeders/importers/members-subscribe-events-importer.js +3 -3
- package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +3 -3
- package/core/server/data/seeders/importers/offer-redemptions-importer.js +7 -7
- package/core/server/data/seeders/importers/offers-importer.js +3 -3
- package/core/server/data/seeders/importers/posts-importer.js +4 -4
- package/core/server/data/seeders/importers/table-importer.js +2 -35
- package/core/server/data/seeders/importers/tags-importer.js +2 -2
- package/core/server/data/seeders/importers/users-importer.js +2 -2
- package/core/server/data/seeders/importers/web-mentions-importer.js +2 -2
- package/core/server/data/seeders/utils/random.js +7 -0
- package/core/server/ghost-server.js +19 -5
- package/core/server/lib/db-date.js +72 -3
- package/core/server/models/gift-delivery.js +23 -0
- package/core/server/models/gift.js +9 -0
- package/core/server/models/index.js +3 -2
- package/core/server/models/settings.js +43 -4
- package/core/server/services/automations/database-automations-repository.js +38 -31
- package/core/server/services/automations/poll.js +1 -1
- package/core/server/services/content-import/csv/index.js +8 -0
- package/core/server/services/content-import/csv/parse.js +60 -0
- package/core/server/services/content-import/import/importer.js +222 -0
- package/core/server/services/content-import/import/post-data.js +52 -0
- package/core/server/services/content-import/import/reader.js +15 -0
- package/core/server/services/content-import/import/row.js +50 -0
- package/core/server/services/content-import/import/store.js +71 -0
- package/core/server/services/content-import/index.js +67 -0
- package/core/server/services/email-analytics/automation-email-analytics-batch-processor.js +1 -1
- package/core/server/services/email-analytics/index.js +3 -1
- package/core/server/services/email-analytics/jobs/index.js +2 -2
- package/core/server/services/email-service/email-service-wrapper.js +1 -1
- package/core/server/services/email-suppression-list/email-suppression-list.js +4 -2
- package/core/server/services/gifts/CONTEXT.md +27 -3
- package/core/server/services/gifts/README.md +8 -4
- package/core/server/services/gifts/constants.js +2 -1
- package/core/server/services/gifts/email-templates/gift-delivery.hbs +20 -0
- package/core/server/services/gifts/email-templates/gift-delivery.js +39 -0
- package/core/server/services/gifts/email-templates/gift-purchase-confirmation.hbs +2 -2
- package/core/server/services/gifts/email-templates/gift-purchase-confirmation.js +19 -4
- package/core/server/services/gifts/events/send-gift-delivery-event.js +15 -0
- package/core/server/services/gifts/gift-bookshelf-repository.js +23 -3
- package/core/server/services/gifts/gift-checkout-adapter.js +5 -3
- package/core/server/services/gifts/gift-codec.js +8 -0
- package/core/server/services/gifts/gift-delivery-bookshelf-repository.js +107 -0
- package/core/server/services/gifts/gift-delivery-codec.js +12 -0
- package/core/server/services/gifts/gift-delivery-schema.js +15 -0
- package/core/server/services/gifts/gift-delivery-service.js +209 -0
- package/core/server/services/gifts/gift-email-renderer.js +13 -1
- package/core/server/services/gifts/gift-email-service.js +97 -17
- package/core/server/services/gifts/gift-schema.js +10 -6
- package/core/server/services/gifts/gift-service.js +259 -34
- package/core/server/services/gifts/gift.js +59 -5
- package/core/server/services/gifts/index.js +69 -3
- package/core/server/services/lib/mailgun-client.js +5 -2
- package/core/server/services/mail/ghost-mailer.js +9 -1
- package/core/server/services/member-welcome-emails/service.js +6 -1
- package/core/server/services/members/members-api/controllers/router-controller.js +26 -8
- package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +100 -12
- package/core/server/services/stripe/stripe-api.js +3 -2
- package/core/server/services/stripe/webhook-controller.js +6 -3
- package/core/server/services/stripe/webhook-manager.js +2 -0
- package/core/shared/labs.js +1 -0
- package/package.json +9 -8
- package/pnpm-lock.yaml +26 -11
- package/pnpm-workspace.yaml +5 -6
- package/content/themes/source/yarn.lock +0 -6232
- package/core/built/admin/assets/Combination-BDvCdg1t.js +0 -41
- package/core/built/admin/assets/about-B_BvSyLF.js +0 -1
- package/core/built/admin/assets/account-migration-oJUGxnzT.js +0 -1
- package/core/built/admin/assets/activitypub/dist-Dqggkccr.js +0 -215
- package/core/built/admin/assets/activitypub/inbox-z1o2j1Tb.js +0 -1221
- package/core/built/admin/assets/activitypub/layout-BRMezuty.js +0 -1
- package/core/built/admin/assets/activitypub/moderation-CZudJi8N.js +0 -160
- package/core/built/admin/assets/activitypub/settings-CrSV1cux.js +0 -107
- package/core/built/admin/assets/add-integration-modal-BW23PDYs.js +0 -1
- package/core/built/admin/assets/add-newsletter-modal-M0ls8BKO.js +0 -1
- package/core/built/admin/assets/add-recommendation-modal-B0NeBMzl.js +0 -1
- package/core/built/admin/assets/announcement-bar-modal-pXBqjQE_.js +0 -1
- package/core/built/admin/assets/api-keys-Df6uv1dT.js +0 -1
- package/core/built/admin/assets/audience-BY8od8If.js +0 -1
- package/core/built/admin/assets/automations-DCs6Wady.js +0 -1
- package/core/built/admin/assets/bluesky-sharing-D0P42Cws.js +0 -1
- package/core/built/admin/assets/breadcrumb-MTj_cKLb.js +0 -1
- package/core/built/admin/assets/chart-helpers-DcO3k_vA.js +0 -1
- package/core/built/admin/assets/chunk-KS7C4IRE-DG9HTHQ3.js +0 -4
- package/core/built/admin/assets/color-picker-CBlJMv3y.js +0 -3
- package/core/built/admin/assets/combobox-BbPJzjCp.js +0 -1
- package/core/built/admin/assets/command-BrhXIlDr.js +0 -1
- package/core/built/admin/assets/comments-Cu4rD1aJ.js +0 -1
- package/core/built/admin/assets/confirmation-provider-BEdrnHns.js +0 -1
- package/core/built/admin/assets/custom-field-type-option-CNhAgHbJ.js +0 -1
- package/core/built/admin/assets/custom-integration-modal-CrGOI8IB.js +0 -1
- package/core/built/admin/assets/date-range-select-Bsh4gIek.js +0 -1
- package/core/built/admin/assets/design-and-theme-modal-DWZguwWX.js +0 -23
- package/core/built/admin/assets/dirty-confirm-dialog-DmdMpgyN.js +0 -1
- package/core/built/admin/assets/disabled-sources-indicator-BLnmyWgt.js +0 -1
- package/core/built/admin/assets/dist-DMFGvqqU.js +0 -1
- package/core/built/admin/assets/dist-DlCyLrOC.js +0 -1
- package/core/built/admin/assets/dist-j1xxxnY8.js +0 -1
- package/core/built/admin/assets/domain-Dp9TRrFp.js +0 -1
- package/core/built/admin/assets/edit-profile-DG6lpMsr.js +0 -1
- package/core/built/admin/assets/editor-CPQOrhrn.js +0 -8
- package/core/built/admin/assets/embed-signup-form-modal-CgWniDha.js +0 -9
- package/core/built/admin/assets/explore-C3rzONJv.js +0 -1
- package/core/built/admin/assets/feed-DpUwS1cU.js +0 -1
- package/core/built/admin/assets/filters-DZJT29GW.js +0 -1
- package/core/built/admin/assets/first-promoter-modal-DJhQQheG.js +0 -1
- package/core/built/admin/assets/gift-link-modal-sdFLjND9.js +0 -1
- package/core/built/admin/assets/global-data-provider-CixmTX00.js +0 -1
- package/core/built/admin/assets/growth-0YYkBEeS.js +0 -1
- package/core/built/admin/assets/growth-DpjAPeQT.js +0 -3
- package/core/built/admin/assets/history-modal-BWJ4-cJ0.js +0 -1
- package/core/built/admin/assets/html-field-C-oa5DEl.js +0 -1
- package/core/built/admin/assets/iframe-buffering-Ba9sDpi2.js +0 -1
- package/core/built/admin/assets/index-BOJzlYiz.js +0 -67
- package/core/built/admin/assets/index-Bid6LAyc.css +0 -1
- package/core/built/admin/assets/invite-user-modal-DCiQSiuD.js +0 -1
- package/core/built/admin/assets/koenig-editor-base-BApy8Q7C.js +0 -1
- package/core/built/admin/assets/kpi-helpers-ssbuy-hD.js +0 -1
- package/core/built/admin/assets/kpi-tabs-BqoIM6bI.js +0 -1
- package/core/built/admin/assets/label-picker-Cvvbmzb5.js +0 -1
- package/core/built/admin/assets/layout-DkkGyev2.js +0 -1
- package/core/built/admin/assets/member-custom-fields-CvGcpaiW.js +0 -1
- package/core/built/admin/assets/member-detail-CMCMZ47_.js +0 -1
- package/core/built/admin/assets/members-sRl6fNfq.js +0 -11
- package/core/built/admin/assets/moderation-KhKwGqI1.js +0 -1
- package/core/built/admin/assets/multi-select-combobox-nhCff0_K.js +0 -1
- package/core/built/admin/assets/navigation-modal-MDJExWDJ.js +0 -1
- package/core/built/admin/assets/newsletter-BIBHumfV.js +0 -1
- package/core/built/admin/assets/newsletter-detail-modal-CfjBMH3v.js +0 -1
- package/core/built/admin/assets/newsletter-emails-ClDL-7dA.js +0 -1
- package/core/built/admin/assets/newsletters-CBe-IPzK.js +0 -1
- package/core/built/admin/assets/note-HnNUOt4d.js +0 -1
- package/core/built/admin/assets/notifications-Cj5e-258.js +0 -1
- package/core/built/admin/assets/offers-container-modal-BHwHtixC.js +0 -1
- package/core/built/admin/assets/onboarding-route-D_4jp7Nq.js +0 -1
- package/core/built/admin/assets/overview-CezDdg-F.js +0 -1
- package/core/built/admin/assets/overview-D5mM51Lj.js +0 -1
- package/core/built/admin/assets/pintura-modal-BXXJ8Iaa.js +0 -1
- package/core/built/admin/assets/portal-frame-BLCvF8f-.js +0 -1
- package/core/built/admin/assets/portal-modal-DN80tAcy.js +0 -1
- package/core/built/admin/assets/post-analytics-header-_ydSY8qO.js +0 -1
- package/core/built/admin/assets/post-share-modal-CzYak_a5.js +0 -1
- package/core/built/admin/assets/preferences-gneLb6LV.js +0 -5
- package/core/built/admin/assets/preview-modal-Bkq-tgVm.js +0 -1
- package/core/built/admin/assets/profile-CzXmCNTC.js +0 -1
- package/core/built/admin/assets/radio-group-Dsq5ZEbV.js +0 -1
- package/core/built/admin/assets/router-provider-CkB_ArLF.js +0 -1
- package/core/built/admin/assets/select-xuZAuDyS.js +0 -1
- package/core/built/admin/assets/settings-Ct8pabhr.js +0 -1
- package/core/built/admin/assets/settings-KSWWQanQ.js +0 -4
- package/core/built/admin/assets/settings-breadcrumbs-DbPGu-Tu.js +0 -1
- package/core/built/admin/assets/share-modal-CdiUx9WM.js +0 -1
- package/core/built/admin/assets/slack-modal-BP--Z3jE.js +0 -1
- package/core/built/admin/assets/sort-button-CjfKdlsL.js +0 -1
- package/core/built/admin/assets/source-icon-DHj1h6Ts.js +0 -1
- package/core/built/admin/assets/stats-C615kulJ.js +0 -1
- package/core/built/admin/assets/stats-view-BSMRdYiN.js +0 -1
- package/core/built/admin/assets/step-1-pSdGYtIF.js +0 -1
- package/core/built/admin/assets/step-2-T9Uy4eBD.js +0 -1
- package/core/built/admin/assets/step-3-D4uXe_XG.js +0 -2
- package/core/built/admin/assets/stripe-connect-modal-C2vTvepi.js +0 -1
- package/core/built/admin/assets/switch-CE2NuMn-.js +0 -1
- package/core/built/admin/assets/tabs-l9c7FjzI.js +0 -1
- package/core/built/admin/assets/tag-detail-DBw_M2-p.js +0 -2
- package/core/built/admin/assets/tags-DoWsAG6l.js +0 -1
- package/core/built/admin/assets/testimonials-modal-BZKePE2T.js +0 -1
- package/core/built/admin/assets/tier-detail-modal-D65pVWsN.js +0 -1
- package/core/built/admin/assets/toggle-group-uJnl42w3.js +0 -1
- package/core/built/admin/assets/topic-filter-BM7hz0kW.js +0 -1
- package/core/built/admin/assets/transistor-modal-VZOGN3od.js +0 -1
- package/core/built/admin/assets/unsplash-modal-CKGfACxF.js +0 -1
- package/core/built/admin/assets/use-check-theme-limit-error-CGp3CGT5.js +0 -1
- package/core/built/admin/assets/use-feature-flag-CSq2Lwzt.js +0 -1
- package/core/built/admin/assets/use-filter-params-0hcJJuEJ.js +0 -1
- package/core/built/admin/assets/use-limiter-ffwpsZPp.js +0 -2
- package/core/built/admin/assets/use-pintura-editor-Cb41oJyL.js +0 -1
- package/core/built/admin/assets/use-query-params-DHhhu8wi.js +0 -1
- package/core/built/admin/assets/use-reply-chain-data-C0ZUTkfk.js +0 -1
- package/core/built/admin/assets/use-setting-group-Bx8M6FL2.js +0 -1
- package/core/built/admin/assets/use-settings-navigation-BOZcat_V.js +0 -1
- package/core/built/admin/assets/use-upgrade-route-B3_DUiuT.js +0 -1
- package/core/built/admin/assets/user-detail-modal-595z1N5r.js +0 -1
- package/core/built/admin/assets/web-CAta3lRE.js +0 -1
- package/core/built/admin/assets/web-Ds9_wWJK.js +0 -2
- package/core/built/admin/assets/zapier-modal-CcfDZY53.js +0 -1
- package/core/server/data/seeders/utils/database-date.js +0 -28
- package/core/server/services/automations/database-date.js +0 -59
- /package/core/built/admin/assets/{dist-CqO2lWS02.js → dist-CqO2lWS0.js} +0 -0
- /package/core/server/services/{automations → lib}/mailgun-message-id.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./use-tinybird-query-BvQIVuRc.js";import{g as i}from"./stats-WdDJ8c_1.js";import{_ as a,h as o}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as ee,t as s}from"./router-provider-Bexg1t-V.js";import{f as c,h as te,p as l}from"./dist-Cb5RSHSg.js";import{a as u}from"./shade-app-B3heOAfz-BhQXxNkT.js";import{L as d,mn as ne,t as f}from"./button-BshWPHvn.js";import{a as p,i as m,n as re,t as h}from"./chart-helpers-BsbzoWhK.js";import{r as g,t as _}from"./tabs-BhzVdh5p.js";import{a as ie}from"./filters-DtYpAkDd.js";import{a as v,i as y,n as b,o as x,r as S,t as C}from"./card-CiiE7QfM.js";import{a as w,c as T,i as E,l as D,n as O,o as k,r as A,s as j,t as M,u as N}from"./data-list-CupF7bjM.js";import{t as ae}from"./empty-indicator-WB1WgT9h.js";import{a as P,i as oe,n as se,o as F,r as ce,s as I}from"./use-filter-params-BX5qf0Cg.js";import{$r as L,Ai as R,Gn as z,I as le,Jn as B,Kn as V,Kr as H,N as U,P as ue,Wr as W,Xn as G,Yn as de,Yr as fe,Zr as pe,ai as me,fr as he,ir as ge,qn as _e,qr as ve,zi as ye}from"./index-BJz9Zlsc.js";import{t as K}from"./date-range-select-kaKtab5O.js";import{n as q,r as J,t as be}from"./kpi-tabs-B8-_k2dQ.js";import{t as xe}from"./use-analytics-data-BM_uV9SU.js";import{n as Se,t as Ce}from"./audience-Cc40y7zQ.js";import{r as we,t as Te}from"./post-analytics-header-Dt4RQGq0.js";import{n as Ee}from"./post-analytics-context-D0Mw-Pmv.js";import{n as Y,r as De,t as X}from"./kpi-helpers-2FTF4a3-.js";var Z=e(t(),1),Q=n(),Oe=({data:e,range:t})=>{let[n]=a(),[r,i]=(0,Z.useState)(n.get(`tab`)||`visits`),o=Y[r],ee=m(e||[],t,o.dataKey,`sum`)?.map(e=>{let t=Number(e[o.dataKey]);return{date:String(e.date),value:t,formattedValue:o.formatter(t),label:o.label}}),s=X(e),c=h(t,e||[],{fieldName:o.dataKey});return(0,Q.jsx)(C,{children:(0,Q.jsx)(b,{children:(0,Q.jsxs)(_,{defaultValue:r,variant:`kpis`,children:[(0,Q.jsxs)(g,{className:`-mx-6 hidden grid-cols-2 md:visible! md:grid!`,children:[(0,Q.jsx)(q,{value:`visits`,onClick:()=>{i(`visits`)},children:(0,Q.jsx)(J,{color:Y.visits.color,label:`Unique visitors`,value:s.visits})}),(0,Q.jsx)(q,{value:`views`,onClick:()=>{i(`views`)},children:(0,Q.jsx)(J,{color:Y.views.color,label:`Total views`,value:s.views})})]}),(0,Q.jsxs)(fe,{children:[(0,Q.jsx)(me,{className:`md:hidden`,asChild:!0,children:(0,Q.jsxs)(be,{children:[r===`visits`&&(0,Q.jsx)(J,{color:`var(--chart-blue)`,label:`Unique visitors`,value:s.visits}),r===`views`&&(0,Q.jsx)(J,{color:`var(--chart-teal)`,label:`Total views`,value:s.views})]})}),(0,Q.jsxs)(pe,{align:`end`,className:`w-56`,children:[(0,Q.jsx)(L,{onClick:()=>i(`visits`),children:`Unique visitors`}),(0,Q.jsx)(L,{onClick:()=>i(`views`),children:`Total views`})]})]}),(0,Q.jsx)(`div`,{className:`my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:(0,Q.jsx)(p,{className:`-mb-3 aspect-auto h-[16vw] max-h-[320px] min-h-[180px] w-full`,color:o.color,data:ee,id:o.dataKey,range:c,showHours:!0,syncId:`overview-charts`})})]})})})},ke=e(F(),1);ke.registerLocale(P);var Ae=e=>U[e]||ke.getName(e,`en`,{select:`alias`})||`Unknown`,je=e=>({"UNITED STATES":`US`,"UNITED STATES OF AMERICA":`US`,USA:`US`,"UNITED KINGDOM":`GB`,UK:`GB`,"GREAT BRITAIN":`GB`,NETHERLANDS:`NL`})[e.toUpperCase()]||(e.length>2?e.substring(0,2):e),$=({tableHeader:e,data:t,onLocationClick:n})=>(0,Q.jsxs)(M,{children:[e&&(0,Q.jsxs)(w,{children:[(0,Q.jsx)(E,{children:`Country`}),(0,Q.jsx)(E,{children:`Visitors`})]}),(0,Q.jsx)(A,{children:t.map(e=>{let t=Ae(`${e.location}`)||`Unknown`,r=n&&e.location!==`Unknown`,i=e.location?e.location.toLowerCase():`unknown`;return(0,Q.jsxs)(N,{className:r?`cursor-pointer`:``,"data-testid":`location-row-${i}`,onClick:r?()=>n(e.location):void 0,children:[(0,Q.jsx)(O,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),(0,Q.jsx)(k,{className:`group-hover/data:max-w-[calc(100%-140px)]`,children:(0,Q.jsxs)(`div`,{className:`flex items-center space-x-3 overflow-hidden`,title:t||`Unknown`,children:[(0,Q.jsx)(I,{countryCode:`${je(e.location)}`,fallback:(0,Q.jsx)(`span`,{className:`flex h-[14px] w-[22px] items-center justify-center rounded-[2px] bg-black text-white`,children:(0,Q.jsx)(u.SkullAndBones,{className:`size-3`})})}),(0,Q.jsx)(`div`,{className:`truncate font-medium`,children:t})]})}),(0,Q.jsxs)(j,{children:[(0,Q.jsx)(T,{children:c(Number(e.visits))}),(0,Q.jsx)(D,{children:l(e.percentage)})]})]},e.location||`unknown`)})})]}),Me=({data:e,isLoading:t,onLocationClick:n})=>{let r=e.slice(0,10);return(0,Q.jsx)(Q.Fragment,{children:t?``:(0,Q.jsx)(Q.Fragment,{children:e&&e.length>0&&(0,Q.jsxs)(C,{className:`group/datalist`,"data-testid":`locations-card`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,Q.jsxs)(v,{className:`p-0`,children:[(0,Q.jsx)(x,{children:`Locations`}),(0,Q.jsx)(S,{children:`Where are the readers of this post`})]}),(0,Q.jsx)(R,{className:`mr-2`,children:`Visitors`})]}),(0,Q.jsxs)(b,{className:`overflow-hidden`,children:[(0,Q.jsx)(ge,{}),(0,Q.jsx)($,{data:r,tableHeader:!1,onLocationClick:n})]}),e.length>10&&(0,Q.jsx)(y,{children:(0,Q.jsxs)(z,{children:[(0,Q.jsx)(G,{asChild:!0,children:(0,Q.jsxs)(f,{variant:`outline`,children:[`View all `,(0,Q.jsx)(d,{})]})}),(0,Q.jsxs)(V,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,Q.jsxs)(B,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,Q.jsx)(de,{children:`Top locations`}),(0,Q.jsx)(_e,{children:`Where are the readers of this post`})]}),(0,Q.jsx)(`div`,{className:`group/datalist`,children:(0,Q.jsx)($,{data:e,tableHeader:!0,onLocationClick:n})})]})]})})]})})})},Ne=()=>{let e=ee(),{postId:t}=o(),{statsConfig:n,isLoading:a,site:c}=xe(),{range:l,setRange:u,post:d,isPostLoading:f}=Ee(),{appSettings:p}=ye(),m=(0,Z.useRef)(null),{filters:h,setFilters:g}=ce({supportedFields:se,trackingSource:`post-analytics`}),_=(0,Z.useMemo)(()=>Ce(h.find(e=>e.field===`audience`)?.values),[h]);(0,Z.useEffect)(()=>{!f&&d?.email_only&&e(`/posts/analytics/${t}`)},[f,d?.email_only,e,t]);let v=(0,Z.useMemo)(()=>{if(!d?.published_at)return ue.allTime.value;let e=ve(d.published_at),{startDate:t,endDate:n}=H(l);return n.diff(t,`days`)+1>e?e:l},[d?.published_at,l]),{startDate:y,endDate:x,timezone:S}=H(v),w=(0,Z.useCallback)(()=>{let e=te(m.current);e&&e.scrollTo({top:0,behavior:`smooth`})},[]),T=(0,Z.useMemo)(()=>{let e={};return h.forEach(t=>{let n=t.field,r=t.values;if(n===`audience`)return;let i=r&&r.length>0&&r[0]!==null&&r[0]!==void 0,a=n===`source`&&r?.[0]===``;if(i&&(r[0]!==``||a)){let t=String(r[0]);e[n]=t}}),e},[h]),E=(0,Z.useCallback)((e,t)=>{g(n=>n.find(t=>t.field===e)?n.map(n=>n.field===e?{...n,values:[t]}:n):[...n,ie(e,`is`,[t])]),w()},[g,w]),D=(0,Z.useCallback)(e=>E(`location`,e),[E]),O=(0,Z.useCallback)(e=>E(`source`,e),[E]),k=(0,Z.useMemo)(()=>{let e={site_uuid:n?.id||``,date_from:W(y),date_to:W(x),timezone:S,member_status:Se(_),post_uuid:``,...T};return!f&&d?.uuid?{...e,post_uuid:d.uuid}:e},[f,d,n?.id,y,x,S,_,T]),{data:A,loading:j}=r({endpoint:`api_kpis`,statsConfig:n,params:k}),{data:M,loading:N}=r({endpoint:`api_top_locations`,statsConfig:n,params:k}),{data:P,loading:F}=r({endpoint:`api_top_sources`,statsConfig:n,params:k}),I=(0,Z.useMemo)(()=>M?.reduce((e,t)=>e+Number(t.visits),0)||0,[M]),L=(0,Z.useMemo)(()=>P?P.reduce((e,t)=>e+Number(t.visits||0),0):0,[P]),R=c.url,z=c.icon,B=(0,Z.useMemo)(()=>{let e=M?.map(e=>({location:String(e.location),visits:Number(e.visits),percentage:I>0?Number(e.visits)/I:0,isUnknown:le.includes(String(e.location))}))||[],t=e.filter(e=>!e.isUnknown),n=e.filter(e=>e.isUnknown),r=n.length>0?[{location:`Unknown`,visits:n.reduce((e,t)=>e+t.visits,0),percentage:n.reduce((e,t)=>e+t.percentage,0)}]:[];return[...t,...r]},[M,I]),V=a||f||j||N||F,U=X(A),G=h.length>0;return p&&!p.analytics?.webAnalytics?(0,Q.jsx)(s,{to:`/posts/analytics/${t}`,replace:!0}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(Te,{currentTab:`Web`,children:[G&&(0,Q.jsx)(i,{children:(0,Q.jsx)(K,{range:l,onRangeChange:u})}),(0,Q.jsxs)(i,{className:`${G?`mt-0! [grid-area:subactions] lg:mt-[25px]!`:`[grid-area:actions]`}`,children:[(0,Q.jsx)(oe,{filters:h,postUuid:d?.uuid,range:l,onChange:g}),!G&&(0,Q.jsx)(K,{range:l,onRangeChange:u})]})]}),(0,Q.jsx)(we,{ref:m,children:V?(0,Q.jsx)(C,{className:`size-full`,variant:`plain`,children:(0,Q.jsx)(b,{className:`size-full items-center justify-center`,children:(0,Q.jsx)(he,{})})}):A&&A.length!==0&&U.visits!==`0`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Oe,{data:A,range:v}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-6 lg:grid lg:grid-cols-2`,children:[(0,Q.jsx)(Me,{data:B,isLoading:N,onLocationClick:D}),(0,Q.jsx)(De,{data:P,range:v,siteIcon:z,siteUrl:R,totalVisitors:L,onSourceClick:O})]})]}):(0,Q.jsx)(`div`,{className:`grow`,children:(0,Q.jsx)(ae,{className:`h-full`,description:`Try adjusting filters to see more data.`,title:`No visitors ${re(l)}`,children:(0,Q.jsx)(ne,{strokeWidth:1.5})})})})]})};export{Ne as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{t as n}from"./react-Bb3IsNbi.js";import{t as r}from"./jsx-runtime-DX3WBWVO.js";import{m as i,p as a}from"./hooks-CJepWnbB.js";import{t as o,xr as s}from"./button-BshWPHvn.js";import{o as c,t as l}from"./use-settings-navigation-aDSLtmEl.js";import{i as u,n as d,r as f,t as ee}from"./action-list-lGzZLHc8.js";import{n as p}from"./global-data-context-gAMDH9u1.js";import{n as m}from"./confirmation-context-QmFxSjWy.js";import{n as h}from"./integrations-B9yYgci5.js";import{t as g}from"./api-keys-Boy5pLbD.js";import{t as te}from"./integration-header-B4DyXV06.js";import{t as ne}from"./api-keys-BgKr003d.js";import{t as re}from"./brand-icon-09YqFZjV.js";var ie=``+new URL(`zapier-logo-D8a11oW_.svg`,import.meta.url).href,_=e(n(),1),v=r(),y=(e,t)=>`${e}-${t}`,b=()=>{let[e,t]=(0,_.useState)(``),[n,r]=(0,_.useState)(!1),i=(0,_.useRef)(new Map),[a,o]=(0,_.useState)(new Set),s=t=>t.length?t.some(t=>t.toLowerCase().includes(e.toLowerCase())):!0,c=(0,_.useCallback)((t,n)=>{i.current.set(t,n),(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&o(e=>new Set(e).add(t))},[e]),l=(0,_.useCallback)(e=>{i.current.delete(e),o(t=>{let n=new Set(t);return n.delete(e),n})},[]);(0,_.useEffect)(()=>{let t=new Set;i.current.forEach((n,r)=>{(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&t.add(r)}),o(t)},[e]);let u=(0,_.useCallback)(e=>a.size===1&&a.has(e),[a]),d=(0,_.useCallback)(()=>a,[a]),f=t=>{if(!e)return t;if(typeof t==`string`){let n=e.split(/\s+/).map(e=>e.toLowerCase()),r=n.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),i=t.split(RegExp(`(${r})`,`gi`)),a=new Map;return i.map(e=>{if(!n.includes(e.toLowerCase()))return e;let t=(a.get(e)??0)+1;return a.set(e,t),(0,v.jsx)(`span`,{className:`bg-yellow-500/40`,children:e},`${e}-${t}`)})}else if(Array.isArray(t))return t.map(e=>f(e));else if(t&&typeof t==`object`&&t)return _.Children.map(t,e=>e&&typeof e==`object`&&`props`in e?f(e.props.children):e);else return t};return{filter:e,setFilter:t,checkVisible:s,highlightKeywords:f,noResult:n,setNoResult:r,registerComponent:c,unregisterComponent:l,getVisibleComponents:d,isOnlyVisibleComponent:u}},x=``+new URL(`Alto-DoS3yH_j.png`,import.meta.url).href,S=``+new URL(`Bulletin-BUpcurG5.png`,import.meta.url).href,C=``+new URL(`Casper-ASA9Ix4v.png`,import.meta.url).href,w=``+new URL(`Dawn-aeEVEPie.png`,import.meta.url).href,T=``+new URL(`Digest-DJl0U_FG.png`,import.meta.url).href,E=``+new URL(`Dope-D_CgP0p0.png`,import.meta.url).href,D=``+new URL(`Ease-B4NuA7sj.png`,import.meta.url).href,O=``+new URL(`Edge-BPZxvKka.png`,import.meta.url).href,k=``+new URL(`Edition-cIDLjlhj.png`,import.meta.url).href,A=``+new URL(`Episode-D7bgV2bY.png`,import.meta.url).href,j=``+new URL(`Headline-BFXOunIb.png`,import.meta.url).href,M=``+new URL(`Journal-D3UW9T2b.png`,import.meta.url).href,N=``+new URL(`London-CSCVHwS0.png`,import.meta.url).href,P=``+new URL(`Ruby-DVEXVMTx.png`,import.meta.url).href,F=``+new URL(`Solo-c-yPo0gw.png`,import.meta.url).href,I=``+new URL(`Source-V-WXZXnS.png`,import.meta.url).href,L=``+new URL(`Source-Magazine-Czq1p0a_.png`,import.meta.url).href,R=``+new URL(`Source-Newsletter-CwTcfhJ-.png`,import.meta.url).href,z=``+new URL(`Taste-U2cRR2yO.png`,import.meta.url).href,B=``+new URL(`Wave-DE2aI-FM.png`,import.meta.url).href,V=[{name:`Source`,category:`News`,previewUrl:`https://source.ghost.io/`,ref:`default`,image:I,variants:[{category:`Magazine`,previewUrl:`https://source-magazine.ghost.io/`,image:L},{category:`Newsletter`,previewUrl:`https://source-newsletter.ghost.io/`,image:R}]},{name:`Casper`,category:`Blog`,previewUrl:`https://demo.ghost.io/`,ref:`TryGhost/Casper`,image:C},{name:`Edition`,category:`Newsletter`,url:`https://github.com/TryGhost/Edition`,previewUrl:`https://edition.ghost.io/`,ref:`TryGhost/Edition`,image:k},{name:`Solo`,category:`Blog`,url:`https://github.com/TryGhost/Solo`,previewUrl:`https://solo.ghost.io`,ref:`TryGhost/Solo`,image:F},{name:`Taste`,category:`Blog`,url:`https://github.com/TryGhost/Taste`,previewUrl:`https://taste.ghost.io`,ref:`TryGhost/Taste`,image:z},{name:`Episode`,category:`Podcast`,url:`https://github.com/TryGhost/Episode`,previewUrl:`https://episode.ghost.io`,ref:`TryGhost/Episode`,image:A},{name:`Digest`,category:`Newsletter`,url:`https://github.com/TryGhost/Digest`,previewUrl:`https://digest.ghost.io/`,ref:`TryGhost/Digest`,image:T},{name:`Bulletin`,category:`Newsletter`,url:`https://github.com/TryGhost/Bulletin`,previewUrl:`https://bulletin.ghost.io/`,ref:`TryGhost/Bulletin`,image:S},{name:`Alto`,category:`Blog`,url:`https://github.com/TryGhost/Alto`,previewUrl:`https://alto.ghost.io`,ref:`TryGhost/Alto`,image:x},{name:`Dope`,category:`Magazine`,url:`https://github.com/TryGhost/Dope`,previewUrl:`https://dope.ghost.io`,ref:`TryGhost/Dope`,image:E},{name:`Wave`,category:`Podcast`,url:`https://github.com/TryGhost/Wave`,previewUrl:`https://wave.ghost.io`,ref:`TryGhost/Wave`,image:B},{name:`Edge`,category:`Photography`,url:`https://github.com/TryGhost/Edge`,previewUrl:`https://edge.ghost.io`,ref:`TryGhost/Edge`,image:O},{name:`Dawn`,category:`Newsletter`,url:`https://github.com/TryGhost/Dawn`,previewUrl:`https://dawn.ghost.io/`,ref:`TryGhost/Dawn`,image:w},{name:`Ease`,category:`Documentation`,url:`https://github.com/TryGhost/Ease`,previewUrl:`https://ease.ghost.io`,ref:`TryGhost/Ease`,image:D},{name:`Headline`,category:`News`,url:`https://github.com/TryGhost/Headline`,previewUrl:`https://headline.ghost.io`,ref:`TryGhost/Headline`,image:j},{name:`Ruby`,category:`Magazine`,url:`https://github.com/TryGhost/Ruby`,previewUrl:`https://ruby.ghost.io`,ref:`TryGhost/Ruby`,image:P},{name:`London`,category:`Photography`,url:`https://github.com/TryGhost/London`,previewUrl:`https://london.ghost.io`,ref:`TryGhost/London`,image:N},{name:`Journal`,category:`Newsletter`,url:`https://github.com/TryGhost/Journal`,previewUrl:`https://journal.ghost.io/`,ref:`TryGhost/Journal`,image:M}],H=``+new URL(`orb-black-1-bYPPSSAp.png`,import.meta.url).href,ae=``+new URL(`orb-black-2-C-rcujeh.png`,import.meta.url).href,U=``+new URL(`orb-black-3-DTkwRv_1.png`,import.meta.url).href,W=``+new URL(`orb-black-4-BXF3fMuE.png`,import.meta.url).href,G=``+new URL(`orb-black-5-94Eda1ek.png`,import.meta.url).href,K=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201818.2%202500'%20style='enable-background:new%200%200%201818.2%202500'%20xml:space='preserve'%3e%3ctitle%3egoogle-docs%3c/title%3e%3cpath%20d='M1136.4%200h-966C79.6%200%200%2079.5%200%20170.5v2159.1c0%2090.9%2079.5%20170.5%20170.5%20170.5h1477.3c90.9%200%20170.5-79.5%20170.5-170.5V681.8l-397.7-284.1L1136.4%200z'%20style='fill:%234285f4'/%3e%3cpath%20d='M454.5%201818.2h909.1v-113.6h-909l-.1%20113.6zm0%20227.3h681.8v-113.6H454.5v113.6zm0-795.5v113.6h909.1V1250H454.5zm0%20340.9h909.1v-113.6h-909l-.1%20113.6z'%20style='fill:%23f1f1f1'/%3e%3cpath%20d='M1136.4%200v511.4c0%2090.9%2079.5%20170.4%20170.4%20170.4h511.4L1136.4%200z'%20style='fill:%23a1c2fa'/%3e%3c/svg%3e`,q=``+new URL(`mailchimp-DwTEN-tS.svg`,import.meta.url).href,J=`data:image/svg+xml,%3csvg%20height='546'%20viewBox='0%200%20569%20546'%20width='569'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epatreon%3c/title%3e%3cg%20fill='%23FF424D'%3e%3ccircle%20cx='362.59'%20cy='204.59'%20data-fill='1'%20r='204.59'/%3e%3cpath%20data-fill='1'%20d='M0%200h100v545.8H0z'/%3e%3c/g%3e%3c/svg%3e`,Y=`data:image/svg+xml,%3csvg%20width='152'%20height='179'%20viewBox='0%200%20152%20179'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epaypal%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l-2.365%2015a4.168%204.168%200%200%200%204.118%204.818H69.76a6.948%206.948%200%200%200%206.863-5.865l.283-1.468%205.442-34.507.351-1.907a6.947%206.947%200%200%201%206.862-5.865h4.322c27.984%200%2049.896-11.37%2056.299-44.25%202.675-13.74%201.292-25.208-5.783-33.27-2.14-2.439-4.802-4.455-7.907-6.1'%20fill='%23238EC2'/%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l8.609-54.588-.267%201.711c.609-3.86%203.909-6.704%207.817-6.704h16.288c31.989%200%2057.037-12.996%2064.356-50.582.217-1.113.402-2.191.568-3.251'%20fill='%2320274F'/%3e%3cpath%20d='M56.978%2045.638a6.945%206.945%200%200%201%206.863-5.866h43.514c5.155%200%209.961.337%2014.356%201.045%201.256.202%202.478.435%203.665.698a53.92%2053.92%200%200%201%203.455.885c.558.162%201.106.333%201.646.512%202.157.717%204.166%201.562%206.015%202.541%202.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27L56.978%2045.638'%20fill='%23253667'/%3e%3c/g%3e%3c/svg%3e`,oe=``+new URL(`slackicon-37ETtpm7.png`,import.meta.url).href,se=`data:image/svg+xml,%3csvg%20width='86'%20height='89'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3etypeform%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M40.28%2087.561c12.464.154%2021.16-3.994%2030.135-12.175%208.975-8.18%2014.306-16.867%2014.741-28.73.436-11.862-3.412-21.43-12.564-30.581C63.441%206.923%2051.64.9%2039.4.899%2027.158.898%2018.967%206.252%2011.385%2016.07c-7.581%209.818-9.237%2022.212-9.894%2033.921-.657%2011.71-1.15%2017.111%206.608%2024.625%207.758%207.514%2019.718%2012.791%2032.182%2012.945z'%20stroke='%23262627'/%3e%3cpath%20d='M29.136%2037.976v-4.885h25.918v4.885H44.679v27.998H39.51V37.976z'%20fill='%23262627'%20fill-rule='nonzero'/%3e%3c/g%3e%3c/svg%3e`,ce=``+new URL(`zero-bounce-lzY95s9E.png`,import.meta.url).href,X=[{ghostImage:ae,appImage:oe,title:`Share scheduled posts with your team in Slack`,url:`https://zapier.com/webintent/create-zap?template=359499`},{ghostImage:U,appImage:J,title:`Connect Patreon to your Ghost membership site`,url:`https://zapier.com/webintent/create-zap?template=75801`},{ghostImage:W,appImage:ce,title:`Protect email delivery with email verification`,url:`https://zapier.com/webintent/create-zap?template=359415`},{ghostImage:G,appImage:Y,title:`Add members for successful sales in PayPal`,url:`https://zapier.com/webintent/create-zap?template=184423`},{ghostImage:U,appImage:Y,title:`Unsubscribe members who cancel a subscription in PayPal`,url:`https://zapier.com/webintent/create-zap?template=359348`},{ghostImage:H,appImage:K,title:`Send new post drafts from Google Docs to Ghost`,url:`https://zapier.com/webintent/create-zap?template=50924`},{ghostImage:W,appImage:se,title:`Survey new members using Typeform`,url:`https://zapier.com/webintent/create-zap?template=359407`},{ghostImage:H,appImage:q,title:`Sync email subscribers in Ghost + Mailchimp`,url:`https://zapier.com/webintent/create-zap?template=359342`}],Z=(0,_.createContext)({officialThemes:V,zapierTemplates:X,search:{filter:``,setFilter:()=>{},checkVisible:()=>!0,highlightKeywords:()=>``,noResult:!1,setNoResult:()=>{},registerComponent:()=>{},unregisterComponent:()=>{},getVisibleComponents:()=>new Set,isOnlyVisibleComponent:()=>!1},sortingState:[],offersShowArchived:!1,setOffersShowArchived:()=>{}}),Q=()=>(0,_.useContext)(Z),le=()=>Q().officialThemes,$=()=>Q().search,ue=()=>Q().upgradeStatus,de=()=>{let{sortingState:e,setSortingState:t}=Q();return{sortingState:e,setSortingState:t}},fe=()=>{let{offersShowArchived:e,setOffersShowArchived:t}=Q();return{offersShowArchived:e,setOffersShowArchived:t}},pe=t({default:()=>me});function me(){let{updateRoute:e}=l(),{zapierTemplates:t}=Q(),{data:{integrations:n}={integrations:[]}}=h(),{config:r}=p(),{mutateAsync:y}=ne(),b=i(),{confirm:x}=m(),[S,C]=(0,_.useState)(!1),w=r.hostSettings?.limits?.customIntegrations?.disabled,T=n.find(({slug:e})=>e===`zapier`),E=T?.api_keys?.find(e=>e.type===`admin`);return(0,_.useEffect)(()=>{w&&e(`integrations`)},[w,e]),(0,v.jsxs)(c,{cancelLabel:``,footer:(0,v.jsxs)(`div`,{className:`mx-8 flex w-full items-center justify-between`,children:[(0,v.jsxs)(`a`,{className:`mt-1 self-baseline font-bold`,href:`https://zapier.com/apps/ghost/integrations?utm_medium=partner_api&utm_source=widget&utm_campaign=Widget`,rel:`noopener noreferrer`,target:`_blank`,children:[`View more Ghost integrations powered by `,(0,v.jsx)(`span`,{children:(0,v.jsx)(`img`,{alt:`Zapier`,className:`relative top-[-2px] inline-block`,src:ie})})]}),(0,v.jsx)(o,{type:`button`,onClick:()=>{e(`integrations`)},children:`Close`})]}),okLabel:`Close`,okVariant:`default`,testId:`zapier-modal`,title:``,stickyFooter:!0,onClose:()=>{e(`integrations`)},onOk:()=>{e(`integrations`)},children:[(0,v.jsx)(te,{detail:`Automation for your favorite apps`,extra:(0,v.jsx)(`div`,{className:`mt-1 -mb-4`,children:(0,v.jsx)(g,{keys:[{id:`admin-api-key`,label:`Admin API key`,text:E?.secret,hint:S?(0,v.jsx)(`div`,{className:`text-green`,children:`Admin API Key was successfully regenerated`}):void 0,onRegenerate:()=>{!T||!E||(C(!1),x({title:`Regenerate Admin API Key`,prompt:`You will need to locate the Ghost App within your Zapier account and click on "Reconnect" to enter the new Admin API Key.`,okLabel:`Regenerate Admin API Key`,onOk:async e=>{try{await y({integrationId:T.id,apiKeyId:E.id}),C(!0),e?.remove()}catch(e){b(e)}}}))}},{id:`api-url`,label:`API URL`,text:window.location.origin+a().subdir}]})}),icon:(0,v.jsx)(re,{name:`zapier`,size:56}),title:`Zapier`}),(0,v.jsx)(ee,{children:t.map(e=>(0,v.jsxs)(d,{hover:!1,children:[(0,v.jsx)(u,{className:`flex items-center gap-3 py-2 pl-3`,children:(0,v.jsxs)(`div`,{className:`flex flex-col gap-4 md:flex-row md:items-center`,children:[(0,v.jsxs)(`div`,{className:`flex shrink-0 flex-nowrap items-center gap-2`,children:[(0,v.jsx)(`img`,{className:`size-8 object-contain dark:invert`,role:`presentation`,src:e.ghostImage}),(0,v.jsx)(s,{className:`size-3`}),(0,v.jsx)(`img`,{className:`size-8 object-contain`,role:`presentation`,src:e.appImage})]}),(0,v.jsx)(`span`,{children:e.title})]})}),(0,v.jsx)(f,{visibility:`hover`,children:(0,v.jsx)(o,{className:`h-auto p-0 font-semibold whitespace-nowrap text-[#FF4A00] hover:text-[#FF4A00]`,variant:`link`,asChild:!0,children:(0,v.jsx)(`a`,{href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:`Use this Zap`})})})]},e.url))})]})}export{$ as a,X as c,b as d,le as i,V as l,Z as n,de as o,fe as r,ue as s,pe as t,y as u};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<link rel="stylesheet" href="./assets/vendor-3bf602dfa6463c3400ffd81697767274.css">
|
|
5
5
|
<link rel="stylesheet" href="./assets/ghost-68f447a1796b93a1f128b649bac8506d.css">
|
|
6
|
-
<meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.
|
|
6
|
+
<meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.59%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%22206c3000ea%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%229587f53e3a%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D">
|
|
7
7
|
|
|
8
8
|
<meta charset="UTF-8" />
|
|
9
9
|
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
<link rel="shortcut icon" href="./assets/favicon-C_q1KHzv.ico" />
|
|
22
22
|
<link rel="apple-touch-icon" href="./assets/apple-touch-icon-DhO18_4B.png" />
|
|
23
|
-
<script type="module" crossorigin src="./assets/index-
|
|
23
|
+
<script type="module" crossorigin src="./assets/index-BJz9Zlsc.js"></script>
|
|
24
24
|
<link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-DAXXjFlN.js">
|
|
25
25
|
<link rel="modulepreload" crossorigin href="./assets/react-Bb3IsNbi.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="./assets/jsx-runtime-DX3WBWVO.js">
|
|
@@ -29,21 +29,24 @@
|
|
|
29
29
|
<link rel="modulepreload" crossorigin href="./assets/hooks-CJepWnbB.js">
|
|
30
30
|
<link rel="modulepreload" crossorigin href="./assets/dist-Cb5RSHSg.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="./assets/dist-CQJY6SVY.js">
|
|
32
|
-
<link rel="modulepreload" crossorigin href="./assets/dist-
|
|
33
|
-
<link rel="modulepreload" crossorigin href="./assets/Combination-
|
|
32
|
+
<link rel="modulepreload" crossorigin href="./assets/dist-CqO2lWS0.js">
|
|
33
|
+
<link rel="modulepreload" crossorigin href="./assets/Combination-BCm9FL4o.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="./assets/preload-helper-DYl5dUZ5.js">
|
|
35
|
-
<link rel="modulepreload" crossorigin href="./assets/chunk-KS7C4IRE-
|
|
36
|
-
<link rel="modulepreload" crossorigin href="./assets/router-provider-
|
|
35
|
+
<link rel="modulepreload" crossorigin href="./assets/chunk-KS7C4IRE-DCsL4i4D.js">
|
|
36
|
+
<link rel="modulepreload" crossorigin href="./assets/router-provider-Bexg1t-V.js">
|
|
37
37
|
<link rel="modulepreload" crossorigin href="./assets/text-DU9Hv33_.js">
|
|
38
38
|
<link rel="modulepreload" crossorigin href="./assets/shade-app-B3heOAfz-BhQXxNkT.js">
|
|
39
39
|
<link rel="modulepreload" crossorigin href="./assets/dist-myQaY0ka.js">
|
|
40
|
-
<link rel="modulepreload" crossorigin href="./assets/dist-
|
|
40
|
+
<link rel="modulepreload" crossorigin href="./assets/dist-CJJqYPep.js">
|
|
41
|
+
<link rel="modulepreload" crossorigin href="./assets/button-BshWPHvn.js">
|
|
41
42
|
<link rel="modulepreload" crossorigin href="./assets/dist-B2PvRwLn.js">
|
|
42
|
-
<link rel="modulepreload" crossorigin href="./assets/dist-
|
|
43
|
+
<link rel="modulepreload" crossorigin href="./assets/dist-CNlMj7ML.js">
|
|
44
|
+
<link rel="modulepreload" crossorigin href="./assets/dist-C1-Oy3Db.js">
|
|
43
45
|
<link rel="modulepreload" crossorigin href="./assets/input-surface-BdOe4KzO.js">
|
|
46
|
+
<link rel="modulepreload" crossorigin href="./assets/skeleton-D7hwjdry.js">
|
|
44
47
|
<link rel="modulepreload" crossorigin href="./assets/update-queries-C4CnvJaW.js">
|
|
45
48
|
<link rel="modulepreload" crossorigin href="./assets/users-DmGMPfw7.js">
|
|
46
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
49
|
+
<link rel="stylesheet" crossorigin href="./assets/index-Dg8cdR8E.css">
|
|
47
50
|
</head>
|
|
48
51
|
<body class="react-admin">
|
|
49
52
|
<div id="ember-alerts-wormhole"></div>
|
|
@@ -64,8 +67,8 @@
|
|
|
64
67
|
<div id="ember-notifications-wormhole"></div>
|
|
65
68
|
<script src="./assets/vendor-25f0bb2b2de85265afdf33da79f14a44.js"></script>
|
|
66
69
|
<script src="./assets/chunk.492.a9da46ca956b10116774.js"></script>
|
|
67
|
-
<script src="./assets/chunk.
|
|
68
|
-
<script src="./assets/chunk.524.
|
|
69
|
-
<script src="./assets/ghost-
|
|
70
|
+
<script src="./assets/chunk.301.5673a0caf7c49bb00212.js"></script>
|
|
71
|
+
<script src="./assets/chunk.524.86db0d945468c852374b.js"></script>
|
|
72
|
+
<script src="./assets/ghost-f110822e67868c9fdf9a6c23754b2559.js"></script>
|
|
70
73
|
</body>
|
|
71
74
|
</html>
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
const {SafeString, templates} = require('../../../../services/handlebars');
|
|
8
8
|
|
|
9
9
|
// We use the name input_password to match the helper for consistency:
|
|
10
|
-
|
|
10
|
+
// eslint-disable-next-line camelcase
|
|
11
|
+
module.exports = function input_password(options) {
|
|
11
12
|
options = options || {};
|
|
12
13
|
options.hash = options.hash || {};
|
|
13
14
|
|
|
@@ -11,7 +11,8 @@ const {SafeString} = require('../services/handlebars');
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
// We use the name body_class to match the helper for consistency
|
|
14
|
-
|
|
14
|
+
// eslint-disable-next-line camelcase
|
|
15
|
+
module.exports = function body_class(options) {
|
|
15
16
|
let classes = [];
|
|
16
17
|
const context = options.data.root.context || [];
|
|
17
18
|
const obj = this.post || this.page;
|
|
@@ -15,7 +15,8 @@ const messages = {
|
|
|
15
15
|
invalidData: 'The {{cancel_link}} helper was used outside of a subscription context. See https://ghost.org/docs/themes/members/#cancel-links.'
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
// eslint-disable-next-line camelcase
|
|
19
|
+
function cancel_link(options) {
|
|
19
20
|
let truncateOptions = (options || {}).hash || {};
|
|
20
21
|
|
|
21
22
|
if (this.id === undefined || this.cancel_at_period_end === undefined) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const {Color} = require('@tryghost/color-utils');
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// eslint-disable-next-line camelcase
|
|
4
|
+
module.exports = function color_to_rgba(color, alpha) {
|
|
4
5
|
const backgroundColor = (typeof color === 'string' && color.trim()) ? color.trim() : '#15171A';
|
|
5
6
|
const opacity = Number.isFinite(alpha) ? alpha : Number.parseFloat(alpha);
|
|
6
7
|
const normalizedOpacity = Number.isFinite(opacity) ? Math.max(0, Math.min(1, opacity)) : 0.25;
|
|
@@ -2,7 +2,8 @@ const {SafeString} = require('../services/handlebars');
|
|
|
2
2
|
const logging = require('@tryghost/logging');
|
|
3
3
|
const {getFrontendKey} = require('../services/proxy');
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// eslint-disable-next-line camelcase
|
|
6
|
+
module.exports = async function content_api_key() {
|
|
6
7
|
try {
|
|
7
8
|
const frontendKey = await getFrontendKey();
|
|
8
9
|
|
|
@@ -2,7 +2,8 @@ const {SafeString} = require('../services/handlebars');
|
|
|
2
2
|
const logging = require('@tryghost/logging');
|
|
3
3
|
const {urlUtils} = require('../services/proxy');
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// eslint-disable-next-line camelcase
|
|
6
|
+
module.exports = function content_api_url(options) {
|
|
6
7
|
let result;
|
|
7
8
|
const absoluteUrlRequested = getAbsoluteOption(options);
|
|
8
9
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const {textColorForBackgroundColor} = require('@tryghost/color-utils');
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// eslint-disable-next-line camelcase
|
|
4
|
+
module.exports = function contrast_text_color(color) {
|
|
4
5
|
const backgroundColor = (typeof color === 'string' && color.trim()) ? color.trim() : '#15171A';
|
|
5
6
|
|
|
6
7
|
try {
|
|
@@ -9,7 +9,8 @@ const {localUtils} = require('../services/handlebars');
|
|
|
9
9
|
/**
|
|
10
10
|
* @deprecated Use {{social_url type="facebook"}} instead.
|
|
11
11
|
*/
|
|
12
|
-
|
|
12
|
+
// eslint-disable-next-line camelcase
|
|
13
|
+
module.exports = function facebook_url(username, options) {
|
|
13
14
|
if (!options) {
|
|
14
15
|
options = username;
|
|
15
16
|
username = localUtils.findKey('facebook', this, options.data.site);
|
|
@@ -9,7 +9,8 @@ const _ = require('lodash');
|
|
|
9
9
|
const createFrame = hbs.handlebars.createFrame;
|
|
10
10
|
|
|
11
11
|
// We use the name ghost_foot to match the helper for consistency:
|
|
12
|
-
|
|
12
|
+
// eslint-disable-next-line camelcase
|
|
13
|
+
module.exports = function ghost_foot(options) {
|
|
13
14
|
const foot = [];
|
|
14
15
|
|
|
15
16
|
const globalCodeinjection = settingsCache.get('codeinjection_foot');
|
|
@@ -320,7 +320,8 @@ function getTinybirdTrackerScript(dataRoot) {
|
|
|
320
320
|
* Also see how the root object gets created, https://github.com/wycats/handlebars.js/blob/v4.0.6/lib/handlebars/runtime.js#L259
|
|
321
321
|
*/
|
|
322
322
|
// We use the name ghost_head to match the helper for consistency:
|
|
323
|
-
|
|
323
|
+
// eslint-disable-next-line camelcase
|
|
324
|
+
module.exports = async function ghost_head(options) {
|
|
324
325
|
debug('begin');
|
|
325
326
|
// if server error page do nothing
|
|
326
327
|
if (options.data.root.statusCode >= 500) {
|
|
@@ -107,9 +107,11 @@ function evaluateStringMatch(expr, str, ci) {
|
|
|
107
107
|
* @param {Object} data - global params
|
|
108
108
|
*/
|
|
109
109
|
function evaluateList(type, expr, obj, data) {
|
|
110
|
-
|
|
110
|
+
const props = expr.split(',').map(function (prop) {
|
|
111
111
|
return prop.trim().toLocaleLowerCase();
|
|
112
|
-
})
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
return props[type](function (prop) {
|
|
113
115
|
if (prop.match(/^@/)) {
|
|
114
116
|
return _.has(data, prop.replace(/@/, '')) && !_.isEmpty(_.get(data, prop.replace(/@/, '')));
|
|
115
117
|
} else {
|
|
@@ -12,7 +12,8 @@ const messages = {
|
|
|
12
12
|
forIsRequired: 'The {{link_class}} helper requires a for="" attribute.'
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
// eslint-disable-next-line camelcase
|
|
16
|
+
module.exports = function link_class(options) {
|
|
16
17
|
options = options || {};
|
|
17
18
|
options.hash = options.hash || {};
|
|
18
19
|
options.data = options.data || {};
|
|
@@ -6,7 +6,8 @@ const metaData = require('../meta');
|
|
|
6
6
|
const {getMetaDataDescription} = metaData;
|
|
7
7
|
|
|
8
8
|
// We use the name meta_description to match the helper for consistency:
|
|
9
|
-
|
|
9
|
+
// eslint-disable-next-line camelcase
|
|
10
|
+
module.exports = function meta_description(options) {
|
|
10
11
|
options = options || {};
|
|
11
12
|
|
|
12
13
|
return getMetaDataDescription(this, options.data.root) || '';
|
|
@@ -6,6 +6,7 @@ const metaData = require('../meta');
|
|
|
6
6
|
const {getMetaDataTitle} = metaData;
|
|
7
7
|
|
|
8
8
|
// We use the name meta_title to match the helper for consistency:
|
|
9
|
-
|
|
9
|
+
// eslint-disable-next-line camelcase
|
|
10
|
+
module.exports = function meta_title(options) {
|
|
10
11
|
return getMetaDataTitle(this, options.data.root, options);
|
|
11
12
|
};
|
|
@@ -7,6 +7,7 @@ const errors = require('@tryghost/errors');
|
|
|
7
7
|
const tpl = require('@tryghost/tpl');
|
|
8
8
|
const {slugify} = require('@tryghost/string');
|
|
9
9
|
const _ = require('lodash');
|
|
10
|
+
const labs = require('../../shared/labs');
|
|
10
11
|
|
|
11
12
|
const messages = {
|
|
12
13
|
invalidData: 'navigation data is not an object or is a function',
|
|
@@ -16,6 +17,84 @@ const messages = {
|
|
|
16
17
|
|
|
17
18
|
const createFrame = hbs.handlebars.createFrame;
|
|
18
19
|
|
|
20
|
+
/**
|
|
21
|
+
* @typedef {Object} NavigationItem
|
|
22
|
+
* @property {string} url
|
|
23
|
+
* @property {string} [label]
|
|
24
|
+
* @property {string} [icon]
|
|
25
|
+
* @property {string} [visibility]
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @typedef {Object} NavigationMember
|
|
30
|
+
* @property {'free' | 'paid' | string} status
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @param {string | null | undefined} icon
|
|
35
|
+
* @returns {string}
|
|
36
|
+
*/
|
|
37
|
+
function getNavigationIconName(icon) {
|
|
38
|
+
if (!icon) {
|
|
39
|
+
return '';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const filename = icon.split(/[?#]/)[0].split('/').filter(Boolean).pop() || '';
|
|
43
|
+
const name = filename.replace(/\.[^.]+$/, '');
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
return decodeURIComponent(name);
|
|
47
|
+
} catch (e) {
|
|
48
|
+
return name;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @param {string} href
|
|
54
|
+
* @param {string | undefined} url
|
|
55
|
+
* @returns {boolean}
|
|
56
|
+
*/
|
|
57
|
+
function isCurrentNavigationUrl(href, url) {
|
|
58
|
+
if (!url) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const strippedHref = href.replace(/\/+$/, '');
|
|
63
|
+
const strippedCurrentUrl = url.replace(/\/+$/, '');
|
|
64
|
+
return strippedHref === strippedCurrentUrl;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @param {NavigationItem} item
|
|
69
|
+
* @param {NavigationMember | null | undefined} member
|
|
70
|
+
* @returns {boolean}
|
|
71
|
+
*/
|
|
72
|
+
function isNavigationItemVisible(item, member) {
|
|
73
|
+
const visibility = item.visibility || 'public';
|
|
74
|
+
const isMember = !!member;
|
|
75
|
+
const isFreeMember = isMember && member.status === 'free';
|
|
76
|
+
const isPaidMember = isMember && member.status !== 'free';
|
|
77
|
+
|
|
78
|
+
switch (visibility) {
|
|
79
|
+
case 'members':
|
|
80
|
+
return isMember;
|
|
81
|
+
case 'paid':
|
|
82
|
+
return isPaidMember;
|
|
83
|
+
case 'public_free':
|
|
84
|
+
return !isMember || isFreeMember;
|
|
85
|
+
case 'public_paid':
|
|
86
|
+
return !isMember || isPaidMember;
|
|
87
|
+
case 'public_only':
|
|
88
|
+
return !isMember;
|
|
89
|
+
case 'free_members':
|
|
90
|
+
return isFreeMember;
|
|
91
|
+
case 'none':
|
|
92
|
+
return false;
|
|
93
|
+
default:
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
19
98
|
module.exports = function navigation(options) {
|
|
20
99
|
options = options || {};
|
|
21
100
|
options.hash = options.hash || {};
|
|
@@ -29,16 +108,17 @@ module.exports = function navigation(options) {
|
|
|
29
108
|
|
|
30
109
|
const navigationData = options.data.site[key];
|
|
31
110
|
const currentUrl = options.data.root.relativeUrl;
|
|
111
|
+
const member = options.data.member || options.data.root.member;
|
|
32
112
|
let output;
|
|
33
113
|
|
|
34
|
-
if (!
|
|
114
|
+
if (!Array.isArray(navigationData)) {
|
|
35
115
|
throw new errors.IncorrectUsageError({
|
|
36
116
|
message: tpl(messages.invalidData)
|
|
37
117
|
});
|
|
38
118
|
}
|
|
39
119
|
|
|
40
120
|
if (navigationData.filter(function (e) {
|
|
41
|
-
return (_.isUndefined(e.
|
|
121
|
+
return (_.isUndefined(e.url) || (_.isUndefined(e.label) && _.isUndefined(e.icon)));
|
|
42
122
|
}).length > 0) {
|
|
43
123
|
throw new errors.IncorrectUsageError({
|
|
44
124
|
message: tpl(messages.valuesMustBeDefined)
|
|
@@ -47,44 +127,55 @@ module.exports = function navigation(options) {
|
|
|
47
127
|
|
|
48
128
|
// check for non-null string values
|
|
49
129
|
if (navigationData.filter(function (e) {
|
|
50
|
-
return ((!_.isNull(e.label) && !_.isString(e.label)) ||
|
|
51
|
-
(
|
|
130
|
+
return ((!_.isUndefined(e.label) && !_.isNull(e.label) && !_.isString(e.label)) ||
|
|
131
|
+
(_.isNull(e.url) || !_.isString(e.url)));
|
|
52
132
|
}).length > 0) {
|
|
53
133
|
throw new errors.IncorrectUsageError({
|
|
54
134
|
message: tpl(messages.valuesMustBeString)
|
|
55
135
|
});
|
|
56
136
|
}
|
|
57
137
|
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const strippedHref = href.replace(/\/+$/, '');
|
|
65
|
-
const strippedCurrentUrl = url.replace(/\/+$/, '');
|
|
66
|
-
return strippedHref === strippedCurrentUrl;
|
|
67
|
-
}
|
|
138
|
+
// Icon and visibility are coerced rather than thrown on (see map below):
|
|
139
|
+
// a bad icon is dropped and an unrecognised visibility falls back to public,
|
|
140
|
+
// so malformed data can never 500 a whole site's front end.
|
|
68
141
|
|
|
69
142
|
// {{navigation}} should no-op if no data passed in
|
|
70
143
|
if (navigationData.length === 0) {
|
|
71
144
|
return new SafeString('');
|
|
72
145
|
}
|
|
73
146
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
147
|
+
const navigationIconsEnabled = labs.isSet('navigationIcons');
|
|
148
|
+
|
|
149
|
+
output = navigationData
|
|
150
|
+
.filter(item => navigationIconsEnabled ? isNavigationItemVisible(item, member) : true)
|
|
151
|
+
.map(function (e) {
|
|
152
|
+
const out = {};
|
|
153
|
+
const icon = navigationIconsEnabled && _.isString(e.icon) ? e.icon : null;
|
|
154
|
+
const iconName = getNavigationIconName(icon);
|
|
155
|
+
const hasLabel = _.isString(e.label) && e.label.trim().length > 0;
|
|
156
|
+
|
|
157
|
+
out.current = isCurrentNavigationUrl(e.url, currentUrl);
|
|
158
|
+
out.icon = icon || null;
|
|
159
|
+
out.iconAlt = hasLabel ? '' : iconName;
|
|
160
|
+
out.label = hasLabel ? e.label : null;
|
|
161
|
+
out.slug = slugify(hasLabel ? e.label : iconName);
|
|
162
|
+
out.url = e.url;
|
|
163
|
+
return out;
|
|
164
|
+
})
|
|
165
|
+
// Nothing to render: an icon-only item with the icons flag off would be an empty link
|
|
166
|
+
.filter(item => item.icon || item.label);
|
|
167
|
+
|
|
168
|
+
if (output.length === 0) {
|
|
169
|
+
return new SafeString('');
|
|
170
|
+
}
|
|
82
171
|
|
|
83
172
|
// CASE: The navigation helper should have access to the navigation items at the top level.
|
|
84
173
|
this.navigation = output;
|
|
85
174
|
// CASE: The navigation helper will forward attributes passed to it.
|
|
86
175
|
_.merge(this, options.hash);
|
|
87
176
|
const data = createFrame(options.data);
|
|
177
|
+
// The template only wraps labels/renders icons when the flag is on, so pre-flag markup is unchanged
|
|
178
|
+
data.navigationIcons = navigationIconsEnabled;
|
|
88
179
|
|
|
89
180
|
return templates.execute('navigation', this, {data});
|
|
90
181
|
};
|
|
@@ -8,7 +8,8 @@ const metaData = require('../meta');
|
|
|
8
8
|
const getPaginatedUrl = metaData.getPaginatedUrl;
|
|
9
9
|
|
|
10
10
|
// We use the name page_url to match the helper for consistency:
|
|
11
|
-
|
|
11
|
+
// eslint-disable-next-line camelcase
|
|
12
|
+
module.exports = function page_url(page, options) {
|
|
12
13
|
if (!options) {
|
|
13
14
|
options = page;
|
|
14
15
|
page = 1;
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
const {SafeString} = require('../services/handlebars');
|
|
6
6
|
|
|
7
7
|
// We use the name post_class to match the helper for consistency:
|
|
8
|
-
|
|
8
|
+
// eslint-disable-next-line camelcase
|
|
9
|
+
module.exports = function post_class() {
|
|
9
10
|
let classes = ['post'];
|
|
10
11
|
|
|
11
12
|
const tags = this.post && this.post.tags ? this.post.tags : this.tags || [];
|
|
@@ -15,7 +15,8 @@ const {SafeString} = require('../services/handlebars');
|
|
|
15
15
|
|
|
16
16
|
const {readingTime: calculateAndFormatReadingTime} = require('@tryghost/helpers');
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
// eslint-disable-next-line camelcase
|
|
19
|
+
module.exports = function reading_time(options) {
|
|
19
20
|
options = options || {};
|
|
20
21
|
options.hash = options.hash || {};
|
|
21
22
|
const possiblyPost = this;
|
|
@@ -45,7 +45,8 @@ const SOCIAL_PLATFORMS = [
|
|
|
45
45
|
{type: 'instagram', name: 'Instagram'}
|
|
46
46
|
];
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
// eslint-disable-next-line camelcase
|
|
49
|
+
module.exports = function social_accounts(source, options) {
|
|
49
50
|
// {{#social_accounts}} with no positional arg: handlebars passes only options.
|
|
50
51
|
if (arguments.length < 2) {
|
|
51
52
|
throw new errors.IncorrectUsageError({
|
|
@@ -6,7 +6,8 @@ const {socialUrls} = require('../services/proxy');
|
|
|
6
6
|
const {localUtils} = require('../services/handlebars');
|
|
7
7
|
|
|
8
8
|
// We use the name social_url to match the helper for consistency:
|
|
9
|
-
|
|
9
|
+
// eslint-disable-next-line camelcase
|
|
10
|
+
module.exports = function social_url(options) {
|
|
10
11
|
// Check for required hash option 'type'
|
|
11
12
|
if (!options || !options.hash || !options.hash.type) {
|
|
12
13
|
return null;
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
const {SafeString} = require('../services/handlebars');
|
|
5
5
|
const {memberCountRounding, getMemberStats} = require('../utils/member-count');
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
// eslint-disable-next-line
|
|
8
|
+
module.exports = async function total_members () {
|
|
8
9
|
if (this.total) {
|
|
9
10
|
return new SafeString(memberCountRounding(this.total));
|
|
10
11
|
} else {
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
const {SafeString} = require('../services/handlebars');
|
|
4
4
|
const {memberCountRounding, getMemberStats} = require('../utils/member-count');
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
// eslint-disable-next-line
|
|
7
|
+
module.exports = async function total_paid_members () {
|
|
7
8
|
if (this.paid) {
|
|
8
9
|
return new SafeString(memberCountRounding(this.paid));
|
|
9
10
|
} else {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<ul class="nav">
|
|
2
2
|
{{#foreach navigation}}
|
|
3
|
-
<li class="{{link_class for=(url) class=(concat "nav-" slug)}}"><a href="{{url absolute="true"}}">{{label}}</a></li>
|
|
3
|
+
<li class="{{link_class for=(url) class=(concat "nav-" slug)}}"><a href="{{url absolute="true"}}">{{#if @navigationIcons}}{{#if icon}}<img class="nav-icon" src="{{icon}}" alt="{{iconAlt}}">{{/if}}{{#if label}}<span class="nav-label">{{label}}</span>{{/if}}{{else}}{{label}}{{/if}}</a></li>
|
|
4
4
|
{{/foreach}}
|
|
5
5
|
</ul>
|
|
@@ -9,7 +9,8 @@ const {localUtils} = require('../services/handlebars');
|
|
|
9
9
|
/**
|
|
10
10
|
* @deprecated Use {{social_url type="twitter"}} instead.
|
|
11
11
|
*/
|
|
12
|
-
|
|
12
|
+
// eslint-disable-next-line camelcase
|
|
13
|
+
module.exports = function twitter_url(username, options) {
|
|
13
14
|
if (!options) {
|
|
14
15
|
options = username;
|
|
15
16
|
username = localUtils.findKey('twitter', this, options.data.site);
|