Commit Graph

67281 Commits

Author SHA1 Message Date
Alya Abbott
f9900a0c85 contributor docs: Clarify when (not to) suggest features. 2025-11-11 09:00:27 -08:00
PieterCK
ec3097bbb7 export_modal: Add missing whitespace between translate blocks. 2025-11-11 08:59:25 -08:00
Sayam Samal
14161ad7f0 invite: Fix user invite user modal tab toggle hidden bug.
The invite user modal's tab toggler was being hidden when all the steps
mentioned in the invite tips banner were fulfilled. This happened due
to an error in logic in commit 8a06a6e108
which returned early in the common codepath, when the banner was not to
be shown, preventing the tab toggler from being initialized & rendered.
2025-11-10 16:05:20 -08:00
Sahil Batra
9c571c6f67 users: Use is_imported_stub flag for imported users.
For users imported from other chat applications, is_imported_stub flag
is set to True until the user logs in for the first time.

This is preparation for #26950 to add a separated imported users tab
in "Users" settings panel.
2025-11-10 14:03:52 -08:00
Sahil Batra
d9aff41d88 models: Add is_imported_stub field for UserProfile. 2025-11-10 13:59:15 -08:00
Alya Abbott
3bda5346b8 contributor docs: Update @-mentions guidance for GitHub change.
@-mentions in commit messages no longer trigger notifications.
2025-11-10 11:31:42 -08:00
Aman Agrawal
7a3a599197 left_sidebar: Fix unable to type some hotkeys in expanded topic search.
`views_util.is_in_focus` didn't account for pill elements, which
resulted in expanded topic search in left sidebar being bugged.

Fixed by checking for `focused_element.isContentEditable` which
is always true for focused pill input elements.
2025-11-10 09:11:23 -08:00
Anders Kaseorg
b571e33c54 typos: Fix typos caught by typos.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2025-11-09 22:33:12 -08:00
Sayam Samal
ec18e84ba5 invite: Migrate email invite success banner to new banner component.
Some checks failed
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
Code scanning / CodeQL (push) Has been cancelled
Zulip production suite / Ubuntu 22.04 production build (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:bookworm, true, false, Debian 12 (Python 3.11, backend + documentation), bookworm) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:jammy, false, true, Ubuntu 22.04 (Python 3.10, backend + frontend), jammy) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:noble, false, false, Ubuntu 24.04 (Python 3.12, backend), noble) (push) Has been cancelled
Zulip CI / ${{ matrix.name }} (zulip/ci:trixie, false, false, Debian 13 (Python 3.13, backend), trixie) (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm, --test-custom-db, Debian 12 production install with custom db name and user, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:jammy, , Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga, jammy) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble, , Ubuntu 24.04 production install, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:trixie, , Debian 13 production install, trixie) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm-7.0, 7.0 Version Upgrade, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:bookworm-8.0, 8.0 Version Upgrade, bookworm) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:jammy-6.0, 6.0 Version Upgrade, jammy) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble-10.0, 10.0 Version Upgrade, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:noble-9.0, 9.0 Version Upgrade, noble) (push) Has been cancelled
Zulip production suite / ${{ matrix.name }} (zulip/ci:trixie-11.0, 11.0 Version Upgrade, trixie) (push) Has been cancelled
2025-11-07 17:40:06 -08:00
Sayam Samal
6125faff05 dev: Migrate invite modal's email access info to the new banner system. 2025-11-07 17:40:06 -08:00
Sayam Samal
8a06a6e108 invite: Migrate invite tip banners to the new banner component.
This commit merges the previous invite tips banner into the a single
banner using the new banner component system.
2025-11-07 17:40:06 -08:00
Sayam Samal
77e8731962 invite: Migrate generated invite link banner to new banner component. 2025-11-07 17:40:06 -08:00
Sayam Samal
14deffe350 invite: Consolidate all banners in invite modal to a common container. 2025-11-07 17:40:06 -08:00
Sayam Samal
8b0ec42d17 buttons: Fix line-height for icon-only action buttons.
The default height for the action buttons equalled to 28px at 16px/1em
due to the line-height of 1.25 applied to the label element inside
the button. However, the icons inside the button did not have any
line-height specified, which made the icon-only action buttons slightly
shorter than the buttons with labels. This commit adds the same
line-height to the icons inside action buttons to ensure a consistent
height across all action buttons.

This commit also modifies the padding for the inline topic edit buttons
to counter the increased line-height of the icons, ensuring these
buttons fit the receipient bar.
2025-11-07 17:40:06 -08:00
apoorvapendse
081c5cfe4a compose: Keep composebox closed when reply not allowed.
This fixes the weird behavior that occurs when you click
on some message belonging to a stream where you cannot
post.
Currently, this open the stream recipient dropdown filter
which is confusing.

With this fix, we avoid opening the composebox on clicking
some message belonging to a stream where the user is not
allowed to post.

Using the `R` hotkey triggers a toast stating that
the user cannot reply to that conversation.

And pressing `C` opens up the composebox in the
"Start New Conversation" state with the stream filter
dropdown open.

Fixes: #35866.
Discussion: https://chat.zulip.org/#narrow/channel/9-issues/topic/Recipient.20filter.20appears.20on.20clicking.20some.20message
Signed-off-by: apoorvapendse <apoorvavpendse@gmail.com>
2025-11-07 17:29:56 -08:00
Aman Agrawal
db7bd826a9 inbox: Fix left missing list of topics for old channels.
Since we have the complete list of topics of the channel when
showing list of topics view for the channel, we update
the channel in left sidebar as the new fetched data.

This provides a nicer experince for old channels for which we
don't have any messages to extract any topic info from.
2025-11-07 17:26:01 -08:00
Pratik Chanda
b4b5bb1ec0 compose: Add a + button for adding DM recipients.
This commit adds a `+` button inside compose-direct-recipient box
which on click moves focus to private_message_recipient and opens
up the dm recipient typeahead.

Fixes: zulip#34848.
2025-11-07 17:00:48 -08:00
Pratik Chanda
fe1134c495 compose: Add class for clear topic button in compose.
We use `#recipient_box_clear_topic_button` to apply styles to the
clear topic button. We may end up adding this button to separate
places as well. It will be better to scope the styles to a common
class name and apply it throughout all buttons.
2025-11-07 17:00:48 -08:00
Pratik Chanda
0ee2e4e635 composebox_typeahead: Store dm recipient typeahead instance.
This commit stores private_message_recipient typeahead instance
and exports the instance.
2025-11-07 17:00:48 -08:00
Evy Kassirer
f543ce32bf stream_list: Collapse folders with no active or unmuted channels. 2025-11-07 16:48:07 -08:00
Evy Kassirer
709f1faa93 stream_list_sort: Sort folders with no active channels to the bottom. 2025-11-07 16:26:50 -08:00
Aman Agrawal
86df562eab filter: Only allow specific string values as operator.
This will help us build for the next step where we specifiy
possible operand type for each operand different from just being
a string value.
2025-11-07 16:20:49 -08:00
Lauryn Menard
4934e8e3c0 template-styles: Remove upgrade-tip and upgrade-or-sponsorship-tip.
Removes the CSS rules for upgrade-or-sponsorship-tip and upgrade-tip
as they no longer are in use.

The last use of upgrade-or-sponsorship-tip was removed in commit
a93a015b2.

The last use of upgrade-tip was removed in commit 021af590e.
2025-11-07 16:16:51 -08:00
Lauryn Menard
aba4228e93 help-center: Document "group channels by folder in the inbox" setting.
Documents the new user setting for organizing the display of unread
conversations in the inbox by channel folder. The setting was added
in #36229.
2025-11-07 16:16:37 -08:00
Aman Agrawal
3a8b4959a9 people: Improve fetch users logic to help club mutiple fetch requests.
This will help us club various fetch user calls especially during
initial app load to avoid us hitting API rate limits.

Also, added inifite retry to fetch user on failure.

We do check if the user is in `valid_user_ids` before each retry,
so we will know if the user becomes invalid.
2025-11-07 16:14:17 -08:00
Aman Agrawal
9d5b67c583 peer_data: Provide retry time in miliseconds for setTimeout. 2025-11-07 16:14:17 -08:00
Aman Agrawal
a71b666151 people: Remove test wrapper. 2025-11-07 16:14:17 -08:00
Aman Agrawal
71153535d6 message_edit_history: Better utilize empty space next to media.
We fill the empty text after media with `Link:` text when there
is enough space.
2025-11-07 15:54:10 -08:00
Aman Agrawal
c516e7fccf message_edit_history: Apply highlight colors to links.
This avoids added or deleted links from looking werid due to
changed background color.
2025-11-07 15:54:10 -08:00
Alya Abbott
4cdf505558 help: Make dedicated "moving to Zulip" guides eaiser to find. 2025-11-07 15:41:42 -08:00
Alya Abbott
e560cf3033 help: Adjust invitations documentation based on import availability. 2025-11-07 15:41:42 -08:00
Karl Stolley
3748587efb user-pill: Better align display-only pills with creator text. 2025-11-07 14:21:51 -08:00
Karl Stolley
c85fe706e7 user-pill: Correctly render deactivated icons on display pills. 2025-11-07 14:21:51 -08:00
Karl Stolley
679f1a5df4 user-pill: Correctly render bot icons on display pills. 2025-11-07 14:21:51 -08:00
Karl Stolley
457b80ece6 user_groups: Prepare properly sized group icon.
This removes kludgy font-size adjustments on the group
icon, whose path was previously smaller than the 16x16
viewbox.

By adjusting the icon to take up the full width, it is
no longer necessary to fiddle with the icon's size, in
keeping with the app-wide move to 16x16 icons.

That simplifies some headache-inducing sizing and
calculations on the typeahead as well.
2025-11-07 14:21:51 -08:00
Karl Stolley
b34849a90f user-pill: Present purple pills across the UI.
This commit ensures that the pill color is consistently purple across
the app including the display only pills.

Pills appearing inside of .person_picker elements also receive a hover
color.

Display-only pills do not take a border when clicked.

Fixes: #34815.
2025-11-07 14:21:51 -08:00
Maneesh Shukla
ac9fd5794c user-pill: Add pill-image-border element.
Previously, the pill image was hiding the box shadow of the pill upon
hovering.

We correct this by placing the same .pill-image-border element used
in other pills in the app.

Fixes part of #34815.
2025-11-07 14:21:51 -08:00
Maneesh Shukla
a3c0c1bbd8 user-pill-container: Remove padding and border.
Since the pill-container containing display_only_pills
will never be a container with more than one pill, it is sufficient
to override the default pill-container styles.

Fixes part of #34815.
2025-11-07 14:21:51 -08:00
Karl Stolley
d84469ab4c input-pill: Fix icon misalignment on over-generic selector.
The .zulip-icon selector replaced here was introduced in
6f4d14ddde, which was
targeted at channel privacy icons.

This fixes poor alignment especially noticeable on the
closing X icons on input pills, e.g., in the Groups
permissions area.
2025-11-07 14:21:51 -08:00
Shubham Padia
48b1a72859 integrations: Allow trailing slash when redirecting /integration/docs.
We don't want to break old links that were allowing a trailing slash in
the URL.
2025-11-07 13:29:34 -08:00
Shubham Padia
59ce057519 integrations: Rename functions along with other refactors.
- We rename a bunch of functions in integrations.ts to better reflect
  the work they do after integrations page started being rendered server
  side.
- Use .search_input class instead of input[type="text"] for integrations
  searchbar.
- Use elif instead of if in build_integration_doc_html when checking
  the type of an integration.

Co-authored-by: Niloth P <20315308+Niloth-p@users.noreply.github.com>
2025-11-07 13:29:34 -08:00
Shubham Padia
40dedace08 integrations: Change URL scheme for categories and /doc/ page.
We redirect existing URLs to the new URLs. We want to use
`/integrations/category/{category_slug}` for categories and
`/integrations/{integration_name}` instead of
`/integrations/doc/{integration_name}` for individual integrations page.
2025-11-07 13:29:34 -08:00
Shubham Padia
a9c0cc1162 integrations: Back to list should take you back to previous list.
Last commit broke the back to list functionality and redirected back to
the `all` integrations page no matter which category you navigated from.
This commit fixes that.

This was a kept as a separate commit since that commit has a lot of
changes already and this felt like a commit that could live on it's own.

We take the user back to all in case of an invalid or mis-matched
category.
2025-11-07 13:29:34 -08:00
Shubham Padia
a29da706a7 integrations: Integrations page should no longer be an SPA.
Decision made in https://chat.zulip.org/#narrow/channel/19-documentation/topic/integrations.20docs.20per-page.20info/near/2268569

Integrations and the related docs were all running as an SPA. But to run
them in single page, we had a lot of logic on the frontend to make this
happen. We noticed that we missed to replicate page title changes on the
frontend. With the added burden of maintaining that integrations.ts page
navigation code and the uncertainty of not knowing what we might have
missed to replicate on the frontend, we decided to just render all the
pages server side while keeping our search on the backend.

This commit splits index.html into two templates, catalog.html for
integrations catalog and doc.html for the individual integration details
page.

We use a @typed_endpoint instead of a class based view since there are
very few class based views left in our codebase and this felt like a
nice opportunity to have integrations use them as well.

We port over any special non-navigation logic we were doing in
integrations.ts serverside.

We used to use animations for the lozenges when changing categories, we
don't do that anymore, since every category is a new page fetch and
animation does not make sense in that case.

We also port over the logic of adding the `without-category` class to
the lozenge icon on the indivdidual integration doc page.

We have a few integrations with legacy set to true. We used to set
their display to none in the CSS for the catalog page and we used to
remove that legacy class in integrations.ts for the individual doc page.
We remove legacy integrations from `visible_integrations` now, while the
individual doc page of the legacy integration works just fine without
the use of `legacy` class anywhere.
2025-11-07 13:29:34 -08:00
Shubham Padia
7b0d8db45f dependencies: Upgrade python-zulip-api version to latest.
Main commit we want here is
0f8050018a
which eliminates the use of relative URL for integrations catagory. This
is needed since the URL structure of /integrations is going to change in
upcoming commits.
2025-11-07 13:29:34 -08:00
Shubham Padia
adf8b70b67 integrations: Add missing include to Gitea docs.
Gitea integration doc was referencing #filtering-incoming-events for
which we need to include `event-filtering-additional-feature.md`. This
commit adds that missing include.
2025-11-07 13:29:34 -08:00
PieterCK
0b063878d3 settings_export: Warn if some accounts will be unusable.
Since it is now possible to generate export with no usable owner
accounts, this adds a couple of warning notes in the "Start export?"
confirmation modal:

  - A note indicating the number of unusable user accounts after export
→ import due to inaccessible user emails.

  - If there are any owner/admin accounts in that list, an additional
note will display their names.

Fixes #34275.
2025-11-07 12:53:18 -08:00
PieterCK
ad77e2d2f5 test_realm_export: Don't run export unnecessarily. 2025-11-07 12:53:18 -08:00
Tim Abbott
8a08b0d74e zulip.yaml: Fix prettier errors. 2025-11-07 12:53:18 -08:00
Prakhar Pratyush
7ebdca52e8 push_notification: Use symmetric cryptography to encrypt notifications.
Earlier we were using asymmetric cryptography.

We were using libsodium "sealed box" which is unauthenticated
by design. The sender could have been anyone, as long as they
had the receiver's public key.

We had authenticity but only because the device's public key
is effectively kept secret. We were relying on the public key
being kept secret - which was a security risk. It's easy to
end up with code somewhere that treats the public key as public,
and can leak it.

This commit makes changes to use symmetric cryptography -
libsodium's `crypto_secretbox_easy` which provides authenticated
encryption using XSalsa20 and Poly1305.

`push_public_key` is replaced with `push_key` and it represents
a base64 encoded 33-byte value: one-byte prefix followed by 32-byte
secret key generated by the client.

The prefix `0x31` indicates the current cryptosystem in use.
It allows for future extensibility - for example, `0x32` could denote
a different cryptosystem.

Involves API changes to replace the `push_public_key` parameter
with `push_key` in `/api/v1/mobile_push/register` endpoint.

Signed-off-by: Prakhar Pratyush <prakhar@zulip.com>
2025-11-07 12:00:39 -08:00