Fixes #9586. All calls to `register_snippet` that happen before `WagtailSnippetsAppConfig.ready` are now queued up and processed once we are sure models are fully loaded. This avoids any issues with unloaded models during viewset construction, as seen when subclassing django-filters's FilterSet.
Fixes #9512
An `opacity: 0.2` style is defined for the disabled button state, but the `opacity: 1` hover style takes precedence over it. As a result, the only time it kicks in - on media with hover support - is when the StreamField does NOT have hover / focus, which would ordinarily be the time when the button is hidden entirely.
Fix this by adding hover states to the `&[disabled]` case, to match the order of precedence for the normal button state.
- instead of mocking the Django global functions, test each function's export that it correctly uses the global if present or test the default behaviour
- remove specific file in .prettierignore and add inline comments to allow for linting / formatting for the searchpromotions_formset
- Split from #9522
While running tests for an unrelated fix I received a one-off random test failure, where the 'create' and 'publish' log entries were returned in the wrong order. Since these log entries are created at the same time, it's possible that the timestamps will be closer together than the database's resolution - this should not be considered a test failure. Avoid this by explicitly ordering by action codename instead.
Until now, those calls have been executed synchronously with the call of addEventListener.
Fixes #9528
Fixes issue where home page lock/unlock would not work at all (data-url should be used)
* Clean up the performance page structure
Many of the sections mentioned here will improve performance for much more than just the editor experience.
* Link to Django's performance page
The definition for ngettext in extract-translatable-strings had incorrect argument positions, and as a result strings translated with ngettext were missed from the .po file.