Commit Graph

58677 Commits

Author SHA1 Message Date
525406ad20 UX: reposition chat header icon (#31951)
With header search we toggle the search icon when scrolling on topics,
which can feel visually jarring when the search icon is in the middle.

Switching the position of the chat icon in the header reduces the impact
of this.
2025-03-26 10:59:01 +04:00
d06c60ca7c FEATURE: add icons and emojis to category (#31795)
This feature allow admins to personalize their communities by
associating emojis or icons with their site categories.

There are now 3 style types for categories:
- Square (the default)
- Emoji
- Icon

### How it looks 🎨 

Adding an icon:

<img width="502" alt="Category with an icon"
src="https://github.com/user-attachments/assets/8f711340-166e-4781-a7b7-7267469dbabd"
/>

Adding an emoji:

<img width="651" alt="Category with an emoji"
src="https://github.com/user-attachments/assets/588c38ce-c719-4ed5-83f9-f1e1cb52c929"
/>

Sidebar:

<img width="248" alt="Sidebar with emojis"
src="https://github.com/user-attachments/assets/cd03d591-6170-4515-998c-0cec20118568"
/>

Category menus:

<img width="621" alt="Screenshot 2025-03-13 at 10 32 30 AM"
src="https://github.com/user-attachments/assets/7d89797a-f69f-45e5-bf64-a92d4cff8753"
/>

Within posts/topics:

<img width="382" alt="Screenshot 2025-03-13 at 10 33 41 AM"
src="https://github.com/user-attachments/assets/b7b1a951-44c6-4a4f-82ad-8ee31ddd6061"
/>

Chat messages:

<img width="392" alt="Screenshot 2025-03-13 at 10 30 20 AM"
src="https://github.com/user-attachments/assets/126f8076-0ea3-4f19-8452-1041fd2af29f"
/>

Autocomplete:

<img width="390" alt="Screenshot 2025-03-13 at 10 29 53 AM"
src="https://github.com/user-attachments/assets/cad75669-225f-4b8e-a7b5-ae5aa8f1bcad"
/>

---------

Co-authored-by: Martin Brennan <martin@discourse.org>
Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
2025-03-26 09:46:17 +04:00
1fd553ccb0 UX: Add loading state to button when confirming password (#32012)
This commit adds a loading state to the confirm button in
`confirm-session` dialog.

This also unskips the flaky system tests in
`spec/system/forgot_password_spec.rb` as this change will allow us to
gather more information about why the test is flaky. The screenshots
which we have gathered when the test flakes does not allow us to know if
the button has been clicked or not before the test times out.
2025-03-26 12:58:47 +08:00
c91d0d7790 Bump version to v3.5.0.beta3-dev 2025-03-26 10:17:59 +08:00
7c61dbaf0d Bump version to v3.5.0.beta2 v3.5.0.beta2 2025-03-26 10:17:58 +08:00
bae4cd165f SECURITY: mutex around adding users to a group DM
Whenever you are about to reach the limit of users in a group DM, if you
send requests to add new users in parallel, they might all go through
ignoring the limit due to a race condition.

Internal - t/145895
2025-03-26 09:26:41 +08:00
58819d0f69 SECURITY: respect allow private messages prefernce for DMs 2025-03-26 09:26:36 +08:00
2452c3b529 DEV: Fix flaky search system tests (#32007)
After clicking on the search icon, we should ensure that the
`.search-container` has been rendered before moving on. Also update
assertions to properly rely on Capybara's autowait.

### Reviewer Notes

Example of flaky tests:
https://github.com/discourse/discourse/actions/runs/14057379759/job/39359791607
2025-03-26 09:11:08 +08:00
bbea7c3b11 REFACTOR: move desktop and mobile composer stylesheets into common (#31936)
This moves CSS from mobile/compose.scss and desktop/compose.css into
common/compose.scss and removes some old unused CSS in the process.

In addition:

* Prevents the grippie div from rendering on mobile, rather than hiding
the div with CSS
* Prevents the composer education messages from rendering on mobile,
rather than hiding them with CSS
* Wraps the `#draft-status` container with a condition instead of its
children, preventing the empty div from rendering when it's not used
* Adds a missing `btn-transparent` class to the mobile controls toggle
2025-03-25 16:09:09 -04:00
aa8a5ebd1e DEV: remove list-controls wrapper on tags index (#32002)
This `.list-controls` wrapper on the tags index has no specific styles
applied, and can easily pick up styles of the actual `.list-controls`
container on topic lists when the class is used in themes... so it's
more harmful than helpful (it's also not a list?).

Before:

![image](https://github.com/user-attachments/assets/ac32d4b2-e0be-422e-90f4-d4066304eb00)

![image](https://github.com/user-attachments/assets/4157d7d8-b4f1-4bde-acde-f08f544a23ea)


After (no visual changes):

![image](https://github.com/user-attachments/assets/7cbc9ce3-82b7-46c7-9c47-3b4086f84bae)

![image](https://github.com/user-attachments/assets/ec040df8-8b99-4c6b-95ff-01319c194931)
2025-03-25 15:54:10 -04:00
6aaddcf381 FEATURE: enable full page login by default (#31771)
This switches the signup/login UI to the full page experience by
default. This has been in use by many sites for multiple months and we
have ironed out many fixes in the meantime.

The `full_page_login` setting is also marked for removal in about
1.5mths, by the end of April 2025.
2025-03-25 13:43:51 -04:00
8fc2b74bf0 DEV: exposes parentName and name in onSet (#32000)
This allows more flexibility for custom behaviours.

Example usage:

```gjs
@action
onSet(value, { set, name }) {
  set(name + ".0.baz", value * 2)
}

<form.Object @name="something" as |object|>
  <object.Field @name="foo" @title="Foo" @onSet={{onSet}} as |field|>
    <field.Input />
  </object.Field>
</form.Object>
```
2025-03-25 18:20:36 +01:00
f01a658101 DEV: [gjs-codemod] add codemod commit to git-blame-ignore-revs 2025-03-25 16:59:45 +00:00
b29e0b6e1b DEV: [gjs-codemod] convert admin files to gjs
Updated using `@embroider/template-tag-codemod`, plus some manual fixups.
2025-03-25 16:59:21 +00:00
b203954060 DEV: [gjs-codemod] merge js and hbs 2025-03-25 16:59:13 +00:00
9f9282e070 DEV: [gjs-codemod] renamed js to gjs 2025-03-25 16:59:06 +00:00
596db5966c DEV: [gjs-codemod] renamed hbs to gjs 2025-03-25 16:58:57 +00:00
94ee3554da DEV: add plugin outlet to desktop & mobile Topic List Item after badges (#31998)
There is no current plugin outlet on the Topic List which allows one to
attach additional UI after the title without messing up the badge
display.

We can’t use `topic-list-after-title` because that will render before
the badge which looks untidy:



![](b29d5add40.png)

... and we can’t use`topic-list-before-category` because that’s not
always rendered when we drill into a Category.

The solution is a new plugin outlet located after the badge is rendered.
This needs to be on both the desktop and mobile flavours.

See discussion here:
https://meta.discourse.org/t/locations-plugin/69742/1144?u=merefield
2025-03-25 16:45:36 +00:00
37e72e9ad7 Update translations (#31994) 2025-03-25 17:22:59 +01:00
fe19a0aa0c DEV: Make styling bookmarks easier (#31979) 2025-03-25 11:02:11 -05:00
df412608c8 DEV: Split 2fa logic from account activation (#31974)
- This change separates the logic that handles 2fa flow, from the one
that deals with the user after it is authenticated.
2025-03-25 10:56:40 -03:00
3cf9f81552 DEV: Unksip flaky changing email system tests (#31991)
This commit unskips 3 flaky system tests and gives up on asserting that
redirecting is done correctly. This is because we have invested
considerable effort into this and cannot figure it out. The redirect is
tested by the client side anyway so there is still some test coverage.
2025-03-25 09:09:50 -04:00
0dd8358c3b Build(deps-dev): Bump lefthook from 1.11.3 to 1.11.4 (#31983)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.11.3
to 1.11.4.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
-
[Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
-
[Commits](https://github.com/evilmartians/lefthook/compare/v1.11.3...v1.11.4)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-25 18:30:04 +08:00
52de68cb3a Build(deps): Bump nokogiri from 1.18.5 to 1.18.6 (#31985)
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.18.5
to 1.18.6.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
-
[Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md)
-
[Commits](https://github.com/sparklemotion/nokogiri/compare/v1.18.5...v1.18.6)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-25 18:29:46 +08:00
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