Commit Graph

39872 Commits

Author SHA1 Message Date
Steve Larson
fb27c79b27 Updated donations tests to try to handle Stripe changes (#21607)
no ref

Stripe made changes (again) that causes our donation tests to fail. This
round we use an if statement to try to make it more inclusive of cases,
as I've seen them use an accordion button, card button, and no button
all in the past 12h.
2024-11-13 12:09:45 -06:00
Djordje Vlaisavljevic
c3ef2f111b Improved Inbox view UI (#21600)
ref https://linear.app/ghost/issue/AP-521/improve-inbox-view-alignmentstructure

- Improved the layout, spacing and typography of Inbox view
- Removed attachment counters for images in Inbox view
- Added a very very small variant of `APAvatar`
2024-11-13 12:09:45 -06:00
renovate[bot]
6d96d0d418 Updated Koenig packages (#21606)
ref https://linear.app/ghost/issue/ENG-1751

- changelog: 9ed048c5ff
2024-11-13 12:09:45 -06:00
Ronald Langeveld
d56b3355c8 Fixed broken Stripe donations browser tests (#21605)
no issue

Stripe recently updated their checkout page to use React with Framer
Motion for animations, causing our Playwright tests to intermittently
fail when attempting to click the “Card” payment button. The standard
Playwright `.click()` method was unable to interact with the button
reliably due to animation-related delays, where the button was present
in the DOM but not fully interactable according to Playwright’s strict
visibility checks.

Switching to `dispatchEvent('click')` directly fires the click event on
the button, bypassing Playwright’s visibility and interactability
checks. This ensures the test can proceed without waiting for animations
to fully complete, resolving the issue with the Stripe checkout flow.
2024-11-13 12:09:45 -06:00
Princi Vershwal
64819ad05c Added 2fa to re-authenticate flow inside the editor (#21599)
Ref
https://linear.app/ghost/issue/ENG-1625/re-authenticate-flow-inside-the-editor-doesnt-support-2fa
2024-11-13 12:09:45 -06:00
Steve Larson
c3c4377395 Fixed flaky batch sending tests (#21604)
ref https://linear.app/ghost/issue/ENG-1749

Batch sending tests were failing with MySQL fairly regularly. It appears
to be a race condition where the listener for the batch sending job
having completed is returning too early, causing the subsequent
Bookshelf data model refresh to happen too soon.

This is a fundamental flaw in the JobManager awaitCompletion handler
(and how the batch sending system interacts with it) as there's no way
to identify one batch from another - they all use the same name, and we
don't pass along any metadata.
2024-11-13 12:09:45 -06:00
Kevin Ansfield
2474abca9d Fixed flaky avatar saturation test in comments-ui
no issue

- running tests locally, especially in UI mode, would often result in an avatar saturation test failing
- the cause was calculating saturation for an element that still had it's opacity animating in
- added a test util function that waits for an element in a frame to reach full opacity
- used function in test to ensure we have a stable element before calculating the color saturation
2024-11-13 12:09:45 -06:00
Michael Barrett
c54bcd1120 Fixed inbox tab not showing user's own posts in admin-x-activitypub (#21601)
refs
[AP-588](https://linear.app/ghost/issue/AP-588/inbox-tab-not-showing-users-own-posts)

Fixed inbox tab not showing user's own posts in admin-x-activitypub by
ensuring that the `includeOwn` parameter is set to `true` when fetching
the activities for the inbox tab
2024-11-13 12:09:45 -06:00
Fabien 'egg' O'Carroll
c79cf3b687 Handled non-string preferredUsername values (#21598)
ref https://linear.app/ghost/issue/AP-585

If preferredUsername is not a string, and we attempt to render it, we
will crash the entire React application!
2024-11-13 12:09:45 -06:00
John O'Nolan
e4654e8a9b Updated link to Pintura integration 2024-11-13 12:09:45 -06:00
Kevin Ansfield
ed8a32d826 Updated email golden-post snapshot to match modified bookmark rendering
ref https://github.com/TryGhost/Koenig/pull/1388

- includes new truncation of bookmark card content
2024-11-13 12:09:45 -06:00
renovate[bot]
85a18fb556 Update Koenig packages 2024-11-13 12:09:45 -06:00
matsbst
0c648cdc94 🌐 Translated newsletter.json to Norwegian (#21595)
Complete translation of newsletter to Norwegian 🇳🇴
2024-11-13 12:09:45 -06:00
Sunghyun Kim
0765d33d11 🌐 Added Korean i18n translations (#21577)
ref ONC-557
2024-11-13 12:09:45 -06:00
jubi-git
a74d1e7ce0 🌐 Added Dutch (nl) locale to newsletter.json (#21588)
ref ONC-565
2024-11-13 12:09:45 -06:00
Christian Schou
998c18a7f9 🌐 Updated Danish (dk) Translations (#21593)
Updated the translations with missing Danish translations for comments,
newsletter, portal, and search.
2024-11-13 12:09:45 -06:00
Sodbileg Gansukh
f515d86873 Fixed embeddable signup form preview and generated code (#21592)
ref ENG-1671
2024-11-13 12:09:45 -06:00
Princi Vershwal
11d114f723 🐛 Fixed Admin navigation settings, pressing ENTER will now create a new navigation item (#21591)
Ref
https://linear.app/ghost/issue/DES-73/enter-should-create-new-navigation-itemmove-to-next-field
2024-11-13 12:09:45 -06:00
Sodbileg Gansukh
37b66e76b9 Fixed table row hover effect in Safari (#21586)
ref DES-951
2024-11-13 12:09:45 -06:00
Sam Lord
1067468dd5 Changed SSO adapter to automatically verify sessions (#21388)
ref ENG-1680

SSO is a different flow that wouldn't need the extra email verification
flow
2024-11-13 12:09:45 -06:00
Djordje Vlaisavljevic
2e38a080a5 Stopped loading spinner flash when you first open Search page (#21569)
close
https://linear.app/ghost/issue/AP-531/search-spinner-flashes-for-a-split-second-when-switching-tab-for-the

- Fixed the logic for displaying “loading” and “no results found” states
- Refactored the component to avoid nested ternaries
2024-11-13 12:09:45 -06:00
Sodbileg Gansukh
fd0e7859d6 Added custom fonts (#21564)
ref DES-949

This adds custom fonts feature allowing users to select heading and body fonts for their themes from a curated list. This allows publishers to have more control over their brand, and allows themes to have a wider range of styles to appeal to different audiences. 

Without custom fonts support, themes will continue to work as normal, but users won't be able to customize their typography. As for the official themes, all of them will support custom fonts.

---------

Co-authored-by: Aileen Booker <AileenCGN@gmail.com>
2024-11-13 12:09:45 -06:00
Djordje Vlaisavljevic
97c0d36a9c Fixed Articles appearing squeezed when opened from Notifications or Profile (#21587)
close
https://linear.app/ghost/issue/AP-581/article-content-appears-squeezed-when-opened-from-notifications-or
2024-11-13 12:09:45 -06:00
Ronald Langeveld
c329895119 Added new hidden comments API implementation (#21444)
ref PLG-227

- Behind flags
- Changed Comments API for members and guests to not return hidden or
removed comments - with the only exception being if a hidden or removed
comment have published replies, in which case it will be greyed out as
per the previous version on the UI.
- Wired up a new admin API endpoint for comment to receive all comments.
It's on par with the members / guests endpoint, with the difference
being that it it shows hidden comment's content, where previously the
html property was nullified.
2024-11-13 12:09:45 -06:00
Bastien
d4fe83e877 🌐 Improved French translations (#21570)
ref https://ghost.org/changelog/internationalization/

- I've changed "email" to "e-mail", which is more correct in French. The
official term is "courriel" but it sounds a bit old-fashioned.
- Apart from that, I've made a few harmonisations and small corrections to
ensure consistency between the files.
2024-11-13 12:09:45 -06:00
Chris Raible
a27ce3dfac Added connection pool metrics to prometheus client (#21576)
ref
https://linear.app/ghost/issue/ENG-1592/start-monitoring-connection-pool-utilization-in-ghost

- This commit adds prometheus metrics to the connection pool so we can
start to track connection pool utilization, number of pending acquires,
and also adds some basic SQL query summary metrics like queries per
minute and query duration percentiles.
- The connection pool has now been theorized to be a main constraint of
Ghost for some time, but it's been challenging to get actual visibility
into the state of the connection pool. With this change, we should be
able to directly observe, monitor and alert on the connection pool.
- Updated grafana version to fix a bug in the query editor that was
fixed in 8.3, even though this is a couple versions ahead of production
2024-11-13 12:09:45 -06:00
Ghost CI
9373e86bb4 v5.100.1 2024-11-13 12:09:45 -06:00
Hannah Wolfe
8ca4bb01a1 Moved newsletter date localisation behind labs flag (#21575)
ref https://github.com/TryGhost/Ghost/pull/21573

- We discussed this, and figured we should get this behind the flag for
now, even though it's pulled
- This gives us the ability to do a fast revert if we have to later,
which is the point of having the labs "GA FEATURES" array
- Note this removes the labsEnabled variable in the tests to make it
clearer if the flag is off or on (it was off!)
2024-11-13 12:08:05 -06:00
Hannah Wolfe
dac3360ae5 🐛 Fixed newsletter not sending if locale is invalid (#21573)
ref https://github.com/moment/luxon/blob/master/docs/intl.md

- We noticed the following error trace: RangeError: Incorrect locale
information provided
at BatchSendingService.retryDb
(/home/ghost/node_modules/@tryghost/email-service/lib/BatchSendingService.js:639:32)
    at new DateTimeFormat (<anonymous>)
at getCachedDTF
(/home/ghost/node_modules/luxon/build/node/luxon.js:621:11)
at new PolyDateFormatter
(/home/ghost/node_modules/luxon/build/node/luxon.js:842:16)
at Locale.dtFormatter
(/home/ghost/node_modules/luxon/build/node/luxon.js:1066:12)
at Formatter.dtFormatter
(/home/ghost/node_modules/luxon/build/node/luxon.js:2274:21)
at Formatter.formatDateTime
(/home/ghost/node_modules/luxon/build/node/luxon.js:2280:17)
at DateTime.toLocaleString
(/home/ghost/node_modules/luxon/build/node/luxon.js:6893:78)
at formatDateLong
(/home/ghost/node_modules/@tryghost/email-service/lib/EmailRenderer.js:45:74)
at Object.getValue
(/home/ghost/node_modules/@tryghost/email-service/lib/EmailRenderer.js:683:47)
at
/home/ghost/node_modules/@tryghost/email-service/lib/SendingService.js:158:36
    at Array.map (<anonymous>)
at
/home/ghost/node_modules/@tryghost/email-service/lib/SendingService.js:154:54
    at Array.map (<anonymous>)
at SendingService.buildRecipients
(/home/ghost/node_modules/@tryghost/email-service/lib/SendingService.js:151:24)
at SendingService.send
(/home/ghost/node_modules/@tryghost/email-service/lib/SendingService.js:127:33)
at response.retryDb
(/home/ghost/node_modules/@tryghost/email-service/lib/BatchSendingService.js:451:51)
- This is due to the locale being user-input - it can be set to any
string.
- In our email sending code we pass the string to luxon to format dates,
which errors if the locale is not valid according it Intl.
- This fix ensures that the locale is valid before passing it to luxon,
falling back to en-gb if the locale is not valid
2024-11-13 12:08:05 -06:00
Chris Raible
7deaedcf1f Removed nodemon in favor of node --watch (#21572)
no issue

- We had reintroduced nodemon in
af0f26c75f (diff-bf18f8caf848e17b35e266db04bcaeaad05a3e5d069846615d2b1260482396e1)
for the docker setup, but it has since caused some issues with the `yarn
dev` script.
- In particular, it was causing a restart while migrations were running
in development, which left a migration lock on and prevented Ghost from
starting.
- This commit removes nodemon and replaces it with node --watch, which
we had been using in the past without issues.
2024-11-13 12:08:05 -06:00
Chris Raible
cfd1665d31 Fixed CPU Usage chart in grafana dashboard (#21568)
ref
https://linear.app/ghost/issue/ENG-1505/start-monitoring-ghosts-constraints-and-our-3-goals-using-prometheus

- Using `irate` for aggregating CPU usage was resulting in some strange
behavior — the CPU Usage chart would zero out after a few mins of
running. Switching to regular `rate` seems to have fixed the issue
completely.
2024-11-13 12:08:05 -06:00
Djordje Vlaisavljevic
6329832dfe Bumped admin-x-activitypub package
ref https://linear.app/ghost/issue/AP-522/inbox-view-thumbnail-size-inconsistencies
2024-11-13 12:08:05 -06:00
Djordje Vlaisavljevic
8d94ab301f Made hover states for list items look nicer
ref https://linear.app/ghost/issue/AP-506/suggested-profiles-hover-refinement, https://linear.app/ghost/issue/AP-530/notifications-list-hover-state-is-inconsistent-with-the-rest, https://linear.app/ghost/issue/AP-516/profile-view-hover-state-on-profile
2024-11-13 12:08:05 -06:00
Djordje Vlaisavljevic
6b32ac3842 Made all thumbnails in Inbox layout the same width
ref https://linear.app/ghost/issue/AP-522/inbox-view-thumbnail-size-inconsistencies
2024-11-13 12:08:05 -06:00
Djordje Vlaisavljevic
9483639995 Improved ActivityPub drawer view UI (#21521)
ref https://linear.app/ghost/issue/AP-507/inbox-view-missing-min-width-for-inbox-card, https://linear.app/ghost/issue/AP-562/remove-unused-viewfollowersmodal-and-viewfollowingmodal-files, https://linear.app/ghost/issue/AP-559/add-post-stats-and-buttons-to-articles-in-drawer-view, https://linear.app/ghost/issue/AP-468/drawer-visual-refinements, https://linear.app/ghost/issue/AP-558/add-actor-info-to-articles-in-drawer-view, https://linear.app/ghost/issue/AP-573/add-anchor-link-to-replies-in-the-drawer

- Made `Articles` in drawer view wider for better reading experience
- Added `Actor` info to `Articles` in drawer view for more context about who posted it
- Added `Like` and `Reply` buttons and counters to `Articles` in drawer view
- Clicking on a Reply notification or Reply icon in the drawer view now scrolls you directly to replies
- Removed modals we’re no longer using
- Updated `RoutingProvider` so it can work without any modals passed to
it
2024-11-13 12:08:05 -06:00
Bastien
9a3f6e7148 🌐 Updated French translations (#21498)
ref https://ghost.org/changelog/internationalization/

- It's difficult out of context to know whether to use an infinitive,
_Ajouter votre commentaire_ or an imperative, _Ajoutez votre
commentaire_. English doesn't make the difference, but French does. By
default, an infinitive is preferable because it remains a suggestion,
whereas an imperative gives an order. For example, I think that _Ajoutez
votre commentaire_ is not relevant, because you don't necessarily have
to add a comment, but you can, so you should say _Ajouter votre
commentaire_. I've tried to be as precise as possible, but you may need
to make some adjustments with the context.

- I find that the word _membre_ is too literal a translation of the
English language and includes too many innuendos such as "member of a
community", "member of a clan", "member of a club", and frankly, it's
not relevant to many blogs. The word _abonné_ is more relevant, because
it doesn't imply a social affiliation. As for the discussion, I've even
taken the liberty of writing _discussion entre lecteurs_, because that's
essentially what it is. It's not a discussion between members or
subscribers, it's a discussion between _readers_.

- Some placeholders are completely American (Jamie Larson), so I've
replaced him with a French one (Jean Martin).

- Complimentary is a word that I didn't understand in the context of
Ghost. I have the impression that it means _offert_, but I don't
understand when it's used.
2024-11-13 12:08:04 -06:00
Ghost CI
3c3215f2ff v5.100.0 2024-11-13 12:08:04 -06:00
Daniël van der Winden
25e8776246 Custom Integrations and Webhooks layout fixes (#21565)
fixes
https://linear.app/ghost/issue/DES-790/some-urls-not-wrapping-in-integration-detail-modal

- Webhook URLs were breaking out of the modal container. They now wrap
across a few lines.
- Long descriptions of Custom Integrations caused the integration's icon
to scale down. That no longer happens.
- Descriptions of Custom Integrations wrap properly.
2024-11-13 12:08:04 -06:00
Fabien 'egg' O'Carroll
5fdb2c661f Initialised ActivityPub integration on boot (#21558)
refs https://linear.app/ghost/issue/AP-500

We've got a new @tryghost/activitypub package, which is gonna handle all
of the wiring between Ghost and ActivityPub. Currently that is just the
configuration of webhooks for the internal ActivityPub integration.

All this logic is run on the boot of Ghost, though notably in a
non-blocking manner, it's initialised as part of the background services
so it should not have an effect on the time to serving requests. having
said that - it needs to be defensive against errors, which is why the
entire network request is in a try/catch, as well as lookups for the
integration able to handle missing data.

Unit tests use an in-memory sqlite instance, which means we're testing a
full flow, ideally there would be a way to get the schema from Ghost for
this, but for now this is acceptable IMO.
2024-11-13 12:08:04 -06:00
Fabien 'egg' O'Carroll
451ba39cc5 Added Ghost ActivityPub internal integration (#21540)
refs https://linear.app/ghost/issue/AP-500

Rather than having to manually create an integration for communication
with the ActivityPub service, we are going to have an internal
integration which will then be used to handle webhooks between Ghost &
ActivityPub

The 'internal' type has been used to keep it out of the UI/API but
available for all Pro customers, which is necessary during the private
beta.

---------

Co-authored-by: Michael Barrett <mike@ghost.org>
2024-11-13 12:08:04 -06:00
Hannah Wolfe
13db207955 Added i18n for portal, newsletters, search, comments, etc (#21547)
ref https://ghost.org/changelog/internationalization/ closes:
https://linear.app/ghost/issue/ENG-1038/make-month-and-year-translatable

- This takes our automatic translations feature out of beta
- Translations are available in ~60 languages, although many are not yet complete
- Translations cover portal, comments, search, newsletter emails and member transactional emails
- If you find a missing translation, you can contribute it in the Ghost repo, by editing the files here: https://github.com/TryGhost/Ghost/tree/main/ghost/i18n/locales
- This feature was created 100% by the Ghost community

Co-authored-by: Cathy Sarisky <42299862+cathysarisky@users.noreply.github.com>
2024-11-13 12:08:04 -06:00
Daniel Sjöberg
f89bf06b7f 🌐 Updated swedish translations (#21562)
ref https://ghost.org/changelog/internationalization/

- added missing Swedish translations and improved a few existing
ones
2024-11-13 12:08:04 -06:00
Andrei Hodorog
384382342f 🌐 Updated Romanian translations (#21550)
ref https://ghost.org/changelog/internationalization/
2024-11-13 12:08:04 -06:00
echobilisim3421
3d1825060b Updated Turkish translations
ref https://ghost.org/changelog/internationalization/
2024-11-13 12:08:04 -06:00
echobilisim3421
6c0ce38ec5 🌐 Updated Turkish translations (#21553)
ref https://ghost.org/changelog/internationalization/
2024-11-13 12:08:04 -06:00
Daniël van der Winden
d09b97756e Revert "Admin navigation settings fix (#21323)" (#21563)
This reverts commit eaed33972f.

The fix we shipped for using the `RETURN` key to create navigation items
in Admin broke something with regards to saving the URL, so we're
reverting that change.
2024-11-13 12:08:04 -06:00
Sanne de Vries
3f613a2b6a Fixed comments dropdown menu being cutoff by iframe (#21555)
REF https://linear.app/ghost/issue/PLG-255/dropdown-cut-off-by-iframe
- Avoided menu cutoff by positioning the dropdown of the last comment
above the MoreButton
2024-11-13 12:08:04 -06:00
Cathy Sarisky
056ac0580a 🐛 Fixed translations not being picked up in newsletters without reboot (#21549)
ref https://ghost.org/changelog/internationalization/

- this fixes an error in which changing the language (or sliding the i18n
toggle) didn't correctly update email-service.

---------

Co-authored-by: Sag <guptazy@gmail.com>
2024-11-13 12:08:04 -06:00
Kevin Ansfield
48703c7f53 Added in-reply-to support to comments API
ref https://linear.app/tryghost/issue/PLG-230

- adds `in_reply_to_id` to API output
- adds `in_reply_to_snippet` to API output
  - dynamically generated from the HTML of the replied-to comment
  - excluded if the replied-to comment has been deleted or hidden
- adds `commentSnippet` to `@tryghost/html-to-plaintext`
  - skips anchor tag URLs as they won't be useful for snippet purposes
  - skips blockquotes so the snippet is more likely to contain the unique content of the replied-to comment when it's quoting a previous comment
  - returns a single line (no newline chars)
- allows setting `in_reply_to_id` when creating comments
  - id must reference a reply with the same parent
  - id must reference a published comment
- adds email notification for the original reply author when their comment is replied to
2024-11-13 12:08:04 -06:00
Kevin Ansfield
a49ac68b10 Added comments.in_reply_to_id column migration
ref https://linear.app/tryghost/issue/PLG-230

- `comments.in_reply_to_id` will be used to keep a reference to the comment that the new comment was directed at
- used only for replies-to-replies, will be `null` for the top-level parent and `null` for any replies directly to that parent
- technically allows for infinite nesting within a parent comment thread but we won't be using that ability for now
- `comments.parent_id` will be kept as it provides a useful optimisation for loading the top-level comments list
- we're not using `comments.parent_id` for this to keep complexity down and avoid the need for recursive lookups
2024-11-13 12:08:04 -06:00