Commit Graph

58592 Commits

Author SHA1 Message Date
ac26a52c6d DEV: Improve PageObjects::Pages::UserPreferencesSecurity#visit_second_factor (#32017)
This commit improves said method to ensure that user is redirected to
the right page before returning.

### Reviewer notes

Example of test flakiness:
https://github.com/discourse/discourse/actions/runs/14081653020/job/39435797236

```
Failure/Error: raise capybara_timeout_error

CapybaraTimeoutExtension::CapybaraTimedOut:
  This spec passed, but capybara waited for the full wait duration (10s) at least once. This will slow down the test suite. Beware of negating the result of selenium's RSpec matchers.

[Screenshot Image]: /__w/discourse/discourse/tmp/capybara/failures_r_spec_example_groups_user_resetting_password_when_desktop_when_user_has_multi_factor_authentication_configured_when_user_has_security_key_and_backup_codes_configured_should_allow_a_user_to_reset_pass_261.png

~~~~~~~ JS LOGS ~~~~~~~
~~~~~ END JS LOGS ~~~~~

Shared Example Group: "forgot password scenarios" called from ./spec/system/forgot_password_spec.rb:213

./spec/rails_helper.rb:426:in `block (3 levels) in <top (required)>'
./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-26 22:11:03 +08:00
adea877a45 Build(deps): Bump ace-builds from 1.39.0 to 1.39.1 (#31943)
Bumps [ace-builds](https://github.com/ajaxorg/ace-builds) from 1.39.0 to
1.39.1.
- [Release notes](https://github.com/ajaxorg/ace-builds/releases)
-
[Changelog](https://github.com/ajaxorg/ace-builds/blob/master/CHANGELOG.md)
-
[Commits](https://github.com/ajaxorg/ace-builds/compare/v1.39.0...v1.39.1)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-26 15:00:26 +01:00
5754368586 Build(deps-dev): Bump ember-cli-deprecation-workflow from 3.2.0 to 3.3.0 (#31963)
Bumps
[ember-cli-deprecation-workflow](https://github.com/ember-cli/ember-cli-deprecation-workflow)
from 3.2.0 to 3.3.0.
- [Release
notes](https://github.com/ember-cli/ember-cli-deprecation-workflow/releases)
-
[Changelog](https://github.com/ember-cli/ember-cli-deprecation-workflow/blob/main/CHANGELOG.md)
-
[Commits](https://github.com/ember-cli/ember-cli-deprecation-workflow/commits)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-26 14:41:34 +01:00
16857060df Build(deps-dev): Bump rubocop-ast from 1.41.0 to 1.43.0 (#32004)
Bumps [rubocop-ast](https://github.com/rubocop/rubocop-ast) from 1.41.0
to 1.43.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.41.0...v1.43.0)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-26 14:21:55 +01:00
f13ff5088c FIX: update chat icon position on mobile (#32016)
The chat icon was repositioned in #31951 but we should also account for
mobile, where it should appear before the hamburger icon.
2025-03-26 17:03:47 +04:00
75dd327c75 Build(deps-dev): Bump html-entities from 2.5.2 to 2.5.3 (#31964) 2025-03-26 13:09:05 +01:00
df69f1a628 Build(deps): Bump rdoc from 6.12.0 to 6.13.0 (#31966) 2025-03-26 13:08:22 +01:00
2441a54e33 Build(deps-dev): Bump @swc/core from 1.11.9 to 1.11.13 (#31984) 2025-03-26 13:07:00 +01:00
0ec5816f05 Build(deps-dev): Bump diff-lcs from 1.6.0 to 1.6.1 (#32003) 2025-03-26 13:03:58 +01:00
c3bd2f8629 Build(deps): Bump @babel/standalone from 7.26.10 to 7.27.0 in the babel group (#31980) 2025-03-26 13:02:58 +01:00
a302320791 Build(deps-dev): Bump lefthook from 1.11.4 to 1.11.5 (#32006) 2025-03-26 13:02:37 +01:00
b0780a482c Build(deps): Bump stringio from 3.1.5 to 3.1.6 (#32005) 2025-03-26 13:02:08 +01:00
042c480049 FIX: Do not @import .css assets for plugins (#32014)
b1924c35 switched our compiler to use `@import` internally for scss
entrypoints. This logic also applied to `.css` files, but unfortunately
sass doesn't do anything with `@import` of CSS files, so they'll be left
intact all the way to the browser. Continue using the old concatenation
approach for them in the compiler.

Followup to b1924c352487ab2c85ae50af45c5b3e098589014
2025-03-26 11:01:24 +00:00
b1924c3524 DEV: Allow stylesheet entrypoints to use @use (#31905)
Previously we would prepend extra content to developer-authored files,
which means adding `@use` in some files would throw an error because
`@use` must be at the top of any compiled file.

Instead, we can ensure any developer-authored files are on the load
path, and then `@import` them into the synthetic entrypoint.

Plugin color_definitions stylesheets are an edge case here, and will
need to be handled separately (or... wait until we move to native css
relative-color syntax, then we can drop color-definition stylesheets
altogether)
2025-03-26 09:15:32 +00:00
c8ccd4da31 DEV: Move setting deprecation check to SiteSetting::Update service (#31993)
This PR moves the logic that checks if a site setting we're trying to update has been deprecated from one of the controllers into a policy of the SiteSetting::Update service.

It also gives us the opportunity to shift the error message into a locale file.
2025-03-26 15:56:18 +08:00
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