34157 Commits

Author SHA1 Message Date
Kris
a3359ac7ad
UX: set mobile read state indicator to static size to avoid overflow (#30910)
This fixes an issue where topics could scroll horizontally on mobile:
https://meta.discourse.org/t/topic-page-layout-issue/348262?u=pmusaraj

It seems some recent core change impacted the read state size/position 

This sets the size and position to more static values (not based on
global font changes) to avoid the issue, and removes the horizontal
scroll.
2025-01-21 17:24:58 -05:00
David Taylor
d7f008d482
UX: Only lock viewport scale during focusin events for iOS PWA/Hub (#30908)
c171e3dc works well in Safari, because the browser ignores the
`user-scalable=no` directive. However, PWA/Hub do respect the directive,
which means that it stopped pinch-zooming from working.

This commit updates the strategy for those environments so that the
viewport is only locked briefly during a focusin event. The simpler
strategy is maintained for the real safari browser.
2025-01-21 22:19:59 +00:00
Jarek Radosz
8c31f1aa5f
UX: Improve git/code oneboxes (#30822) 2025-01-21 14:20:36 -06:00
David Taylor
df205c9290
UX: Remove loading="lazy" from avatars for improved UX (#30897)
Lazy loading images naturally causes a slight delay, because the browser
only starts to load them after laying out the DOM and checking whether
they're in the viewport. Plus, in Safari, re-rendering the DOM of a
lazy-loaded image always causes a brief flicker, even if the image is
already cached in the browser.

Lazy-loading is most beneficial on large one-off images which are often
rendered outside the viewport. That's frequently the case for images
which users share in topics. Avatars, on the other hand, are very small
images, they're very often above-the-fold, and the same avatar often
occurs many times on the same page.

Therefore, this commit removes `loading="lazy"` from avatars, which
should improve avatar load times in all browsers, and stop the flicker
in Safari.

---

Tapping logo to reload topic-list in Safari. Before: https://github.com/user-attachments/assets/242299f8-aa13-4991-b321-2f143603ed26

After: https://github.com/user-attachments/assets/5e5bfd28-3a78-40fd-af21-3d92e7b3ba8a
2025-01-21 14:06:45 +00:00
Joffrey JAFFEUX
e8d5059156
FIX: emoji picker position when clicking more (#30896)
When clicking more in the emoji autocomplete menu, the picker would
sometimes be hidden at the bottom of the page. It was easily
reproducible in long topic pages when scrolled to the bottom.

This commit just marks the textarea as the trigger which is not a
perfect position but is still a good fallback.
2025-01-21 13:58:07 +01:00
David Taylor
076c0c4bca
UX: Workaround iOS bottom overscroll bug in header-offset calcs (#30895) 2025-01-21 12:23:09 +00:00
David Taylor
5ac308fe85
UX: Extend Safari scrolling fix to work in iPad PWA (#30894)
Followup to 4933cfd46cf2b30600da9a72bb82d02c19ead8a3
2025-01-21 11:50:38 +00:00
Jarek Radosz
184ec95d01
DEV: Don't nest deferring calls (#30449)
Each case simplified:

`next(() => later(() => ...))` -> "wait 0 ms then wait X ms"
`next(() => debounce(() => ...))` -> "wait 0 ms then wait X ms
(debounced)"
`next(() => scheduleAfter("render", ...))` -> "in the next (empty) run
loop, do the thing (after a no-op render step)"
2025-01-21 11:24:33 +01:00
David Taylor
db998ee1ab
DEV: Make interactive-widget viewport config chrome-only (#30889)
This stops it printing an error to the console in Safari
2025-01-21 09:46:18 +00:00
David Taylor
4933cfd46c
UX: Improve sidebar positioning in Safari (#30888)
- Calculate the overscroll amount and subtract it from viewport-based
measurements

- Only round at the end of calculations, to avoid sub-pixel rounding
discrepancies

- Compensate for < 1px fluctuations which happen during scroll

Before: https://github.com/user-attachments/assets/a1044405-9f4a-46b1-a3b1-bc5fff29bf45

After: https://github.com/user-attachments/assets/212e4a32-aa97-4054-aba0-b7f1d993f007
2025-01-21 09:43:30 +00:00
dependabot[bot]
4a7b98ef6d
Build(deps-dev): Bump @ember/test-helpers from 4.0.4 to 5.0.0 (#30859)
Bumps
[@ember/test-helpers](https://github.com/emberjs/ember-test-helpers)
from 4.0.4 to 5.0.0.
- [Release
notes](https://github.com/emberjs/ember-test-helpers/releases)
-
[Changelog](https://github.com/emberjs/ember-test-helpers/blob/master/CHANGELOG.md)
- [Commits](https://github.com/emberjs/ember-test-helpers/commits)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-21 02:42:11 +01:00
Penar Musaraj
120f1afc91
UX: Fix scrolling of form template composer on mobile (#30883)
This was a regression in recent composer refactors, this change ensures the `with-form-template` container is scrollable.
2025-01-20 17:32:32 -08:00
dependabot[bot]
62a3745764
Build(deps-dev): Bump qunit from 2.23.1 to 2.24.0 (#30886)
Bumps [qunit](https://github.com/qunitjs/qunit) from 2.23.1 to 2.24.0.
- [Release notes](https://github.com/qunitjs/qunit/releases)
- [Changelog](https://github.com/qunitjs/qunit/blob/2.24.0/History.md)
- [Commits](https://github.com/qunitjs/qunit/compare/2.23.1...2.24.0)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-21 01:58:58 +01:00
Penar Musaraj
ba5cd20ef2
UX: Remove table editor transition effect (#30878)
This fixes a bit of jitteriness on mobile, noticeable mostly when going
from the topic list to a post that has a table.
2025-01-20 17:08:53 -05:00
Régis Hanol
8207086d5f
FIX: supports quoting mathjax (#30876)
This will properly extract the text used to generate mathjax expression
(both inline and block display modes) as well as remove all the cruft
that mathjax is adding in the DOM.

Internal ref - t/135307
2025-01-20 20:26:43 +01:00
David Taylor
c171e3dccd
UX: Replace font-size-ios-input workaround (#30877)
By default, iOS safari will automatically zoom into focused inputs with
font-sizes less than 16px. To avoid this, we had a CSS rule to ensure
inputs always had a large font-size on iOS. This worked, but did lead to
design inconsistencies.

Instead, we can set `user-scalable=no` on the viewport meta tag. Since
iOS 10, this property doesn't actually stop users zooming. But it *does*
still prevent the automatic zooming of inputs. So it solves our zoom
problem, and allows us to remove the CSS font-size workaround.
2025-01-20 19:17:30 +00:00
Sérgio Saquetim
a99bb0caff
DEV: Add wrapper outlet around the topic cell top and bottom lines (#30848) 2025-01-20 15:10:14 -03:00
Régis Hanol
e2c3dff669
UX: convert "view all notification" to a link (#30874)
so it respects the user's input of opening it in another tab when
CTRL/META/MIDDLE clicking it.

<img width="471" alt="Screenshot 2025-01-20 at 16 20 14"
src="https://github.com/user-attachments/assets/2ba1a78a-0c12-452e-b054-ef7e7c1338c1"
/>
2025-01-20 18:24:08 +01:00
David Taylor
d88ee33eb6
DEV: Introduce stylelint (#29852)
Stylelint is a css linter: https://stylelint.io/

As part of this change we have added two javascript scripts:

```
pnpm lint:css
pnpm lint:css:fix
```

Look at `.vscode/settings.json.sample` and `.vscode/extensions.json` for
configuration in VSCode.

---------

Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
2025-01-20 15:27:42 +00:00
David Taylor
89df65e843
FIX: Avoid possible rendering infinite-loop in post-menu (#30873)
ff815384 introduced a modifier which changes tracked state. If the
conditions are correct, this can cause an infinite re-rendering loop.
One example is [here](https://meta.discourse.org/t/346215/4), although
there are other non-dev-tools things which could trigger this kind of
loop. As a general rule, modifiers should not change tracked state.

This commit changes the approach to match the rest of the new-post-menu
assumptions: instead of trying to modify `collapsed` at runtime, the
rendering of individual buttons has the `>1` logic. That matches the
existing logic
[here](https://github.com/discourse/discourse/blob/89ff7d51e6/app/assets/javascripts/discourse/app/components/post/menu.gjs#L392C18-L394C6).
2025-01-20 15:16:53 +00:00
Joffrey JAFFEUX
89ff7d51e6
UX: replaces custom more menu by d-menu (#29090)
One of the big advantages is a nicer menu on mobile.

This commit also fixes a bug where the close modal action was called for any destroyed d-menu trigger, even if this specific menu was not expanding, which means it was closing a different modal than its own modal, given we can only have one modal at a time.
2025-01-20 12:00:11 +01:00
dependabot[bot]
d0d819e2a3
Build(deps-dev): Bump @swc/core from 1.10.7 to 1.10.8 (#30858)
Bumps [@swc/core](https://github.com/swc-project/swc) from 1.10.7 to
1.10.8.
- [Release notes](https://github.com/swc-project/swc/releases)
- [Changelog](https://github.com/swc-project/swc/blob/main/CHANGELOG.md)
-
[Commits](https://github.com/swc-project/swc/compare/v1.10.7...v1.10.8)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:06:05 +01:00
Ella E.
1702212982
FIX: Adjust grid-template-columns to prevent text overflow (#30864)
### What's changed?
Added `minmax(0, 1fr)` to `grid-template-columns` to ensure the second
column can shrink to fit within the container, avoiding overflow in
smaller viewports or when the container width is limited.

### Before
<img width="489" alt="image"
src="https://github.com/user-attachments/assets/047acba2-6ce7-444e-9ef1-867d3643ee45"
/>

### After
<img width="489" alt="image"
src="https://github.com/user-attachments/assets/b5485746-8dac-422d-ba35-ab819ef78c5d"
/>
2025-01-19 22:06:09 -07:00
jbrw
a39b6daa65
DEV: Ignore timezone cache when getting current timezone (#30861)
When the user selects “Use Current Timezone” on Profile -> Preferences
-> Profile, a call is made to `moment.tz.guess()`.


https://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/
states that, by default, previously cached responses from this function
will be returned upon subsequent calls. If your physical location has
changed, this may result in a cached value being returned, and thus the
timezone seemingly not being updating.

By passing the `true` value to the function, the cache is bypassed,
forcing an explicit recheck of the current timezone.
2025-01-20 15:42:08 +11:00
Ella E.
7ae5d03a2c
FIX: Prevent wrapping of select box container by applying nowrap (#30863)
Applied `white-space: nowrap` to ensure text remains on a single line.

### Before

![image](https://github.com/user-attachments/assets/f148e216-fce3-46c6-9934-fb43da7f8f47)


### After
<img width="728" alt="image"
src="https://github.com/user-attachments/assets/fce31f33-9a29-4a6d-85c0-d1566c9acd26"
/>
2025-01-19 19:37:10 -07:00
Ted Johansson
96b725a11c
FIX: Don't allow editing own posts user can no longer see (#30839)
In a PM, if a user has made a post, and is later removed from the PM, they can still edit their own post. This can be done either if they happen to have a composer open in an active tab, or by just manually sending an HTTP request.

The post guardian is missing a basic check, can_see_post_topic? when we determine whether a user can edit a post or not. This basic check is already in place when we determine whether a user can see the post in the first place.

This PR adds in the missing check, so that if the user tries to edit their post after being removed, they'll receive a 403.

It also adds a MessageBus message scoped to the affected user and topic when they are removed from the PM, which will redirect them to their inbox. This helps avoid a stale tab where they are still in the PM which they by right can now no longer see.
2025-01-20 10:09:58 +08:00
Jarek Radosz
f4857d3b1c
DEV: Remove more ember options (#30852) 2025-01-18 15:58:19 +01:00
Jarek Radosz
2cd5e4d54d
DEV: Add more args to topic-list-item outlet (#30851) 2025-01-18 15:57:53 +01:00
Jarek Radosz
33296d5913
DEV: Remove deprecated openTopicDraft (#30850) 2025-01-18 13:13:35 +01:00
Jarek Radosz
56f9a174fc
DEV: Remove unused tag-drop-link component (#30849) 2025-01-18 10:48:42 +01:00
David Taylor
cf0a4a7e11
DEV: Detect overrides of topic-list and topic-list-item templates (#30847)
New topic-list should not be auto-enabled in this case
2025-01-17 16:23:18 +00:00
Joffrey JAFFEUX
f8d5a7873a
UX: makes smile the default emoji-picker icon (#30843)
discourse-emojis is used in chat only for message actions to show a
difference with the the other emojis so people don't think it's just the
smiley emoji.
2025-01-17 12:29:18 +01:00
Régis Hanol
359bbbe617
FIX: relative links in the insert hyperlink modal (#30842)
When trying to insert schemaless or relative links using the "insert
hyperlink modal" in the composer, the resulting link would be wrongly
prefixed with "https://"
2025-01-17 11:26:28 +01:00
Jarek Radosz
560c1875a5
DEV: Clean up ember configuration (#30833)
1. Add comments
2. Remove obsolete options: `historySupportMiddleware` (x2),
`exportApplicationGlobal` (x2), `_APPLICATION_TEMPLATE_WRAPPER`,
`_JQUERY_INTEGRATION`
3. Remove unused sections (dev, prod) from the test-only config
4. Add commented-out debug options to the "main" config
5. Copy options between configs for parity: `_DEFAULT_ASYNC_OBSERVERS`,
`LOG_ACTIVE_GENERATION`, `LOG_VIEW_LOOKUPS`
2025-01-17 10:39:21 +01:00
Ted Johansson
0718f940fa
DEV: Use RouteTemplate for admin API keys template (#30835)
This is a small clean-up PR that does the following:

- Convert api-keys.hbs to a RouteTemplate backed api-keys.gjs.
- Move the sub-page templates (index, show, new) into /api-keys sub-directory.
- Removes some styles that aren't used after the admin UI conversion.
2025-01-17 11:22:47 +08:00
Osama Sayegh
d964fbc550
DEV: Add home-logo-minimized transformer (#30832)
Similar to the `home-logo-href` and `home-logo-image-url` transformers,
this PR adds a new `home-logo-minimized` transformer to allow
plugins/themes to amend the default behavior of the header logo.

Internal topic: t/144688.
2025-01-17 03:38:42 +03:00
Krzysztof Kotlarek
ff815384b1
FIX: Expand the hidden post menu when one option is available. (#30831)
When only one option is available for the action menu, it should be
automatically expanded for the glimmer component.

This is the default behaviour for the old post menu:
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/widgets/post-menu.js#L624
2025-01-17 11:30:16 +11:00
David Taylor
3389974563
DEV: Enable ember-template-imports sourcemaps (#30825)
This improves the developer experience, and also happens to workaround
https://github.com/embroider-build/content-tag/issues/92 in our
production builds.
2025-01-16 22:42:34 +00:00
Kris
f942599ce1
UX: improve the alignment of long status messages (#30830)
Before: 


![image](https://github.com/user-attachments/assets/77005641-2289-4296-8988-242c139a376d)

After: 


![image](https://github.com/user-attachments/assets/25889d78-7a5d-4097-9242-5cbd82e909ca)

Short message layout stays mostly unchanged: 


![image](https://github.com/user-attachments/assets/893a8f03-0e24-4e68-bc6b-2469eba0523c)
2025-01-16 17:22:37 -05:00
dependabot[bot]
1758d189ba
Build(deps): Bump ace-builds from 1.37.4 to 1.37.5 (#30829)
Bumps [ace-builds](https://github.com/ajaxorg/ace-builds) from 1.37.4 to
1.37.5.
- [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.37.4...v1.37.5)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-16 23:18:15 +01:00
Krzysztof Kotlarek
029bd6feda
FEATURE: setting allowing tl0/anonymous flag illegal content (#30785)
The new site setting `allow_anonymous_and_tl0_to_flag_illegal` allows
tl0 users to flag illegal content. In addition, anonymous users are
instructed on how to flag illegal content by sending emails.

Also `email_address_to_report_illegal_content` setting is added. If not
provided, then the site contact email is used.
2025-01-17 08:57:44 +11:00
David Taylor
d3a7b99699
DEV: Relax 'unexpectedly found' matcher in deprecation-silencer (#30823)
We managed to find a slightly different way to trigger the same Ember
bug. This commit makes sure that's silenced as well.
2025-01-16 17:55:56 +00:00
Régis Hanol
5c6e96720b
New "user-preferences-tracking-topics" plugin outlet (#30821)
Adds the "user-preferences-tracking-topics" plugin outlet to allow the
`discourse-assign` plugin to add a new "notification level when
assigned" user preference.

There's also a new `customAttrNames` tracked property that allows
plugins to add new user option to be saved from this screen / plugin
outlet.

Also changed the text used for the "notification level when replying" to
match the one that is used for the "notification level when assigned" in
https://github.com/discourse/discourse-assign/pull/626.

## BEFORE

<img width="375" alt="image"
src="https://github.com/user-attachments/assets/178ba47e-f783-46d2-adae-28afec49b259"
/>

## AFTER

<img width="363" alt="Screenshot 2025-01-16 at 16 11 26"
src="https://github.com/user-attachments/assets/215e9f86-62f7-48ea-b665-72cbf28abd21"
/>

DEV: remove unused topic-tracking component
2025-01-16 17:58:43 +01:00
David Taylor
892d02fda1
DEV: Fix source-identifier for plugins when using .gz assets (#30820) 2025-01-16 15:33:28 +00:00
Penar Musaraj
1ae35ecce8
DEV: Remove isTablet capability (#30799)
Reverts 02113fc. 

This is an imperfect detection of tablets and more generally, we want to
move away from detecting specific devices. THere's a broader effort to
remove mobile/desktop detection and rely instead on viewport-width-based
patterns and feature detection (touch, hover, etc.). See
https://github.com/discourse/discourse/pull/30642

To reach the same results in CSS/jS, we can use the `touch` and `hover`
media queries.

In CSS, something like: 

```
@media (hover: none) {
  // hover non excludes touchscreen desktops
  .discourse-touch {
    // we detect touch capability on the JS side, a bit of a belts and suspenders approach
  }
}
```

And in JS: 

```
this.capabilities.touch` plus `window.matchMedia("(hover: none)").matches
```
2025-01-16 10:19:01 -05:00
Mark VanLandingham
e6272e0497
DEV: applyBehaviorTransformer for composer-position editTouchMove (#30811)
In a theme or plugin, if you have a scrollable mobile composer, you may
want to allow scrolling events on the composer editor.. this allows for
it!
2025-01-16 08:04:15 -06:00
David Taylor
72f4588d3b
DEV: Do not trigger floatkit 'hover' for touch events (#30793)
When tapping something on a touch-enabled device, `mouseMove` events are
still fired, so floatkit would still be triggered even if configured for
'hover' only. For links, this would be particularly strange, because the
tooltip would appear for a split-second, before the page navigation
occured.

To avoid this problem, we can use the more-modern 'pointerMove' event,
and check the `pointerType` to exclude 'touch'
2025-01-16 12:36:47 +00:00
David Taylor
41bf8ddfd0
DEV: Add topic-list-after-category outlet (#30797) 2025-01-16 11:24:01 +00:00
dependabot[bot]
6f314490a0
Build(deps): Bump @faker-js/faker from 9.3.0 to 9.4.0 (#30807)
Bumps [@faker-js/faker](https://github.com/faker-js/faker) from 9.3.0 to
9.4.0.
- [Release notes](https://github.com/faker-js/faker/releases)
- [Changelog](https://github.com/faker-js/faker/blob/next/CHANGELOG.md)
- [Commits](https://github.com/faker-js/faker/compare/v9.3.0...v9.4.0)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-16 11:07:43 +01:00
dependabot[bot]
c818f7e17e
Build(deps-dev): Bump jsuites from 5.8.3 to 5.8.5 (#30802)
Bumps [jsuites](https://github.com/jsuites/jsuites) from 5.8.3 to 5.8.5.
- [Release notes](https://github.com/jsuites/jsuites/releases)
-
[Changelog](https://github.com/jsuites/jsuites/blob/master/changelog.md)
- [Commits](https://github.com/jsuites/jsuites/commits)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-16 11:06:08 +01:00