Commit Graph

58603 Commits

Author SHA1 Message Date
ab3e85f8f1 DEV: Skip two flaky tests (#31989) 2025-03-25 15:34:21 +08:00
e99ed81586 DEV: Serialize theme_id and colors for user selectable color palettes (#31972)
We currently have `user_color_schemes` serialized on the preloaded
`Site` object, but it's very lightweight, only having an ID and name.
It would be useful for some themes and also the user Interface
preferences tab to be able to access the colors for the color scheme,
as well as the theme it belongs to.

This commit expands the serializer to include these extra attributes.
This `user_color_schemes` key is already cached as a fragment, so this
shouldn't be too much extra burden to send to the client.
2025-03-25 16:31:28 +10:00
Sam
afd5975041 FIX: looking at wrong period in statsText (#31986) 2025-03-25 17:18:02 +11:00
a14472606c FEATURE: Tight lists by default on rich composer (#31969)
Tight lists are lists that look like this:

* Item 1
* Item 2
* Item 3

Loose lists look like this:

* Item 1

* Item 2

* Item 3

There is a place for the latter, but the former is more
common default behaviour for writing apps and widgets, so
we are overriding the prosemirror default to use tight lists.

Eventually we will have a shortcut or other special behaviour
to switch between the list styles.
2025-03-25 14:36:47 +10:00
1a4e09a23e UX: Apply changes live when editing currently active palette (#31874)
When editing a color palette via the new page introduced in
https://github.com/discourse/discourse/pull/31742, it should apply the
color changes for the admin making the change automatically upon save.

Internal topic: t/148628/12.
2025-03-25 06:42:23 +03:00
423191ea24 UX: Adjust code editor height when maximized (#31971)
Meta:
https://meta.discourse.org/t/issue-with-custom-css-save-button-on-smaller-screens/358505

With the editor maximized, this PR adjusts the height by considering the
new info banner (#31561) and the navbar with `Show advanced` enabled
(even without banner, the height needed adjustments).

The info banner is forced to scroll to contain the height, especially on
mobile.

Before:

![IiOWqPj3eO](https://github.com/user-attachments/assets/723aee77-d10b-4ec6-87e1-95984039b6a0)

![KmJA54V2H8](https://github.com/user-attachments/assets/568dc6ad-3dba-4829-87c9-0283bd685862)

After:

![d3GlykKDLE](https://github.com/user-attachments/assets/3955a094-91f7-4a11-a463-567e6f168897)

![cwzKPVc294](https://github.com/user-attachments/assets/b23fa5a6-97d1-468a-8f4a-e0bbb03b8a87)
2025-03-24 17:24:44 -04:00
32fca57f30 Build(deps): Bump tzinfo-data from 1.2025.1 to 1.2025.2 (#31968)
Bumps [tzinfo-data](https://github.com/tzinfo/tzinfo-data) from 1.2025.1
to 1.2025.2.
- [Release notes](https://github.com/tzinfo/tzinfo-data/releases)
-
[Commits](https://github.com/tzinfo/tzinfo-data/compare/v1.2025.1...v1.2025.2)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-25 08:08:55 +11:00
505699c198 UX: adjust border radius for reply-where buttons (#31978)
These are *technically* buttons, but are much larger and have multi-line
content, so if you apply a border-radius via `--d-button-border-radius`
that tries to make rounded buttons... it doesn't work great here.

A case where normal buttons are fine (6rem radius) 


![image](https://github.com/user-attachments/assets/914170c3-3751-4939-841a-24e6a445cbb5)

but these big buttons have too much content to pull it off well, the
same border radius is too extreme


![image](https://github.com/user-attachments/assets/e00d076d-c555-42c1-9b15-0fa462bc5eaa)

the border radius variable we have for more general content areas
(`--d-border-radius`) generally doesn't work with a fully round radius,
so it should work better here most of the time:


![image](https://github.com/user-attachments/assets/9b2f509d-d0ef-46d9-898a-9b4bdf34f1a2)
2025-03-24 16:23:03 -04:00
b4afe124b7 DEV: Remove raw-hbs from autocomplete implementation (#31957)
We intend to replace this JQuery autocomplete implementation soon. But
before that, we'd like to drop the raw-hbs compilation/runtime system.
Therefore, this commit does a 1:1 conversion of the autocomplete
templates to vanilla JS. They're fairly small/simple, so they're still
fairly readable.
2025-03-24 19:44:07 +00:00
a79f8dbce0 DEV: apply pm border radius to topic map (#31976)
This applies the pm border radius (optional theme variable) to the pm
topic map as well

before:


![image](https://github.com/user-attachments/assets/b62b8791-b8d7-49c5-b4f8-03614b7187dc)


after: 


![image](https://github.com/user-attachments/assets/0d0dcf62-f43a-4409-8504-9ecc937775c6)
2025-03-24 15:22:32 -04:00
332bb6c958 UX: improve nav fade css (#31975)
Concerns this little fading scroll affordance in the horizontal overflow
nav:


![image](https://github.com/user-attachments/assets/3d59896c-faf4-4550-9fcb-62ce4e31cecd)

The parent container of the user nav has an optional
`--d-content-background` variable applied, and adding this for the nav
means that if a theme author uses `--d-content-background` the nav will
match automatically. When `--d-content-background` is not set, we fall
back to `--secondary` which is the default background.

I also realized that we don't need RGB values here since we're simply
fading from a solid color to transparent.
2025-03-24 15:14:56 -04:00
9bc394191c DEV: TopicListItemSerializer tells if topic is among the top 100 hottest topics (#31935) 2025-03-24 11:55:14 -05:00
558c566ca8 FIX: avatar, profile & card backgrounds url in DiscourseConnect (#31956)
The URLs returned by DiscourseConnect for the user's avatar, profile and
card backgrounds were not always correctly handling CDN.

This make use of the `GlobalPath.full_cdn_url` helper method which has
been battle-tested.

Ref - https://meta.discourse.org/t/-/356599
2025-03-24 16:23:05 +01:00
8c9885d0bf Revert "DEV: Adds empty device screenshot workflow file (#31521)" (#31973)
This reverts commit 0af0087c77a46f92662b5072190aa3823638d6f0.
2025-03-24 12:01:13 +00:00
af03873d37 DEV: Allow loading topic associations on /categories (#31954)
`/categories` sometimes returns accompanying topics under certain site
settings. The `CategoryList` currently allows preloading for topic
custom fields via `preloaded_topic_custom_fields`, but not for topics
themselves.

This addition is required for
https://github.com/discourse/discourse-solved/pull/342.
2025-03-24 17:40:15 +08:00
ea632d705c DEV: Add guardian argument to TopicsFilter plugin callback (#31908)
This adds the `guardian` argument to the `TopicsFilter` plugin callback
so that plugin can guard their topics filter based on the current user.
2025-03-24 10:34:04 +01:00
9db89c20f7 FEATURE: send email to deleted user (#31947)
When a user post is flag as spam and the moderator deletes the user, we
should send email to the affected user.
2025-03-24 14:45:25 +08:00
b77d0f7589 FEATURE: Sync Reviewable Status (#31901)
When multiple admins are working in the review queue, it's quite easy for two people to try and handle the same reviewable at the same time. This change addresses the two major situations where this can occur.

The `ReviewableClaimedTopic` model has been extended to allow the system to mark a reviewable as claimed as soon as the first moderator starts handling the reviewable, even when the `reviewable_claiming` setting is disabled. This ensures that reviewable actions with client-site activity (for example, `agree_and_suspend`) will lock the reviewable before another moderator starts working on it.

When someone handles handles a reviewable, we now use `MessageBus` to inform other moderators that it's changed. If any of the other moderator have that reviewable open (either individually, or on the list screen), it will automatically refresh that data.
2025-03-24 14:27:18 +11:00
e6c390eb1d DEV: Make bulk close topics system tests more reliable (#31950)
The tests being fixed in this commit are not waiting for the
asynchronous behaviour of bulk closing topic to complete before running
some of the assertions. This commit updates the tests to check for the
asynchronous behaviour to complete so that the following assertions will
pass with more reliability.
2025-03-24 10:19:41 +08:00
b4085c7b50 DEV: Support target in problem check problem constructor (#31922)
We didn't have support in the #problem constructor for multiple targets, forcing developers to manually construct a Problem instance. This involves a lot of details and is error prone.

This PR supports passing an optional target argument to the constructor. This will be passed on to the translation_data method to generate the correct message as well.
2025-03-24 10:10:41 +08:00
e7c3abb94b UX: Add missing border-radius variable (#31952)
The search result panel didn't have the new-ish border-radius variable
attached yet.
2025-03-22 15:13:02 +01:00
6784314fa9 DEV: Remove span tag from outlet (#31961) 2025-03-21 16:10:54 -05:00
7bd534bcfb FIX: Make dark mobile logo fallback to dark desktop logo (#31953)
Currently, the light version of mobile logo falls back to the desktop
version if the mobile version isn't set. It makes sense to have the same
fallback rule for the dark version as well, i.e. if there's no dark
mobile logo, use the dark desktop logo.

Internal topic: t/150316.
2025-03-21 18:49:12 +03:00
b26e0c0a33 PERF: Skip lazy-loading images in composer preview (#31955)
Safari does not reload lazy images smoothly, which causes a lot of
flickering in the composer preview while typing.
2025-03-21 14:54:45 +00:00
edb6758110 FIX: tag revisions need an empty wrapper (#31938)
follow-up to b4f9626984667133a2a1f656109d154214dbe47a

the previous commit removed an intentionally empty wrapper, which
aligned the diff when there's only an addition


Before (tag aligned to the left, associated with the wrong version):

![image](https://github.com/user-attachments/assets/cacf5fc0-8020-460b-a596-e65acab31c27)


After (tag aligned right, associated with the new revision):

![image](https://github.com/user-attachments/assets/3ea14fd1-d871-493b-acec-60ad8c3d530d)
2025-03-21 09:27:16 -04:00
5c05b352fd FIX: redirect user activity drafts route (#31949)
When logged in and visiting another user's drafts page, we should
redirect back to the current user drafts page.

For non auth users, we can redirect back to the forum `/latest` page.
2025-03-21 15:30:31 +04:00
a8b3e539c7 FEATURE: Add setting to prevent anonymous users from using chat (#31842)
Currently, anonymous/shadow users go through the same permission checks
for chat as normal users do. This means that if a site has chat enabled
for all users, anonymous users also get access to chat. This may be
undesirable for some communities, so we're adding a new site setting
`allow_chat_in_anonymous_mode` to block access to chat for anonymous
users.

Internal topic: t/148088.
2025-03-21 13:32:52 +03:00
a43ad984b1 FEATURE: allow adding members to new 1-1 DM channels (#31948)
This change allows more flexibility when starting a 1-1 direct message
with another user. If there are no messages in the new DM channel then
we should still allow them to add additional users.
2025-03-21 12:20:21 +04:00
Sam
ad992d7b2d FIX: destroy automation not working (#31945)
We had some legacy code due to previous controller based automation

---------

Co-authored-by: Alan Guo Xiang Tan <gxtan1990@gmail.com>
2025-03-21 15:22:33 +11:00
3df592a43e DEV: Remove assertion causing test to flake. (#31946)
This commit removes an assertion for the redirect after 2FA
authentication is success message because the message is flashed briefly
before a route transition happens. A proper fix would require us to
redesign when/how the flash message which we can address in the future.
2025-03-21 11:38:03 +08:00
f08d171809 UX: Show upload progress percentage for better feedback (#31923)
[image-upload2.webm](https://github.com/user-attachments/assets/a57798a0-d5de-4879-ae6b-6dccea6e45ff)
2025-03-20 20:02:59 -06:00
f7f7642ae0 UX: Improve naming for anonymous mode settings (#31832)
This PR renames a couple of settings related to anonymous mode:

1. `allow_anonymous_posting` → `allow_anonymous_mode`. This setting is
used as a switch for the entire anonymous mode feature, so it makes
sense to give it a generic name that better reflects what the setting
does.
2. `allow_anonymous_likes` → `allow_likes_in_anonymous_mode`. The new
name is clearer and will match a new setting that we'll add to allow
anonymous users to post in chat.

Internal topic: t/148088.
2025-03-21 04:54:06 +03:00
Sam
8c8bc94ed8 FEATURE: Add automation statistics tracking to Automation (#31921)
introduces comprehensive statistics tracking for the Discourse
Automation plugin, allowing users to monitor the performance and
execution patterns of their automations:

- Add `discourse_automation_stats` table to track execution metrics
including run counts, execution times, and performance data
- Create a new `Stat` model to handle tracking and retrieving automation
statistics
- Update the admin UI to display automation stats (runs today/this
week/month and last run time)
- Modernize the automation list interface using Glimmer components
- Replace the older enable/disable icon with a toggle switch for better
UX
- Add schema annotations to existing models for better code
documentation
- Include extensive test coverage for the new statistics functionality

This helps administrators understand how their automations are
performing and identify potential bottlenecks or optimization
opportunities.

---------

Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
Co-authored-by: Ted Johansson <ted@discourse.org>
2025-03-21 12:53:26 +11:00
dd0a6bd188 FIX: Bookmark search input can't be cleared with backspace with ?q= present (#31919)
Meta:
https://meta.discourse.org/t/cant-erase-the-bookmark-search-input/357861/4

> When we fill in the bookmark search input and send the request, then
we can’t delete the input’s content.

After removing the last character, the `searchTerm` getter is called. At
this point, `_searchTerm` is empty.
However, `this._searchTerm || this.q` will treat the empty string as
_falsy_, and the `q` value is displayed instead.
It makes it impossible to clear the input.

To fix this, we check specifically on the initial state of
`_searchTerm,` which is _undefined_, to include an empty string as a
valid value.

Note: because of `@computed`, the issue is not triggered when the
content is selected and deleted.
2025-03-21 09:50:05 +08:00
0dd2d4c1b5 Build(deps): Bump csv from 3.3.2 to 3.3.3 (#31932)
Bumps [csv](https://github.com/ruby/csv) from 3.3.2 to 3.3.3.
- [Release notes](https://github.com/ruby/csv/releases)
- [Changelog](https://github.com/ruby/csv/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/csv/compare/v3.3.2...v3.3.3)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-21 09:19:41 +08:00
8a0a6ee0cf Build(deps-dev): Bump rubocop-ast from 1.40.0 to 1.41.0 (#31937)
Bumps [rubocop-ast](https://github.com/rubocop/rubocop-ast) from 1.40.0
to 1.41.0.
- [Release notes](https://github.com/rubocop/rubocop-ast/releases)
-
[Changelog](https://github.com/rubocop/rubocop-ast/blob/master/CHANGELOG.md)
-
[Commits](https://github.com/rubocop/rubocop-ast/compare/v1.40.0...v1.41.0)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-21 09:18:42 +08:00
3522867fac DEV: refactor usage of buffered-content mixin (#31926)
Refactors the use of the buffered-content mixin to native getters on the
dependent classes.

This mixin previously provided a cached wrapper around an instance of
BufferedProxy and added 2 convenience methods aliasing BufferedProxy
methods.

### Main changes:
* Use of the`@cached` decorator to maintain parity with the previous
version of `this.buffered` to make sure we only refresh the buffered
proxy if the dependent property changes.
* _Not entirely sure if @cached + @dependentCompat is more performant
than just using `@computed`_

* Use of the`@dependentCompat` decorator to ensure backwards
compatibility of the getter with computed properties - we will leave
refactoring of those somewhere down the road as that would greatly
increase the scope of this PR

* `applyChanges` / `discardChanges` are the same as
`applyBufferedChanges` / `discardBufferedChanges` for BufferedProxy
2025-03-21 09:06:26 +08:00
ea8d5140e3 Build(deps-dev): Bump message-bus-client from 4.4.0 to 4.4.1 (#31944)
Bumps [message-bus-client](https://github.com/discourse/message_bus)
from 4.4.0 to 4.4.1.
-
[Changelog](https://github.com/discourse/message_bus/blob/main/CHANGELOG)
-
[Commits](https://github.com/discourse/message_bus/compare/v4.4.0...v4.4.1)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-21 09:01:23 +08:00
579eda6b66 DEV: Move dialog DOM handling from service to component (#31925)
Accessing a component-rendered DOM element from a service is not ideal,
and can lead to timing issues. We've attempted to work around this using
`afterRender`, but it's still not ideal.

This commit moves the `A11YDialog` setup into a modifier. Now the
service only stores state, and the component renders things based on
that state. This is much more in line with Ember norms, and should be
much more robust.

Test adjustments are because the dialog element is now only rendered
on-demand, rather than being present in the DOM all the time. This
brings dialog inline with our Modal system.
2025-03-21 08:59:23 +08:00
871356f547 UX: Improve UX of 2FA token submission page (#31918)
This commit updates the 2FA token submission page to disable the submit
button when the 2FA token is not valid and to also set the submit button
to be in the loading state after the submit button has been clicked.

The UX issues were discovered while I was investigating a flaky test
which has been unskipped in this commit as well. I am not sure if  this
will completely resolve the flakiness but we have to unskip it to know
if it continues to be flaky.
2025-03-21 08:49:12 +08:00
b3881d42d0 DEV: Disallow the use of Rails.logger= in RSpec tests (#31920)
Setting Rails.logger after the application has been initialized does not
seem to be safe anymore and can lead to flaky tests. This commit
disallows the reassignment of `Rails.logger` going forward and updates
the affected test.

### Reviewer notes

Reassigning `Rails.logger` from within RSpec tests is causing tests
which uses `Rails.logger.broadcast_to(FakeLogger.new)` to flake.
Example:
https://github.com/discourse/discourse/actions/runs/13951116847/job/39050616967

```
  1) invalid requests handles NotFound with invalid json body
     Failure/Error: expect(fake_logger.errors).to have_attributes(size: 1)
     
       expected [] to have attributes {:size => 1} but had attributes {:size => 0}
       Diff:
       @@ -1 +1 @@
       -:size => 1,
       +:size => 0,
       
     # ./spec/integration/invalid_request_spec.rb:18:in `block (2 levels) in <main>'
     # ./spec/rails_helper.rb:619:in `block (3 levels) in <top (required)>'
     # /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/benchmark-0.4.0/lib/benchmark.rb:304:in `measure'
     # ./spec/rails_helper.rb:619:in `block (2 levels) in <top (required)>'
     # ./spec/rails_helper.rb:580:in `block (3 levels) in <top (required)>'
     # /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/timeout-0.4.3/lib/timeout.rb:185:in `block in timeout'
     # /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/timeout-0.4.3/lib/timeout.rb:192:in `timeout'
     # ./spec/rails_helper.rb:570:in `block (2 levels) in <top (required)>'
     # ./spec/rails_helper.rb:527:in `block (2 levels) in <top (required)>'
     # /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/webmock-3.25.1/lib/webmock/rspec.rb:39:in `block (2 levels) in <top (required)>'
```
2025-03-21 08:48:38 +08:00
832ed8ce74 UX: Fix various search shortcut UX issues (#31903)
Now we have the search input showing in a few
different configurations:

* Welcome banner
* Header field
* Header icon

And we can get to the search with both `/` and
`Ctrl+F` shortcuts. These configurations can
be used together, and we need to focus on the right
search input at the right time.

This commit fixes the shortcuts not working
or showing the wrong thing in some cases,
and adds a comprehensive system spec for all
the variants.
2025-03-21 09:20:58 +10:00
712302c020 UX: add mini z-index to welcome banner to fix overflowing result pane… (#31927)
…l opacity hickup

Fixing the opacity issue caused by the slight delay animation
2025-03-20 19:13:47 +01:00
94e5630ec3 DEV: adds declarative options to object/container (#31934)
We often need to be able to change the format of a container and to
change the flex-direction, this is now possible through two properties:

`<form.Container @format="large">`
`<form.Container @direction="column">`

On top of this `Object` has now a similar behavior to `Collection`. It
will be displayed as flex, add gap between children and accepts
`...attributes`.
2025-03-20 14:58:54 -03:00
38872b5b9b FEATURE: Introduce warning banner for Safari 15 deprecation (#31928)
Ref https://meta.discourse.org/t/safari-15/358131
2025-03-20 15:03:24 +00:00
11c77620ab Build(deps): Bump message_bus from 4.4.0 to 4.4.1
Bumps [message_bus](https://github.com/discourse/message_bus) from 4.4.0 to 4.4.1.
- [Changelog](https://github.com/discourse/message_bus/blob/main/CHANGELOG)
- [Commits](https://github.com/discourse/message_bus/compare/v4.4.0...v4.4.1)

---
updated-dependencies:
- dependency-name: message_bus
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-20 15:05:58 +01:00
5f8a183abf FIX: Stop non-rgb header background colors crashing DiscourseHub (#31929)
Ideally we would add support for color spaces like okclh to the app, or
have some method for converting them to rgb automatically. But for now,
this will stop the app crashing completely.
2025-03-20 13:56:07 +00:00
7f9a0bb2a7 FIX: prevents fields in Object to re-render (#31916) 2025-03-20 08:32:22 +01:00
897d34132e FIX: Add value transformers for welcome banner and search (#31917)
We want to give some themes more control over
the default experience in core. To this end, this
commit adds value transformers for these
site settings:

* enable_welcome_banner
* search_experience

This way, themes can give a different value to
what has been set in core.

This can be potentially confusing, a follow up PR
may refactor this a bit so there is a more direct
correlation between the setting and the transformer
so we could show a warning in the site setting page
for example.
2025-03-20 15:37:42 +10:00
2d71c5a06d Build(deps): Bump optimist from 3.2.0 to 3.2.1 (#31912)
Bumps [optimist](https://github.com/ManageIQ/optimist) from 3.2.0 to
3.2.1.
-
[Changelog](https://github.com/ManageIQ/optimist/blob/master/CHANGELOG.md)
-
[Commits](https://github.com/ManageIQ/optimist/compare/v3.2.0...v3.2.1)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-20 09:07:27 +08:00