Commit Graph

20728 Commits

Author SHA1 Message Date
renovate[bot]
9a93a5cfc6 Pin dependency i18n-iso-countries to 7.12.0 2024-10-02 07:28:28 +00:00
Peter Zimon
7cb8cbdf7a
Showing country names instead of codes in Stats (#21172)
[ANAL-53](https://linear.app/tryghost/issue/ANAL-53/10-stats-page-engineering-stuff)

- So far only country codes were displayed instead of human readable country names in the Stats page
2024-10-02 09:17:06 +02:00
Chris Raible
bf7320cfb7
Fixed test that left an instance of ghost running (#21178)
no issue

- This test file starts a Ghost server, but doesn't close it, which can
cause other tests to fail when they try to start an instance of Ghost,
with an `EADDRINUSE` error.
- This change closes the server in the `after` hook
2024-10-01 17:22:48 -07:00
Leif Singer
6965254b3f
🌐 Added German translations for search (#21163)
no ref

This PR adds the translations for `search.js`. It's a bit opinionated in
that ...
- it uses the Anglicism "Posts" to ... "translate" ... "Posts" 😆;
- it uses an asterisk to make sure we address all genders when
translating "authors".

Happy to discuss. ☺️
2024-10-01 21:55:42 +00:00
Cathy Sarisky
6501f1d41b
🌐 Added Kazakh locale and translations (#21174)
no ref

This is a merge & tidy up of [[ayangizzat](https://github.com/ayangizzat)] 's original (https://github.com/TryGhost/Ghost/pull/20698), which was missing the changes to locale, causing folders & files not to generate correctly. All credit goes to @ayangizzat , and thank you for your work!

Kazakh-speaking help still needed for search.json, which is untranslated, and the addition of a few other new strings, and refinements anywhere needed. Please add comments if not yet merged, or open a new PR if already merged.

---------

Co-authored-by: ayangizzt
2024-10-01 21:45:03 +00:00
Cathy Sarisky
b9547cc120
Improved i18n tests to include commits with missing i18n.js entries (#21175)
no ref

We've had several PRs for new locales that forgot to update i18n.js,
which causes them not to get regenerated by yarn translate. This PR
checks for that error, and also the reverse one where they update i18n
but we're missing folders. (Never expected to error, because 'yarn test'
is defined to include 'yarn translate', which generates the folders.)
2024-10-01 15:04:21 -05:00
Kevin Ansfield
3bbe8c8c7a
Fixed bugs in post's change-access context menu flow (#21173)
ref 86d61304b1
ref https://linear.app/tryghost/issue/ONC-323

- added `tracked()` to our proxy model object properties
  - fixes default data always showing when opening the modal
- fixed data push after completing modal
- `post.tiers` is set up as an attribute in Admin rather than a relationship
- fixes incorrect tiers list showing when the change access modal is opened again after changing access before the post is re-fetched from the API
- fixed flash of failure button state when saving modal changes
- expanded tests to cover tiers selection
2024-10-01 17:16:23 +00:00
Peter Zimon
8aaac5abe1
Stats page design fixes (#21171)
[ANAL-95](https://linear.app/tryghost/issue/ANAL-95/internal-beta-qa)

Various design refinements and fixes for the Stats page:
- Updated scroll area in detail modals so that the Close button and the footer is never outside the viewport
- The detail modal didn't close after clicking on the filter values
- "Show all" button was displayed also when there were no new items in the detail modal
- Dropdown styles needed a visual update: the toggles were way too huge and inconsistent with other dropdowns
- If no audience was selected we still showed stats. Now it's displaying the default empty screen in this case
- Click through filter indicators had low discoverability
- Technical data styles needed some love: changed the alignment and color scheme
- Mobile size viewports were not handled
- The google favicon API returned 404 many times for sources. Swapped the service for another one that returns favicons more reliably
- Default favicon was not handled. Now it comes from static.ghost.org
2024-10-01 17:51:55 +02:00
Cathy Sarisky
d8c4dfef99
Added content_api_key helper (#21151)
no ref

This very small helper adds {{content_api_key}} to the collection of handlebars helpers available to theme creators. This will make it easier for themes to access the content API key, without either requiring the user to get it from the integrations page and input it on the theme setting page or resorting to JavaScript to read it from one of the built-in script tag attributes -- both ugly workarounds.
2024-10-01 09:13:57 -05:00
Kevin Ansfield
86d61304b1 🐛 Fixed errors creating new posts after a post access change via context menu
ref https://linear.app/tryghost/issue/ONC-323

After changing a post's access via the posts list context menu, creating new posts or members would not work correctly.

- the issue stemmed from `this.post.set('currentState.parentState.isNew', false);` that was called when changing a post's access level, after that all Ember Data models created from the store would have `isNew: false` causing Ember Data to attempt a PUT request to update the not-yet-created model rather than a POST request to create it
- we were only using a real post model instance in order to run validations against the post access level settings but we can do that just as easily by creating a new object and injecting our validation mixin
2024-10-01 15:10:59 +01:00
Leif Singer
4679bbb10b
🌐 Added and adjusted various German translations in portal.json (#21165)
no ref

This PR adds and adjusts various German translations in `portal.json`.
I'm a native speaker and have made adjustments to the best of my
knowledge. As in #21163, the gender variations are a bit opinionated and
I'm happy to discuss.
2024-10-01 08:48:05 -05:00
Leif Singer
44bfb8a17a
🌐🐛 Fixed German translation for "Sign up" in comments (#21162)
fixes #21104 

This PR corrects a single translation. The German translations for "sign
up" and "sign in" _can_ both be "anmelden", but are confusing when used
together. So here we're switch to "register now" and "sign in" to make
the distinction clearer. IMHO even in English "register now" and "sign
in" might be a better (more distinguishable) combination, but it's much
harsher in German.
2024-10-01 00:24:55 +00:00
Volodymyr Lavrynovych
80794486a9
🌐 Added Ukrainian translations (#20709)
no ref

---------

Co-authored-by: Steve Larson <9larsons@gmail.com>
2024-09-30 11:36:00 -05:00
ココロ
647e675ff5
🌐 Updated Chinese translations (#21154)
-translation for zh portal and search

---------

Co-authored-by: Steve Larson <9larsons@gmail.com>
2024-09-30 11:35:05 -05:00
Alexandre "Lekler" Rodrigues
5381530b21
🌐 Updated Portal pt-BR translations (#21076)
no ref

Filled in 6 missing translations and made style corrections to existing translations to improve clarity and consistency.
2024-09-30 11:19:02 -05:00
Fernando Ochoa Olivares
0756000766
🐛🌐 Fixed capitalization in Spanish sign-up string (#20711)
no ref

When beginning a sentence with exclamation in Spanish first letter needs
to be uppercase.
2024-09-30 11:15:05 -05:00
Cathy Sarisky
27d4f643b5
🐛🌐 Fixed missing Greek strings (#21137)
no ref 

This PR restores a few strings that were renamed during the time the
Greek strings were not being correctly processed.

---------

Co-authored-by: Vikas Potluri <vikaspotluri123.github@gmail.com>
2024-09-30 11:13:25 -05:00
Cuong Thach
e9cff37283
🌐 Added Vietnamese translation for search (#21149)
no ref
- also added a few missing Portal strings
2024-09-30 11:12:27 -05:00
Kevin Ansfield
c0bc17fb72 Added beforeunload debug log to editor
ref https://linear.app/tryghost/issue/ONC-323

- we're sometimes seeing our force-refresh failing when Ember Data gets into a bad state but we're not sure why so this log should tell us if it's the browser's native "leave site" modal that is preventing the refresh
- updated the `onbeforeunload` event handler to match modern JS approach
  - modern browsers use `event.preventDefault()` to show their dialog
  - older browsers use `event.returnValue = true` (this is what our old string return was triggering)
  - no browser supports a custom message in the native dialog
2024-09-30 16:58:54 +01:00
renovate[bot]
06c54f2472 Update dependency terser to v5.34.1 2024-09-30 08:54:20 +00:00
renovate[bot]
d9a18a77a9 Update dependency webpack to v5.95.0 2024-09-30 08:52:06 +00:00
Ghost CI
de82b6be61 v5.95.0 2024-09-27 15:05:25 +00:00
Ghost CI
b572c565b2 🎨 Updated Casper to v5.7.5 2024-09-27 15:05:25 +00:00
Hannah Wolfe
7ebb208549 Fixed browser/device missing data in tinybird
ref https://linear.app/tryghost/issue/ANAL-96/data-discrepancy-between-charts-when-filtering

- The top browser and device endpoints were pulling from the sources MV, that is filtered to not have same-source traffic
2024-09-27 14:30:42 +01:00
Hannah Wolfe
606fcbabe7 Added a set of tests for our tinybird setup
- TODO: make these run in CI
- Right now you run them by running `yarn tb` and then `./script/branch_and_test.sh`
- These are snapshot tests that check we get the desired result

Co-authored-by: alejandromav <hi@alejandromav.com>
2024-09-27 14:30:42 +01:00
Hannah Wolfe
e3268c8c59 Renamed hits to pageviews in tinybird
closes https://linear.app/tryghost/issue/ANAL-111/rename-hits-to-pageviews-inside-of-tinybird

- We currently have two concepts: visits (unique visits) and pageviews (also called hits)
- We want to standardise on this terminology, so inside tinybird, we're going to call hit "pageviews" to make it super clear what's happening
2024-09-27 14:30:42 +01:00
Cathy Sarisky
43b57aa53c
🐛🌐 Added missing locales to i18n.js (#21144)
- Apparently several PRs for new languages were merged without the
corresponding additions to i18n.js, which has caused new strings not to
be generated for those languages, and missing translations in the
frontend, even though we had them in the .json file.

- I've added language codes for all languages that had at least some
strings translated in i18n/locales, and have run yarn translate to
create missing strings and files for these languages.

New language codes for:
* Arabic
* Swiss German
* Greek
* Estonian
* Macedonian
* Serbian (Cyrillic)
* Thai
2024-09-27 14:07:51 +01:00
Chris Raible
a9ace11d9d
Removed OpenTelemetry (#21145)
no issue

- This commit removes all OpenTelemetry related code and dependencies
from Ghost.
- The initial implementation was done as a POC but it raised some
performance concerns with boot time, so we never actually enabled it
widely.
- We can revisit this in the future, but in the meantime it's just
adding unnecessary dependencies and bloating the codebase.
2024-09-26 16:18:49 -07:00
Chris Raible
046b06fe72
Refactored local revisions to avoid QuotaExceededErrors (#21128)
ref https://ghost-foundation.sentry.io/issues/5908152800/

- In the current state, we are maintaining an 'index' key for all
revisions in localStorage. This gives us quick and easy access to all
the revisions in localStorage, but it requires additional "bookkeeping"
to update the index each time we add/remove a key.
- In some obscure edge cases, this results in the `remove()` method
throwing a `QuotaExceededError` (since removing a revision also requires
updating the index with `localStorage.setItem()`). If the `remove()`
call fails, we are sort of stuck — the only way to reduce our storage
usage is to remove items, but if the `remove()` method throws errors, we
can't do that.
- This change removes the whole index concept, and instead loops over
all the keys in localStorage, filtering by the prefix to find all our
revisions. This makes the `keys()` method slightly more complex, as it
has to filter out keys in localStorage that aren't related to revisions,
but it simplifies saving and removing revisions.
- Critically, this also means that `remove()` should never throw a
`QuotaExceededError`, since it no longer needs to call
`localStorage.setItem()` — it now simply calls
`localStorage.removeItem()` for the revision, which should never fail.
2024-09-26 12:50:31 -07:00
Fabien O'Carroll
9bb1696329 Loaded AdminX activitypub app from jsdelivr in production
ref https://linear.app/tryghost/issue/AP-438

We want to keep development and test mode using the local build so we can have
feedback on our local changes.
2024-09-26 23:24:26 +07:00
Fabien O'Carroll
9884e2bb2c Allowed to load AdminX apps from custom url
ref https://linear.app/tryghost/issue/AP-438

This is going to allow us to load the activitypub package from the jsdelivr
cdn, which means we can release new versions without releasing the admin.
2024-09-26 23:24:26 +07:00
Hannah Wolfe
908ff731d6
Updated tinybird unsafe deploy script (#21135)
ref https://github.com/TryGhost/Ghost/pull/21092

- This updates the unsafe deploy script to be safer and more useful
2024-09-26 15:54:08 +01:00
Kevin Ansfield
21ecd9c2af Fixed tests failing with native stack traces due to blob.slice() calls
no issue

Either a node or macOS update resulted in our broken image upload tests causing native stack traces:

```
  #  /Users/kevin/.nvm/versions/node/v20.16.0/bin/node[8841]: static void node::Blob::ToSlice(const FunctionCallbackInfo<v8::Value> &) at ../src/node_blob.cc:248
  #  Assertion failed: args[1]->IsUint32()
```

- updated our `blob.slice()` calls to ensure the second argument is always an integer rather than possibly a float
2024-09-26 15:40:46 +01:00
Hannah Wolfe
68be1f95b1
Updated stats page to show visits instead of hits (#21133)
closes:
https://linear.app/tryghost/issue/ANAL-102/visits-on-tables-is-actually-displaying-pageviews

- The expectation is that the UI shows unique visits, not pageviews for
the breakdown charts
2024-09-26 14:50:30 +01:00
WindTheWhisperer
5579f03fd5
🌐 Added Estonian translations (#21129)
This pull request adds Estonian (et) language translations to Ghost.

Translated files:
- comments.json
- ghost.json
- portal.json
- search.json
- signup-form.json

Changes:
- Created new 'et' folder in the locales directory
- Translated all strings from English to Estonian in the above files

I'm a native Estonian speaker, but if there are any questions about
specific translations, please let me know.

Thank you for considering this contribution to make Ghost more
accessible to Estonian-speaking users!

---------

Co-authored-by: Ronald Langeveld <hi@ronaldlangeveld.com>
2024-09-26 07:47:16 +00:00
Sérgio Spagnuolo
4bc353bab8
🌐 Added new Brazilian Portuguese new i18n strings (#21101)
Add pt-br (Brazilian Portuguese) translations for Portal and native
search strings.

---------

Co-authored-by: Ronald Langeveld <hi@ronaldlangeveld.com>
2024-09-26 05:35:00 +00:00
Mertcan GÖKGÖZ
4c5d1940db
🌐 Updated Turkish translation (#21110)
Türkçe(Turkish) language support has been updated.

---------

Co-authored-by: Ronald Langeveld <hi@ronaldlangeveld.com>
2024-09-26 14:23:28 +09:00
Stanislav Traykov
7454bb1bdc
🌐 Added Bulgarian translation for search (#21102)
Add initial translation for Bulgarian for the search interface.
2024-09-26 13:48:07 +09:00
Yovko Lambrev
076300a5eb
🌐 Bulgarian translation updates (Sep 2024) (#21062)
A needed update of the Bulgarian version. Fixing some errors. Made some
improvements. And some new strings were translated.

---------

Co-authored-by: Ronald Langeveld <hi@ronaldlangeveld.com>
2024-09-26 02:29:40 +00:00
Cathy Sarisky
c23dc8a973
🌐 German translations (#21050)
ref: https://forum.ghost.org/t/help-translate-ghost-beta/37461/113

thanks to thewolfofallstreetz on the Ghost forum
2024-09-26 11:25:12 +09:00
Chris Mitchell
706c7eda3c
🌐 Updated Gaelic portal / search translations (#21093)
Updated the Gaelic translation with the new portal and search strings.
2024-09-26 11:24:36 +09:00
Alexandre "Lekler" Rodrigues
186f87eecc
🌐 Update pt-BR translation of search.json (#21100)
Following commit #21055, the following updates were made:

Added translations for terms related to authors, posts, search, and
tags.
2024-09-26 11:23:59 +09:00
renovate[bot]
3f0e4b4584 Update dependency mysql2 to v3.11.3 [SECURITY] 2024-09-25 15:02:44 +00:00
renovate[bot]
7f6517fbe8 Update dependency mysql2 to v3.11.2 [SECURITY] 2024-09-25 14:38:19 +00:00
renovate[bot]
1616acc20d Update dependency mysql2 to v3.11.1 [SECURITY] 2024-09-25 12:50:53 +00:00
Ronald Langeveld
052ef6971f
🐛 Fixed infinite loops in setFeatureImageCaption for deleted posts (#21081)
ref ONC-364

- Adds a condition to check whether the record is deleted or if deleting
is in progress before firing the `setFeatureImageCaption`.
- Adds tests. Managed to reproduce the issue using tests.
2024-09-25 08:02:38 +00:00
renovate[bot]
662d10077f Update dependency html-validate to v8.24.0 2024-09-25 08:23:04 +02:00
Chris Raible
0125f52dc4
Added sentry logging to local revisions service for localStorage errors (#21078)
no issue

- Added Sentry logs to capture how often we are running into
`QuotaExceededErrors` when saving local revisions to localStorage, to
help in deciding if localStorage is sufficient, or if we need to expand
to e.g. IndexedDB.
- Also adds some handling to ignore errors when calling
`localStorage.setItem()` elsewhere in the admin app to avoid crashing if
localStorage isn't supported or the quota is exceeded.
2024-09-24 19:39:36 -07:00
Steve Larson
c121149ca3
Added posts restore UI (#21096)
ref https://app.incident.io/ghost/incidents/107
ref cc88757e2a
- added new path in admin `/restore`
- added basic ui for restoring posts from local storage
- added limits for # of revisions for posts with an `id` (5 revisions)

This commit adds a simple UI for restoring posts in case of data loss.
This is a backstop for very rare situations in which it seems Ember gets
into a conflicted state. See ref'd commit for more info. Clicking
'Restore' will create a new post with the saved off content.
2024-09-24 15:01:17 +00:00
Hannah Wolfe
45211b2f4c
Fixed bounce rate on stats page (#21097)
closes
https://linear.app/tryghost/issue/ANAL-81/investigate-bounce-rate-looks-incorrect

- Think I've figured out what was wrong
- TODO: Figure out TinyBird's test pipeline, so we can verify this
2024-09-24 15:52:57 +01:00
Hannah Wolfe
7e27b1cb36
Clickthrough filtering for stats page (#21095)
closes
https://linear.app/tryghost/issue/ANAL-58/click-through-filtering-for-content
closes
https://linear.app/tryghost/issue/ANAL-60/click-through-filtering-for-sources
closes
https://linear.app/tryghost/issue/ANAL-61/click-through-filtering-for-locations

- This implements filtering and click-throughs for device, browser,
source, location and pathname.
- It requires significant updates to our tinybird setup, to pass through
all the right data and have them as parameters on the API endpoints
- We update the UI to add query parameters when clicking around and then
pass those through to every chart/request.
- We've added a interface to display the filters and remove them

---------

Co-authored-by: Peter Zimon <peter.zimon@gmail.com>
2024-09-24 15:26:08 +01:00
Hannah Wolfe
5ebdbe4e25
Renamed referrer without www to source in tinybird (#21094)
ref
https://linear.app/tryghost/issue/ANAL-60/click-through-filtering-for-sources

- In our stats page we use the referrer without a protocol or www, that
is the pure domain as our source that we output
- Meanwhile all the data pipelines had the full url as the referrer
passed through
- When we come to add clickthroughs/filtering, we'll need to use this
value to filter the data. If we have a different value locally in the UI
to what is in the DB, we won't be able to make the filters match
- Also, we pay for everything we store, and this removes all the
https:// and www. data
2024-09-24 14:16:50 +01:00
Hannah Wolfe
26e09dd6cc
Added script for unsafe redeploys to tinybird (#21092)
- Whilst we are in development, we can safely make changes to all
aspects of our pipeline without worrying
- This is because currently, it's safe to delete all data and start over
- This script removes everything excepts the analytics_events
datasource, and then recreates everything fresh, repopulating from the
datasource where possible
- This shouldn't be used after tinybird is in production, we need a
better change process
2024-09-24 13:53:19 +01:00
Hannah Wolfe
554920d20b
Shipped sodo-search@1.2.0 (#21090)
- This adds i18n support to search
2024-09-24 13:13:27 +01:00
Hannah Wolfe
2c1d57dcef
Updated stats UI to hide unfinished features (#21089)
ref
https://linear.app/tryghost/issue/ANAL-53/10-stats-page-engineering-stuff

- There are several features that we are yet to implement, the UI is
ready for them
- Hiding the UI in the short term so that it's less confusing what
is/isn't working as we test things
2024-09-24 12:44:38 +01:00
Cathy Sarisky
2a2d7bb9ad
Added i18n support to search - ready for translator work! (#21055)
ref https://github.com/TryGhost/Ghost/issues/16628

This adds translation support to search, which should be the last missing piece of i18n support for Ghost's frontend  🎉
- Translation (t) helper added to sodo-search.
- Ghost head tweaked to include data-locale.
- All (I hope) strings in sodo-search wrapped in the t helper.
- Possibly poor-quality French translation strings added.

---------

Co-authored-by: Vikas Potluri <vikaspotluri123.github@gmail.com>
2024-09-24 12:39:32 +01:00
Hannah Wolfe
e397046fb5
Improved the implementation of the stats page (#21088)
ref
https://linear.app/tryghost/issue/ANAL-53/10-stats-page-engineering-stuff

- All of these changes are intended to improve developer experience
going forward, to make it easier to implement further changes to the
stats page.
- Moved the modal into the stats components, as it has a lot of shared
code, and it makes it easier to update them all
- Removed various comment blocks that were outdated or didn't really add
value
  - Fixed all imports to use the same pattern starting `ghost-admin/`
  - Ensured all the components had the correct name
- Dried up the generation of params for Tinybird charts into a utility
function as we'll need to add several more in the near future
- Tried to use a consistent pattern everywhere for the order of
operations
- Dried up the implementation of technical.js which handles the
device/browser charts
2024-09-24 12:23:27 +01:00
renovate[bot]
31f1d7b464
Update dependency @tinybirdco/charts to v0.2.1 (#20937)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| @&#8203;tinybirdco/charts | [`0.2.0-beta.2` ->
`0.2.1`](https://renovatebot.com/diffs/npm/@tinybirdco%2fcharts/0.2.0-beta.2/0.2.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@tinybirdco%2fcharts/0.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@tinybirdco%2fcharts/0.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@tinybirdco%2fcharts/0.2.0-beta.2/0.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tinybirdco%2fcharts/0.2.0-beta.2/0.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - "every weekday" (UTC), Automerge - At
any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/TryGhost/Ghost).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC41OS4yIiwidXBkYXRlZEluVmVyIjoiMzguNTkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-24 11:08:32 +01:00
Kevin Ansfield
eb3824383b Shipped comments-ui@0.18.0
no issue

- general styling and design updates
2024-09-24 10:46:23 +01:00
Sanne de Vries
d789b7efbf
Updated comment report modal (#21084)
REF PLG-226
- Changed title copy from "You want to report this comment?" to "Report
this comment?"
- Changed button copy from "Report this comment" to "Report"
- Updated styles to be more responsive
2024-09-24 11:13:22 +02:00
Sodbileg Gansukh
2f02ec5566
Added unschedule bulk action to posts (#20945)
ref DES-675
2024-09-24 15:32:45 +08:00
Peter Zimon
8d54e4bf7a
Updated button styles (#21080)
DES-774

- The buttons in the Admin got very diverse over the last couple of
years. This PR updates the styles to use outline buttons, white
background for better contrast and slightly more rounded corners.
Additionally the right click and dropdown menu typography and spacing
has also been updated.
2024-09-24 07:20:20 +00:00
Kevin Ansfield
459a2c553e Added full-page refresh when new post route is in a bad state
ref https://linear.app/tryghost/issue/ONC-323

When the store gets into a bad state for new posts that causes saves to fail we can detect that by looking at the `model.isNew` property. Currently our best approach to fix this state is to restart the app.

- added a `didTransition()` hook to our `lexical-edit.new` route
  - detects the bad state, logs the error, and triggers a browser refresh
  - logs with a `recreatedPostIsGood` property that will let us know if we could instead just try recreating the post and avoiding a full refresh (so far we have no reproduction case so we need to learn what we can)
- added `sinon-chai` dependency for better assertions on spies/stubs
- added `sentry-testkit` dependency so we can test our Sentry integration calls
  - we can't use sinon for these calls because of the way Sentry's es6 imports work
- extracted our full Sentry config object generation to a util function so it can be re-used in unit tests
  - updated our integrations list to disable the default `dedupe` integration because it can cause very unexpected/difficult to debug test failures when you're asserting using `sentry-testkit`
2024-09-23 22:38:34 +01:00
Sanne de Vries
0656bd4de8
Added more specificity to newsletter title line-height (#21070)
REF DES-770
- In certain email clients such as Protonmail, the newsletter title
line-height was inherited from the `body` rather than the parent `td`.
This commit adds line-height to the title link explicitly.
2024-09-23 16:29:07 +02:00
renovate[bot]
7d441f24be Update dependency ember-auto-import to v2.8.1 2024-09-23 09:34:16 +02:00
renovate[bot]
a1dcd9168d Update dependency ember-auto-import to v2.8.0 2024-09-23 09:08:50 +02:00
renovate[bot]
56af0e0095 Update dependency html-validate to v8.23.0 2024-09-23 08:59:09 +02:00
renovate[bot]
ed04bd4a8b Pin dependency microdiff to 1.4.0 2024-09-23 08:56:08 +02:00
Ghost CI
887fdbd430 v5.94.2 2024-09-23 06:43:10 +00:00
Kevin Ansfield
c41c44b02d Fixed "Editor crashed" error showing for a valid 404
ref https://linear.app/tryghost/issue/ONC-323

- sometimes posts can be deleted by another user or in a different tab but then edited in an old tab that had the post loaded in the editor
- in this situation we were displaying our "Editor crashed" error put in place for the  rarer situation where the editor is genuinely in a bad state
- added an extra conditional for the bad state and a custom error message for the deleted post state
2024-09-20 09:40:44 +01:00
Kevin Ansfield
64118c139e Added extra post model state properties to debug logs
ref https://linear.app/tryghost/issue/ONC-323

- include post model state properties as well as the state name
2024-09-20 09:14:39 +01:00
Chris Raible
cc88757e2a
Added local revisions to the editor as backstop against data loss (#21044)
ref https://app.incident.io/ghost/incidents/107

- We have a rare bug that causes the initial `POST` request to create a
new post from the editor to be skipped or fail. Subsequent `PUT`
requests then fail because there is no post ID, potentially resulting in
data loss. The aim of this commit is to start saving revisions of posts
in the editor to the browser's localStorage, as a last-ditch option to
restore lost work.
- Since we don't know where the bug is yet, and to protect against
future bugs, we've deliberately avoided depending too heavily on the
`lexical-editor` controller or the ember store. We've aimed to create a
direct route to the state in the editor, by hooking into the
`updateScratch` method (effectively the `onChange` handler for the
editor).
- The `scheduleSave` function on the new `local-revisions` service is
called immediately upon any changes to the state of the lexical editor,
which is effectively every keystroke. The service has some logic and
timeouts, so it doesn't actually save a revision on every change to the
editor.
- The "schema" of the datastore is a simple key-value store, where the
key is of the format: `post-revision-${postId}-${timestamp}` if the post
has an ID, or `post-revision-draft-${timestamp}` for an unsaved draft.
There is also an array of all the revisions' keys, which allows us to
clear all the revisions without having to loop over every key in
localStorage (along with some other conveniences, like filtering).
- There is currently no UI for viewing/restoring revisions. In the event
that you need to restore a revision, you can access the service in the
browser console. You can access all the saved revisions using the
`list()` method, which logs all the revisions to the console by title &
timestamp. You can then choose a revision to restore, and call
`restore(revision_key)`, which will `POST` the revision's data to the
server to create a new post.
- Since localStorage data is limited to a 5mb quota in most browsers,
the service has a mechanism for evicting the oldest revisions once it
meets the quota. If a save fails because it would exceed the quota, the
`performSave` method will evict the oldest revision, then recursively
try to save again.

---------

Co-authored-by: Steve Larson <9larsons@gmail.com>
2024-09-20 00:08:28 -07:00
Kevin Ansfield
8ab7182bfe Added logging of post state changes
ref https://linear.app/tryghost/issue/ONC-323

- added debug logs to print to console each time the post state changes and include a full list of post state changes within the editor session in the error reports when we hit the 404 error caused by a bad editor state
2024-09-19 17:31:20 +01:00
Kevin Ansfield
bd6ca272dd 🐛 Fixed wrong breadcrumb and missing post status when starting new post from analytics
closes https://linear.app/tryghost/issue/ENG-1533

- the code to switch to "from analytics" state for the editor was applying when clicking the create post button in the nav menu whilst on the analytics screen which was confusing because you not only lost the `< Posts` link in the editor but you couldn't see the post's saving status
2024-09-19 16:27:40 +01:00
renovate[bot]
46aa2a7ce7
Update Koenig packages (#21048)
Ref: https://linear.app/tryghost/issue/ENG-904/bookmark-card-hot-linking-favicons

When a bookmark is added(pasting a URL) into the editor we’re immediately hitting the oembed endpoint twice.
The editor shouldn’t be firing a second bookmark oembed request when it’s already been given all the bookmark data from the first request.
Details: https://linear.app/tryghost/issue/ENG-904/bookmark-card-hot-linking-favicons#comment-852d53dc
2024-09-19 18:19:36 +05:30
Cathy Sarisky
6b84d9a900
🎨 wrapped missing i18n strings in portal (#21042)
ref https://forum.ghost.org/t/how-to-translate-the-date-intervals-year-and-month-in-portal-js/25599

- Added sneaky missing translation wrapping, notably the elusive year and month strings. Also "Change Plan" and "Choose Plan" for upgrade situations.
- Finding and adding these missing wrappings is critical to making Ghost's i18n usable for customers using other languages
2024-09-19 13:30:45 +01:00
Hannah Wolfe
f828ddefee Updated missed references to unique visitors
ref https://github.com/TryGhost/Ghost/pull/21035

- We decided to rename unique visitors to unique visits, but I missed a few places. Updated test case names for good measure
2024-09-19 12:09:46 +01:00
Hannah Wolfe
1c8513d94b Updated KPI pipe to fill missing data
closes https://linear.app/tryghost/issue/ANAL-77/na-data-should-be-zero
ref https://www.tinybird.co/blog-posts/tips-9-filling-gaps-in-time-series-on-clickhouse

- Sometimes we have no matching data for a particular date/date range, which makes our charts look super janky
- Clickhouse has a feature to fill these in called WITH FILL, which makes it really easy to fix this!
- WITH FILL works except for on bounce rate. That seems to be due to the column being marked as nullable and so WITH FILL fills missing data with NULL instead of 0
- To fix that, I've updated the code that generates the bounce rate so that it doesn't generate nulls, and that seems to result in a not-nullable column, which then works with WITH FILL
2024-09-19 11:32:49 +01:00
Hannah Wolfe
7c465a5fb5 Updated token handling to be in code
- When I went off, I quickly recreated all our endpoints with some new functionality
- However, I forgot that I was manually managing tokens, this meant the UI for stats broke with a token error
- Adding the tokens to the endpoint definitions should prevent this happening again, by automating the management of the token scopes
2024-09-19 11:32:49 +01:00
Princi Vershwal
871d21acaf
🐛 Fixed fetching and storing bookmark card icons and thumbnails (#21036)
Ref: https://linear.app/tryghost/issue/ENG-904/bookmark-card-hot-linking-favicons
2024-09-19 15:52:08 +05:30
Kevin Ansfield
412b850538 Filtered Sentry network breadcrumbs to reduce noise
no issue

- Sentry error reports were full of network breadcrumbs that weren't useful, added filtering to remove ones that aren't helpful in error logs
2024-09-19 11:18:20 +01:00
Kevin Ansfield
f9bb2d0ba7 Fixed missing extra context for Sentry report for editor 404
no issue

- Sentry requires additional data to be passed in under the `extra` property
2024-09-18 17:49:19 +01:00
Kevin Ansfield
48b1b7d504 Fixed [Object] appearing in Sentry log for unsaved-changes reason diff
ref https://linear.app/tryghost/issue/ENG-661
2024-09-18 17:31:09 +01:00
Kevin Ansfield
618d0b130a Added debug logging for 404 errors on new posts
ref https://linear.app/tryghost/issue/ONC-323

- the post model state appears to be in an odd situation when this issue occurs, the extra log context should help us determine if the bad state is occurring at the route level or inside the editor controller
2024-09-18 17:20:23 +01:00
Steve Larson
5923588818
Fixed date storage for analytics job using sqlite (#21038)
no ref

With sqlite the dates were being stored as unix timestamps, which led to
occasional ingestion issues as we assume the date is a date.
2024-09-18 14:56:37 +00:00
Sanne de Vries
7d97c4659d
Improved comments UI styles (#20957)
REF https://linear.app/tryghost/issue/PLG-225

- Reduced overall spacing and font-sizes for it to be more compact
- Optimised mobile spacing and typography
2024-09-18 12:52:13 +00:00
Hannah Wolfe
01c75bb3be
Removed visits and renamed unique visitors (#21035)
closes
https://linear.app/tryghost/issue/ANAL-82/unique-visitors-vs-visits-question

- In our current implementation we don't have a difference between
unique visitos and visits, instead we have unique visits
- Updated the UI to represent this for now, we may change it later
2024-09-18 13:17:47 +01:00
Princi Vershwal
773f514ddb
🎨 Added a maximum limit of 100 for GET members admin endpoint (#20643)
Ref: https://linear.app/tryghost/issue/SLO-188/set-a-maximum-limit-for-get-members-api

Endpoint: ghost/api/admin/members/?limit=all

Change Overview: We are updating the GET ghost/api/admin/members/ endpoint to remove support for the limit=all parameter. Previously, a request like GET ghost/api/admin/members/?limit=all would return a list of all members. Going forward, any request with limit=all or a limit greater than 100 will only return up to 100 members per request.
This change aims to improve the performance and scalability of the API.

What changes for users? - They will have to implement pagination to retrieve the list of all members.
2024-09-18 11:17:56 +00:00
Hannah Wolfe
036c175a5d
Updated top metrics to refetch on change (#21033)
closes
https://linear.app/tryghost/issue/ANAL-67/audience-filtering-doesnt-update-the-top-metrics-just-the-charts

- We want the data to be refetched whenever the chart range or audience
args change
- I don't think this is the right pattern, but we're going to move to a
react project in a few weeks, and I think this will be ok for that long
2024-09-18 11:43:16 +01:00
Hannah Wolfe
cb3a116cf8
Updated kpi-overview top bar fetch to use params (#21032)
ref
https://linear.app/tryghost/issue/ANAL-67/audience-filtering-doesnt-update-the-top-metrics-just-the-charts

- At the moment we are manually fetching the top bar data for KPIs via
Ember.
- This was done quickly, and didn't make use of the params for audience
or chartRange
- We need these params to fetch filtered data results
2024-09-18 11:17:55 +01:00
renovate[bot]
8d957c3ec1 Update dependency @slack/webhook to v7.0.3 2024-09-18 06:49:39 +00:00
Daniel Lockyer
5832ab5138 Added workaround for internal adapter dependencies
refs https://linear.app/tryghost/issue/DEV-23/workaround-for-yarn-caching-issues

- in our build pipeline, we add some more dependencies for our internal
  adapters
- recently we've been seeing caching issues with these dependencies, not
  sure why
- to workaround that, we'll just include them here and eventually bring
  the adapters into the OSS repo
2024-09-18 08:34:51 +02:00
chicodurden21
be8c3ec100
Updated Portuguese translations (#21023)
no issue
2024-09-17 22:11:52 +02:00
Sag
99d8a5777f
Fixed "Unsaved post" modal shown after publishing (#21028)
ref https://linear.app/tryghost/issue/ENG-661
ref INC-109

- this PR reverts two commits: 5903dd7 and 426b1d4
2024-09-17 18:55:03 +00:00
Tomáš Baránek
7838e5cd59
Added new Czech translations (#20941)
no issue
2024-09-17 19:15:40 +02:00
Kevin Ansfield
03df113d5c Improved logging of unsaved changes modal
ref https://linear.app/tryghost/issue/ENG-661

Logging the full lexical objects to Sentry for the "showing leave editor modal" event isn't very useful because they almost always truncated due to size or stripped due to potentially sensitive data which makes the reports difficult to debug and action.

- added `code` to the context for each report to make identification easier
- updated `reason` for the lexical diverged reason to better match what's happened
- stripped `lexical`, `scratch`, and `secondaryLexical` from the context that is logged to Sentry because they aren't actionable there and just add noise
- added a diff to the logged context for the lexical change reason to more easily identify the changes that triggered an unexpected modal display
  - previously we didn't get full objects in Sentry so couldn't do a comparison and the local workflow was to grab the logged scratch and secondaryLexical values and run a manual diff - this should help in both cases
2024-09-17 17:22:02 +01:00
Princi Vershwal
1c08fd2b9d
Update dependency gscan to v4.43.5
Ref:
https://linear.app/tryghost/issue/ONC-318/support-escalation-re-500-error,
https://linear.app/tryghost/issue/ENG-1444/gscan-slow-checking-for-themes-with-many-files
2024-09-17 13:40:36 +00:00
renovate[bot]
c5dd77e551 Update dependency terser to v5.33.0 2024-09-17 12:27:26 +00:00
renovate[bot]
3d65690987 Update dependency jwk-to-pem to v2.0.6 2024-09-17 14:13:00 +02:00
Princi Vershwal
5903dd7fb4
Checking unique names for icon and thumbnails before saving locally (#21012)
Ref: https://linear.app/tryghost/issue/ENG-1554/wrong-youtube-thumbnail
2024-09-16 19:19:35 +05:30