Compare commits

..

1622 Commits

Author SHA1 Message Date
Tim Abbott
c0afd36843 Release Zulip Server 7.0-beta1. 2023-05-02 17:45:07 -07:00
Tim Abbott
18d8fbc74b docs: Update changelog since 6.0 release. 2023-05-02 17:45:07 -07:00
Hardik Dharmani
8829190ec6 unread: Deduplicate the logic for adding up unread counts.
Deduplicated logic for calculating unread message counts and
stream counts for subscribed streams by refactoring `get_counts` to
use `get_stream_count` function for calculating unread message counts
for each subscribed stream.
2023-05-02 15:43:29 -07:00
Aman Agrawal
770a789651 hashchange: Hide popovers on change in hash.
Fixes #24641

When the user clicks on a link which has `stopPropagation`
and doesn't trigger `scroll`, then we don't hide any existing
popovers if the element being clicked doesn't hide popovers
explicitly.

To fix this, we hide all popovers on change in hash which makes sense
on its own given how we use hashes.
2023-05-02 15:41:37 -07:00
Karl Stolley
cfbfc37927 scheduled_messages: Hide Scheduled messages on 0 count.
This commit introduces structures and logic to hide the Scheduled
messages item from the left sidebar if there are no messages
scheduled to be sent.

Test coverage has been added for counts and visibility, too.

Fixes: #25101
2023-05-02 15:26:33 -07:00
Karl Stolley
2d9cbfa8f1 scheduled_messages: Add left sidebar count.
This commit introduces logic to present a message count with the
Scheduled messages item in the left sidebar.

The count is present on the initial load, and is updated as a user
adds or removes scheduled messages.
2023-05-02 15:26:33 -07:00
Daniil Fadeev
6dc10f8696 compose: Pass a container to which the banner should be applied.
This fixes banners related to message editing incorrectly appearing
next to the compose box.

Fixes: #25230.
2023-05-02 14:09:09 -07:00
Tim Abbott
c70910b5dc upload: Fix close widget in edit form banners not working.
The selector was wrong, but the logic also created a bunch of
duplicate click handlers.
2023-05-02 14:09:09 -07:00
Daniil Fadeev
394b3586b9 compose: Add a helper function to find the banner container. 2023-05-02 14:09:09 -07:00
Daniil Fadeev
3b35307c20 compose: Add option to specify container for appending banners. 2023-05-02 14:09:09 -07:00
Tim Abbott
d96fac2b59 compose: Fix compose banner click handlers when editing messages.
The click handlers for compose banners, many of which can appear both
in the message editing code path and above the compose box, were
incorrectly scoped to only the #compose_banners container.

These click handlers were all overly specific; they already have a
very unique selector in the form of things like
.compose_banner_close_button, and more shouldn't be necessary.
2023-05-02 14:09:09 -07:00
Hardik Dharmani
3d3d30166d tooltips: Update content of Narrow-to toolips. 2023-05-02 13:50:46 -07:00
Hardik Dharmani
03cfb3d9fe tooltips: Add S hotkey hint to narrow-to tippy tooltips.
Added hotkey hint to Narrow to stream/topic/DM tooltips by creating
new tippy for `tippy-narrow-tooltip` with LONG_HOVER_DELAY which
appends `S` hotkey to the existing tippy content set by
data-tippy-content attribute on the element.

Using this approach instead of a <template> with
data-tooltip-template-id avoids issues with context, where
{display_recipient}/{topic}/{display_reply_to} inside <template>
would always show the same stream/topic name regardless of the
actual stream/topic being hovered over.
2023-05-02 13:50:46 -07:00
Sahil Batra
e3598c80ec settings: Move setting to allow message content in email notifications.
We move "Allow message content in message notification emails" setting
from "Other settings" subsection to "Automated messages and emails"
subsection.

Fixes #25339.
2023-05-02 13:42:38 -07:00
Sahil Batra
691f3c2d49 settings: Reorder settings in "Automated messages and emails" section.
This commit reorders the settings in "Automated messages and emails"
subsection such that most useful options are at top and automated
messages and email settings are grouped together as proposed
in #25339.
2023-05-02 13:42:38 -07:00
Sahil Batra
b2873d312d settings: Move setting elements inside organization-settings-parent div.
This commit moves all the settings in "Automated messages and emails"
subsection inside ".organization-settings-parent" div to make it
consistent with other subsections. This does not affects visual
appearance.
2023-05-02 13:42:38 -07:00
Tim Abbott
9bdb044ff4 i18n: Update translation data from Transifex. 2023-05-02 13:16:25 -07:00
evykassirer
9ea6eca253 compose: Move cursor to end of topic input after stream selection.
Fixes #25321.
2023-05-02 12:49:31 -07:00
Lauryn Menard
b5c4064b7b api-docs: Clarify topic parameter for create-or-edit-scheduled-message. 2023-05-02 12:46:41 -07:00
Anders Kaseorg
a31ff01211 node_cache: Disable pnpm update check.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-05-02 12:29:38 -07:00
Tim Abbott
2afe6fea3a send_later: Fix leaking drafts for scheduled messages.
Previously, if one had started working on a message from a draft, and
then schedules it to be sent later, the draft would not be cleared
when the server accepts the request to schedule the message.
2023-05-02 12:20:30 -07:00
Hardik Dharmani
2aaf098ebc compose: Shorter the separator line between Send and 3-dot buttons.
Added a div inside #send_later button with class separator-line,
height 70%, width 1px and `background-color: hsl(0deg 0% 100% / 65%)`
to make it look like a line also made #send_later a flex with
`align-items: center` so that separator line is vertically centered.
2023-05-02 11:05:45 -07:00
Joelute
4d91df559c unread_banner: Update colors of unread banners.
Previously, the color of the unread banners is yellow which signals more
of a warning to the users. After a discussion in CZO, it was decided to
set setting configured unread banners to blue, which represents more of a
notice/informational banner as the user should be aware of the changes they
made to their settings.
2023-05-02 09:14:28 -07:00
Joelute
5018cec311 unread_banner: Refactor unread banner HTML structure.
Previously, the unread banner templates just rendered on the contents of
the unread banner. This works fine if we don't want to make changes towards
the parent/container of the contents.

This change introduces a new container to each unread banner templates and
a rename. Thus, we can make unique styling changes to the unread banners
while also bring the structure closer to how it is for compose banners.
2023-05-02 09:14:28 -07:00
Alex Vandiver
47e0a89739 webpack: Silence out-of-date warnings from caniuse browserslist. 2023-05-02 09:12:22 -07:00
Aman Agrawal
578ddbc5c8 scheduled_message_banner: Change design.
Convert `View scheduled messages` button into a link and use
default colors for "Undo" button.
2023-05-02 09:10:58 -07:00
Aman Agrawal
9a71a7683f popover_menus: Use correct method to close send_later_modal.
Previous method was rightly giving us console warnings.
2023-05-02 09:10:58 -07:00
Aman Agrawal
a90862566f scheduled_messages: Pop scheduled_messages from page_params. 2023-05-02 09:10:58 -07:00
Aman Agrawal
ce3dcbab71 scheduled_messages: Remove impossible case.
This case handled client receiving an `add` event before
scheduled_messages was initialized.  Since `server_events`
is initialized after scheduled_messages is initialized,
this case was not possible.
2023-05-02 09:10:58 -07:00
Aman Agrawal
a6bd4a6565 sever_events_dispatch: Place scheduled_messages event alphabetically. 2023-05-02 09:10:58 -07:00
Aman Agrawal
0d3b617a82 send_later_modal: Disable interaction with modal when flatpickr is open.
Fixes #25365
2023-05-02 09:10:58 -07:00
Lalit
852bfd8d7a style: Add bootstrap link styles in the app's index.html.
We add bootstrap anchor tag styles in our main `index.html` page so
that the link styles are always applied on the reload link and it looks
like a link.

Fixes #25377.
2023-05-02 09:01:37 -07:00
Tim Abbott
1c07756150 scheduled messages: Use data-scheduled-message-id.
This helps make it really clear that these are not message IDs, they
are scheduled message IDs.
2023-05-01 22:45:03 -07:00
Aman Agrawal
12a2e3122f popover_menus: Show last selected time in send later popover. 2023-05-01 22:45:03 -07:00
Aman Agrawal
ee354bb007 send_later: Only store timestamp values in selected_send_later_timestamp.
This removes any confusion regarding what format of time does
this variable has.
2023-05-01 22:45:03 -07:00
Aman Agrawal
1885ed783a compose: Add new banner for success message scheduled. 2023-05-01 22:45:03 -07:00
Aman Agrawal
fe4bfebbdc scheduled_messages_overlay_ui: Show scheduled time in standard format. 2023-05-01 22:45:03 -07:00
Aman Agrawal
7d373c54a9 scheduled_mesages: Use events to update scheduled message data.
This also allows to display scheduled message overlay without
fetching any data.
2023-05-01 22:45:03 -07:00
Aman Agrawal
eb5f679121 scheduled_messages_overlay_ui: Use CSS to display no scheduled messages. 2023-05-01 22:45:03 -07:00
Aman Agrawal
1b60019c60 schedule: Remove 'Schedule' state of compose box.
Fixes #25340

This means that we now schedule the message simply after selecting
time if the message is valid.

Also, editing scheduled messages will now delete the scheduled
message and open compose with scheduled message.
2023-05-01 22:45:03 -07:00
Anders Kaseorg
8f2f2654a5 web: Avoid slow jQuery :selected selector.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-05-01 22:39:31 -07:00
Anders Kaseorg
ff2a7b775a web: Avoid slow jQuery :input, :checkbox, :radio selectors.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-05-01 22:39:31 -07:00
Lalit
7aa1763d73 typeahead: Delete display mode slash commands.
This commit deletes `/fixed-width` and `/fluid-width` slash commands
from the typeahead and also hides the slash commands `/light` and
`/dark` in production.

Fixes #25374.
2023-05-01 22:31:04 -07:00
Tim Abbott
7425079814 topic_list: Show muted unread counts in muted streams.
When all the unread messages in a muted stream are in specifically
muted topics, this ensures that the total unread count for the stream
that the user sees before clicking "more topics" will match the total
unreads number for the stream itself.

This behavior is limited to muted streams, since in a normal / not
muted stream, we don't display a "muted topics only" faded unread
count by the stream's summary line to avoid distracting the user with
it, we match that behavior for the "more topics" line.

We also now display the `@` , again to ensure the stream's summary
line never displays an `@` without some topic row having one.
2023-05-01 21:13:53 -07:00
Anders Kaseorg
ba170b4aee util: Speed up clean_user_content_links by persisting an inert document.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-05-01 20:55:01 -07:00
Anders Kaseorg
c951b72884 right_sidebar: Fix use of undefined realm_rendered_description.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-05-01 20:55:01 -07:00
N-Shar-ma
1480eca7d5 hotkey: Update deprecation notices to use Shift for capital letters.
To make the deprecation notices consistent with how we format shortcut
keys, we use "Shift +" prefix for capital letters, and write small
letters as capitals.
2023-05-01 20:32:58 -07:00
N-Shar-ma
c6ba33b7b4 hotkey: Repurpose s to toggle conversation view and remove shift+s.
Earlier, the `s` hotkey just narrowed to the stream of the selected
message (to a topic), while `shift+s` narrowed to the conversation view
(topic / dm) of the selected message.

Now, the `shift+s` hotkey has been removed (but retained for toggling
subscription to a stream when the stream overlay is active), and the `s`
hotkey takes on double duty: if the current view is not topic / dm, it
narrows to that, else when in topic view, it switches to stream view. It
has no effect when in dm view. Documentation has been updated for this
both in the help center, and the in-app `Keyboard shortcuts` menu.

A deprecation notice has been added for `shift+s` as well.

Fixes: #24226.
2023-05-01 20:32:58 -07:00
Hardik Dharmani
d7114dc291 left_sidebar: Drop underlined behaviour on focus for <a> elements.
Fixes #25359
2023-05-01 20:32:35 -07:00
Tim Abbott
18e2cee572 typeahead: Do not prioritize exact name matches for users.
As discussed in the comment, this resulted in the many inactive users
in chat.zulip.org with "Tim" as their full display name from being
incorrectly prioritized over me in a stream where I've been active;
and this class of problem seems like it will be common in large open
communities.

This reverts a portion of 4dc1b2f812,
with explanatory comments for why this behavior is preferred.

The stream name changes in the original PR remain very helpful.
2023-05-01 17:10:59 -07:00
Tim Abbott
0b7dd46530 stream settings: Improve label for stream edit modal.
"Change stream info" was very ambigious about what types of
information can be changed in the modal in question.
2023-05-01 17:04:17 -07:00
Tim Abbott
2dd1ff7bfd stream settings: Use tippy-zulip-delayed-tooltip more.
This fixes an issue where the "Change stream info" button would
display a tooltip immediately upon closing the modal to edit the
stream name and description.
2023-05-01 17:04:17 -07:00
Lauryn Menard
a5b527f321 onboarding: Specialize Welcome Bot message for education organizations.
Because education organizations and users have slightly specialized
use cases, we update the Welcome Bot message content sent to new
users and new organization owners for these types of organizations
to link to help center articles/guides geared toward these users
and organizations.

Also, updates the demo organization warning to only go to the new
demo organization owner because the 30 day deletion text is only
definitely accurate when the organization is created.

Fixes #21694.
2023-05-01 16:48:48 -07:00
Karl Stolley
aa78d9bf26 docs: Make a few surface fixes. 2023-05-01 16:37:27 -07:00
Karl Stolley
7f06baf360 docs: Polish usage assumptions copy. 2023-05-01 16:37:27 -07:00
sbansal1999
323d749189 status-message: Add margin-top to sender info to avoid overlap.
Earlier, the sender info would overlap with the edit compose
area because of another class applying "margin-top" to keep
the sender info properly aligned when the message is not being
edited. However, that "margin-top" had to be changed when the edit
compose is opened.

This commits adds that "margin-top" to sender info to make sure
that it doesn't overlap with the edit compose area.
2023-05-01 16:36:37 -07:00
Alex Vandiver
8a3236638a docs: Update sharding docs for single-org sharding option.
Co-authored-by: Tim Abbott <tabbott@zulip.com>
2023-05-01 11:28:08 -07:00
Alex Vandiver
510b96046a docs: Update production docs for local S3 caching. 2023-05-01 11:28:08 -07:00
Aman Agrawal
a02f431036 css: Fix date row overlapping with message header.
When there was an unread message below date row, the date
row overlaps with the message header.

This was a result of #23538 not adjusting the message header
z-index along with the z-index of date row.
2023-05-01 10:56:44 -07:00
sbansal1999
aa33ae4af8 ts: Convert resolved_topic.js to TypeScript. 2023-05-01 10:55:36 -07:00
Daniil Fadeev
914ed51d70 compose: Fix buttons in error banners is not clickable. 2023-05-01 10:37:09 -07:00
sbansal1999
eb56703310 lint: Update line-length for commit message to 72 in gitlint.
This commit updates the line-length for commit message in gitlint
to 72, as recommened in the documentation.
2023-05-01 10:35:52 -07:00
sbansal1999
6b599d521f docs: Update recommended commit summary length to 72 characters.
This commit updates the recommended commit summary length
to 72 characters in the documentation. If the commit message
exceeds this length than GitHub cutoffs the remaining characters.
2023-05-01 10:35:52 -07:00
Lauryn Menard
06dd7a3a68 emails: Add corporate_enabled to context for emails.
In commit fc58c35c0, we added a check in various emails for the
settings.CORPORATE_ENABLED value, but that context is only always
included for views/templates with a request.

Here we add that to common_context, which is often used when there
is not a request (like with emails). And we manually add it to the
email context in various cases when there is not a user account to
call with common_context: new user invitations, registration emails,
and realm reactivation emails.
2023-05-01 10:32:43 -07:00
Steve Howell
663170f0d3 code cleanup: Alphabetize event types in switch statement. 2023-05-01 07:26:51 -07:00
Daniil Fadeev
f1db695650 emails: Fix body tag styles being applied in messages template. 2023-05-01 07:13:50 -07:00
Tim Abbott
6fe02e933a timerender: Extract new variant of get_full_datetime.
Separating these concepts allows us to provide a much nicer format for
contexts where ultra-specific clarification is not a priority.

This new variant is currently only used in the scheduled messages UI.
2023-04-30 22:39:52 -07:00
PALASH BADERIA
341f3a1ce2 tippy: Add message_list_tooltip helper to clear tooltips on rerender.
We've had a series of bugs where tooltips get leaked when a message list
is rerendered. For some tooltips, we used a 'mutation observer' to remove the tooltip
in this situation, but this was expensive and messy. We replace this with a Tippy
plugin to keep track of this class of tooltips, with a central hook to remove them
during rendering.

Message lists are rerendered in the background in a variety of situations;
a simple way to trigger it is clicking the mute/unmute topic/stream button in
the topic menu/stream menu and the clickable area overlaps with the
message list tooltips area. If a tooltip was visible at the time, the tooltip loses its
reference due to the re-rendering removing its DOM element, appearing at the top-left corner.

To prevent this behavior for all message list tooltips, we need to
store all instances of the message list tooltips and then destroy
them if the instances does refer to something else then document.body
using the 'destroy_all_message_list_instances' function just
before re-rendering.

Whenever the message list is rendered, all the message list tooltips
will be destroyed if they do not refer to document.body. This
prevents the double appearance of those tooltips if the reference
is removed from the DOM.

This plugin allows us to remove the mutation observers and net delete code
while hopefully fixing this bug for the whole app.
2023-04-30 22:33:14 -07:00
Tim Abbott
368d2aa27d compose: Fix misaligment of compose top right icons.
When composing a private message to a different recipient than the
current view, the go-to-compose-target icon looked vertically
misaligned with these icons. Fix this by removing the CSS rule that
made these other top-corner icons not centered within their row.
2023-04-30 21:02:21 -07:00
Hardik Dharmani
69779688f0 settings: Update disabled state of button in email change modal.
The new update_submit_disabled_state_on_change feature of the
dialog_widget component makes this simple.

Fixes #22683.
2023-04-30 20:56:51 -07:00
Hardik Dharmani
96d6fda2a7 dialog_widget: Add support for managing submit button disabled state.
The new update_submit_disabled_state_on_change parameter configures
the dialog_widget system to disable/enable the confirmation button
depending on whether any of the fields in the modal have values
differing from their initial values.

Fixes #22683.
2023-04-30 20:56:49 -07:00
sbansal1999
33705b6116 tooltips: Remove keyboard shortcuts from View Scheduled Messages modal.
This commit removes the keyboard shortcut from tooltips that
can be seen when hovering over the two buttons in
"View Scheduled Messages" modal.

This is a temporary change as the keyboard shortcut will be
added to the tooltips when the shortcuts are actually working.
2023-04-30 20:34:53 -07:00
Aman Agrawal
eeb3ff26e1 css: Fix loading spinner position for messages loading indicator. 2023-04-29 07:21:19 -07:00
Lalit
3e179a2c58 actions_popover: Hide "Add emoji reaction" in action menu in spectator mode.
We should hide the "Add emoji reaction" from the message action menu while a
user is not logged in, that is user is in public access mode.

Fixes #25331.
2023-04-28 20:09:24 -07:00
palashb01
acba8518fb recent: Replace presence dot with bot icon for bots.
This commit replaces the presence dot with a bot icon for
private messages (PMs) with bots in the recent conversations
narrow.
2023-04-28 19:14:00 -07:00
palashb01
8eb90bbc7f left_sidebar: Fix the opacity of group,bot icons.
This commit fixes the opacity of the group-icon and bot-icon
in the left-sidebar direct message section to make them look
 more consistent with the other icons in the left sidebar.
2023-04-28 19:14:00 -07:00
palashb01
cee0cabd8d left_sidebar: Replace the presence dot with bot icon for bots.
This commit replaces the presence dot display with a bot icon
for bots in the left sidebar PM list.
2023-04-28 19:14:00 -07:00
palashb01
29377c7f32 user_card: Fix the padding of bot-icon with name.
This commit fixes the padding of the bot-icon with the name
to make it look consistent with the way it is displayed in
the message feed.
2023-04-28 19:14:00 -07:00
palashb01
bb4d2f5f5b profile_popover: Remove the display presence dot for bots.
This commit removes the presence dot display for bots and fixes
the gap between the bot name and bot icon in the user profile
popover. It also fixes the alignment of the bot icon.

Fixes: #25066
2023-04-28 19:14:00 -07:00
evykassirer
199afbe8eb messagebox: Update background-color for mentions.
This is part of #22059.
2023-04-28 19:06:50 -07:00
Tim Abbott
56c5c8902b scheduled_messages: Disallow dates in the past in the UI.
The server will probably accept them and just send the message
immediately, which seems OK, but we probably want to discourage
scheduling a message to be sent in the past, since that's unlikely to
be intentional and would make it hard to undo.
2023-04-28 19:01:40 -07:00
Tim Abbott
cef1e3363c compose: Increase size of recipient menu.
We should do a better long-term fix, but the current menu feels cramped.
2023-04-28 18:44:11 -07:00
Tim Abbott
798391824b compose: Refactor dropdown-menu CSS rules. 2023-04-28 18:43:51 -07:00
Karl Stolley
e4ae4c5b75 send_later: Remove send_later_input_group.
This removes the HTML structure and CSS styles previously associated
with the element in the scheduling modal.

Preserving this all in its own commit in case it needs to be
restored.
2023-04-28 17:50:54 -07:00
Karl Stolley
8180cc786f send_later: Pick time from 'Custom time' link.
This introduces a 'Custom time' link to the bottom of the scheduling
modal's options. Clicking on it pulls up the date picker.

Additionally, clicking on the 'Custom time' link, then clicking
elsewhere to close the time-picker, then subsequently clicking
'Custom time' again reveals the time-picker.

However, repeatedly clicking the 'Custom time' link while the
date-picker is already open will cause the date-picker to redraw
each time.
2023-04-28 17:50:54 -07:00
Karl Stolley
865cba834b send_later: Cancel scheduling from popover. 2023-04-28 17:50:54 -07:00
Aman Agrawal
e89cbf0ac1 send_later: Move some options to a modal. 2023-04-28 17:50:54 -07:00
Tim Abbott
13592b4495 scheduled_messages: Fix date formatting call.
d42ac60d61 accidentally lost the "new Date" part.
2023-04-28 17:50:54 -07:00
Tim Abbott
d42ac60d61 scheduled_message: Fix i18n for scheduled time. 2023-04-28 17:25:00 -07:00
Lauryn Menard
d41f12495d api-docs: Document create/edit scheduled message endpoint and events.
Adds API changelog update for the new endpoint added for creating
or editing scheduled messages, for the events sent for scheduled
messages (add, update, delete), and for the `scheduled_messages`
field in the register response.

Adds a specific API markdown documentation file for the create
or update scheduled messages endpoint, so that the parameters in
the cURL examples are accurate for the type of message (direct or
stream) and action (create or edit).

Bumps the API feature level, adds Changes notes to API documentation
and adds the scheduled message endpoints to the API documentation
sidebar.
2023-04-28 17:25:00 -07:00
Lauryn Menard
15c6d67e9c populate-db: Add scheduled message to test database.
Prep commit for adding the scheduled-message endpoints to the API
documentation.

Adds a scheduled message for Iago in the test database so that it
can be deleted in the delete cURL example in the api-test suite.
2023-04-28 17:25:00 -07:00
Aman Agrawal
bd2545b0d7 scheduled_message: Send CRUD events to clients. 2023-04-28 17:25:00 -07:00
Aman Agrawal
f40855bad2 reminder: Remove feature from zulip.
This is being removed to make the code simpler. We have plans
to add it as a feature in the future , but it will most likely
not use the same code.
2023-04-28 17:25:00 -07:00
Aman Agrawal
6bff396711 scheduled_messages: Remove unnecessary compose_fade call.
We just need to call clear_compose_box() here similar to when
sending a message.
2023-04-28 17:25:00 -07:00
Aman Agrawal
5baa0dc313 compose: Use the new endpoint to create scheduled messages. 2023-04-28 17:25:00 -07:00
Aman Agrawal
d60d6e9115 urls: Add new endpoint to create scheduled messages.
This will help us remove scheduled message and reminder logic
from `/messages` code path.

Removes `deliver_at`/`defer_until` and `tz_guess` parameters. And
adds the `scheduled_delivery_timestamp` instead. Also updates the
scheduled message dicts to return `scheduled_delivery_timestamp`.

Also, revises some text in `/delete-scheduled-message` endpoint
and in the `ScheduledMessage` schema in the API documentation.
2023-04-28 17:25:00 -07:00
Lauryn Menard
7739703111 scheduled-messages: Update scheduled message objects in the API for type.
Updates the objects in the API for scheduled messages so that those
for stream messages return the `to` property as an integer since it
is always the unique stream ID and so that those for direct messages
do not have a `topic` property since direct messages never have a
topic.

Also makes small update so that web app scheduled messages overlay
has the correct stream ID.
2023-04-28 17:25:00 -07:00
Aman Agrawal
4718eaa213 scheduled_messages: Extract method to get undelivered scheduled messages.
This also changes key for `ID` of scheduled message from `message_id`
to `scheduled_message_id`.
2023-04-28 17:25:00 -07:00
Aman Agrawal
4cb238fb6e models: Add method to convert ScheduleMessage objects into dicts. 2023-04-28 17:25:00 -07:00
Aman Agrawal
963fe566d7 scheduled_messages: Use scheduled_message_id instead of message_id.
Using `message_id` can be confusing for API users since it can be
mistaken for the ID of the message that will be sent.
2023-04-28 17:25:00 -07:00
Aman Agrawal
7bf0793c94 scheduled_messages: Move database related function to /actions.
This would match the pattern we use for other modules and also
shrink the giant message_send.py.
2023-04-28 17:25:00 -07:00
Aman Agrawal
cddf25656f test_message_send: Move out scheduled message tests. 2023-04-28 17:25:00 -07:00
Hardik Dharmani
a2b36bbabb user_card: Fix user_card background for dark theme for width < $md_min.
Previously, in the dark theme, the `background-color: #18222f` of the
`.popover` class took precedence over the
`background-color: hsla(0,0%,0%,.7)` of the `.message-info-popover`
and `.user-info-popover` classes. This commit fixes this issue by
adding !important to the background-color property of
`.message-info-popover, .user-info-popover` classes.
2023-04-28 15:35:43 -07:00
Hardik Dharmani
d43c5e6071 tooltips: Convert edit notice tooltips to tippy. 2023-04-28 15:34:59 -07:00
Hardik Dharmani
15860c8b13 tooltips: Convert recipient row tooltips to tippy. 2023-04-28 15:34:59 -07:00
Tim Abbott
95c81ba029 emails: Fix CSS type for no-content-explanation. 2023-04-28 15:20:53 -07:00
Tim Abbott
58dba63324 policies: Update Zulip Cloud EU Representative. 2023-04-28 13:40:56 -07:00
Aman Agrawal
b33438eb55 css: Move 10px navbar bottom padding above message header.
This is a more natural place for this extra padding than below the
navbar. Padding below navbar was primarily needed to hide the
message content above the sticky header while scrolling the message feed.
We are still able to do with this change without partially hiding the
loading message indicator.

Fixes #25159
2023-04-28 12:48:10 -07:00
Lalit
0d51e2d1f9 left_sidebar: Add same styles to schedule messages row as all other rows.
This fixes the bug where the schedule message whole row was not clickable
and had some padding issues. By adding same styles as all other rows in
left sidebar we eliminate those bugs.
2023-04-28 12:44:59 -07:00
Karl Stolley
df508659db css: Lighten button border for visibility.
This replaces the previous dark border.

A pure white border looked a little too garish, so this dials back the
alpha channel just a bit.

Fixes: #25303.
2023-04-28 12:44:30 -07:00
Karl Stolley
942eb7b375 css: Pad send button for click comfort. 2023-04-28 12:44:30 -07:00
Karl Stolley
d9654f4f0a css: Introduce padded vdots for send later.
This uses eyeballed vertical padding on the nested .zulip-icon class
to ensure that the entire send-later button area is clickable (and
not merely hoverable).
2023-04-28 12:44:30 -07:00
Alex Vandiver
4f2417cfc4 soft_reactivation: Add a partial index to speed up event lookups.
The full auditlog table is moderately large, and the previously-chosen
index (on `modified_user_id`) is not terribly specific.
2023-04-28 12:43:34 -07:00
Alex Vandiver
a56da4be76 soft_deactivation: Only fetch necessary columns.
Existing tests verify that this does not add more queries.
2023-04-28 12:43:34 -07:00
Alex Vandiver
ae7485a96e soft_deactivation: Do not bother to fetch stream data as well.
This prefetch is unnecessary and makes this query load more data than
needed.

Existing tests verify that this does not add more queries.
2023-04-28 12:43:34 -07:00
Aman Agrawal
2deec692f6 dark_theme: Fix dark recipient background in light theme for spectators.
Since, we didn't update `user_settings.color_scheme` for spectators
and our recipient bar color calculations were based on it, this
resulted in a wrong recipient bar color if the OS default color
scheme of the user was different from `spectator-theme-preference`
set by the user using the gear menu.

To reproduce the bug:
* Set preferred color scheme to `dark` in your OS settings / Chrome
  dev tools.
* Login as spectator in Incognito.
* Switch to light theme.

You will see dark background colors in recipient bars.
2023-04-28 12:39:46 -07:00
Lauryn Menard
f574bd4952 narrow: Fix "pm-with" narrow in scheduled messages. 2023-04-28 12:38:29 -07:00
Tim Abbott
a03dca93ca message_edit: Clarify losing_access_user_ids calculation.
This was previously called delete_event_notify_user_ids, which seemed
to narrow its purpose in a way that was confusing given that it's also
used for other calculations.

Further, calculate it as soon as we know it, not when we're first
going to use it.
2023-04-27 18:35:32 -07:00
Tim Abbott
71e57d2022 message_edit: Clarify name for gaining_usermessage_user_ids.
This list contains user IDs, not subscription objects.
2023-04-27 18:35:32 -07:00
Tim Abbott
3ff361a1f0 message_edit: Use sets for old/new stream IDs.
This fixes a quadratic performance issue iterating through these
lists. Give these variables slightly better names while we're at it.
2023-04-27 18:35:32 -07:00
Tim Abbott
496b403fcf tooltips: Add new central tooltip template store.
We should migrate all the static content tooltip templates to this
file to avoid duplicate DOM elements.
2023-04-27 18:12:32 -07:00
Hardik Dharmani
ea6ae50326 tooltips: Add tippy tooltip for view_user_card.
Added modern tippy tootip for view_user_card tooltip by adding a
<template> with id=view-user-card-tooltip-template for the element.

Fixes part of #24311.
2023-04-27 18:12:32 -07:00
Tim Abbott
6aea3f2be5 tooltips: Use tippy tooltip for stream list toggle. 2023-04-27 18:12:32 -07:00
Hardik Dharmani
dcfd374f2f left_sidebar: Correct hotkey for All direct messages tooltip. 2023-04-27 18:12:32 -07:00
Hardik Dharmani
941c15b802 tooltips: Add tippy tooltip for search_query.
Added tippy tooltips for search_open, search_close icon and
search_query input field with hotkey hint `/' by adding a class
`.tippy-zulip-delayed-tooltip` which adds tooltip with
LONG_HOVER_DELAY and default placement top with fallback placement
equal to bottom.

Added tippy tooltip with text `Close` on `.search_close_button`.

Fixes part of #24311
2023-04-27 18:12:32 -07:00
Hardik Dharmani
9c866f9be1 tooltips: Add tippy tooltip for message expander/condenser.
Added tippy tootip for '.message_expander' and
'.messsage_condenser' by adding '.tippy-zulip-delayed-tooltip' class,
and creating 2 <template> with id equal to crresponding
data-tooltip-template-id of the elements.

Fixes part of #24311
2023-04-27 18:12:32 -07:00
Hardik Dharmani
15a15240da tooltips: Add tippy tooltips in manage stream settings.
Added tippy tooltips for create_stream_plus_button and
preview-stream-button in manage stream settings by adding
class `.tippy-zulip-delayed-tooltip` which add tooltips
with LONG_HOVER_DELAY. Added data-tippy-placement="bottom"
to match with 'Archive stream' tooltip.

Created a new tooltip for sub_unsub_button in tippyjs with
class .toggle-subscription-tooltip that has
EXTRA_LONG_HOVER_DELAY, placement equals to bottom
and appended to body.

Fixes part of #24311.
2023-04-27 18:12:32 -07:00
Hardik Dharmani
394fcbfd51 tooltips: Add tippy tooltip for userlist-toggle icon with hotkey hint W. 2023-04-27 18:12:32 -07:00
Hardik Dharmani
892bd38062 tooltips: Use tippy for gear-menu icon with hotkey hint G.
Fixes part of #24311
2023-04-27 18:12:32 -07:00
Hardik Dharmani
7785fb2948 tooltips: Add new tippy configuration .tippy-zulip-delayed-tooltip.
Added new tippy tooltips configuration with target class
`.tippy-zulip-delayed-tooltip` which add tooltips with
`delay: LONG_HOVER_DELAY`, appended to body, and have a
default placement top with fallback placement equal to bottom.

Fixes part of #24311
2023-04-27 18:12:32 -07:00
Palash Baderia
c10d33d23c tippy: Remove the focus trigger from the compose-control-buttons.
By default, tippyjs uses a trigger value of 'mouseenter focus',
which means that the tooltips can appear either when the element
is hovered over or when it receives focus (e.g., by being clicked).
Because of this, if you click on the button to open the popover,
the tooltip also appears. To prevent this behavior, we need to
remove the 'focus' trigger from the buttons so that the tooltips
don't appear when the buttons are clicked.

Fixes: #25277
2023-04-27 17:36:48 -07:00
evykassirer
19d5fedfd2 compose: Move functions around to reduce circular imports. 2023-04-27 17:04:19 -07:00
evykassirer
0e13134be2 stream header colorblock: Remove unnecessary find. 2023-04-27 17:04:19 -07:00
evykassirer
f9bf688c9e compose: Add DM icon to the recipient dropdown.
This commit adds the new users icon and uses it in the
recipient dropdown, both in the selection options and
the selected option displayed on the button.
2023-04-27 17:04:19 -07:00
evykassirer
408bdc2273 compose recipient: Move DM to bottom of dropdown when feature is disabled. 2023-04-27 17:04:19 -07:00
evykassirer
18312be6db compose: Add ability to switch to PM in stream dropdown.
Fixes #3409
2023-04-27 17:04:19 -07:00
evykassirer
e4fc197871 click handlers: Don't move focus for clicks in compose box while composing.
If a click happens somewhere within compose, we don't want to cancel compose
and we also don't necessarily want to refocus the cursor in the compose
text area.

This change was made because clicks in the compose recipient dropdown
were hitting the first `if` statement and moving focus to the text area
when it should have gone to the topic or PM recipient input fields.
This `if` block was originally written for clicking external links and
codeblocks, which are outside of the #compose div and won't be affected
by this change.
2023-04-27 17:04:19 -07:00
evykassirer
0634457731 compose: Deduplicate code for fetching recipient switcher options. 2023-04-27 17:04:19 -07:00
evykassirer
6c797904f2 compose: Let recipient switcher change width with content. 2023-04-27 17:04:19 -07:00
evykassirer
695946746e compose: Rename stream selection widget to "select_recipient".
Previously this dropdown was only for selecting streams, but
soon it will also be for switching to a private message. This
name helps it be clearer that the dropdown is more general
purpose.
2023-04-27 17:04:19 -07:00
Prakhar Pratyush
c8a9c0ee04 realm_redirect: Redirect always to the login page with the next parameter.
Previously, entering an organization via 'accounts/go' with the
web-public stream enabled took the user to the web-public view
even if the user was not logged in.

Now, a user is always redirected to the 'login_page' with
the next parameter, if present.

The 'login_page' view is updated to redirect an authenticated
user based on the 'next' parameter instead of always redirecting
to 'realm.uri'.

Fixes #23344.
2023-04-27 16:50:10 -07:00
Anders Kaseorg
13545ff885 stripe: Fix invoice_plans_as_needed default value.
Python evaluates default values once when the function is defined, not
when it is called.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-27 16:43:33 -07:00
Tim Abbott
7ae7b753da help: Improve /help/add-a-custom-linkifier page.
- Structure page around linkifier use cases.
- Add documentation (with examples) for advanced lnkifier types.
- Put examples in to tabs blocks.
2023-04-27 15:39:54 -07:00
Karl Stolley
b6c656ed73 docs: Clarify python3 installation requirements.
This should help miscueing users into thinking that the provisioning
steps, etc. are a part of the python3 installation--which is now more
explicitly aimed at Centos, Fedora, and RHEL users.
2023-04-27 13:55:59 -07:00
Karl Stolley
e9315e67b8 docs: Move uninstall warning up top. 2023-04-27 13:55:59 -07:00
N-Shar-ma
4dc1b2f812 typeahead: Always show exact matches first for streams and users.
We refactor the triage function to optionally take in a comparator
function, and use this to sort the results, except any exact match,
which is placed highest. Now we don't need to sort the results of triage
for streams, languages and slash commands since we just pass in the
comparator function. The overall effect is same as before, except that
exact matches are always shown first.

For users, we can't use the new triage feature to achieve this goal
without sorting `rest` and breaking a key optimization, so we just add
a bit of manual code for the job.

Fixes: #25123.
2023-04-27 12:45:26 -07:00
Sahil Batra
7eacd525b4 compose: Show banner if user is not allowed to post in the stream.
We now show a banner on opening the compose box and changing the
stream in dropdown, if a user is not allowed to post in a stream.

The "Send" button is also disabled if user is not allowed to post
in the stream.

This commit also moved the CSS for disabled modal button in dark
theme below after the other CSS for modals as we are using the
same CSS for the "Send" button as well in disabled state.
2023-04-27 12:31:40 -07:00
Sahil Batra
e02111e458 compose: Show all accessible streams in stream dropdown menu.
We now show all the streams, even if user is not allowed to post
in them, in the stream dropdown in compose box. In further commits,
we would add a banner mentioning that user is not allowed to post
for such streams.
2023-04-27 12:31:40 -07:00
Sahil Batra
afc5066e36 registration: Fix "Resend" link not working for realm creation.
The "Resend" link for realm creation was not working correctly
because it is implemented by basically submiting the registration
form again which results in resending the email but all the
required parameters were not passed to the form after recent
changes in the realm creation flow.

This commit fixes it by passing all the required parameters -
email, realm name, realm type and realm subdomain, when submitting
form again by clicking on the "resend" link.

Fixes #25249.
2023-04-27 12:28:37 -07:00
Sahil Batra
f8f4fa4c5e tests: Extract realm name and string_id values in variables.
This is a prep commit so that we can use these variables to
verify the urls in next commit.
2023-04-27 12:28:37 -07:00
Sahil Batra
850e0046eb models: Add ORG_TYPE_IDS constant field to Realm.
This commit adds ORG_TYPE_IDS constant field to Realm class
such that it can be used when we want to validate the org_type
passed in request. This was previously defined in realm.py, but
we move it inside Realm class such that we can use it at other
places as well.
2023-04-27 12:28:37 -07:00
Alex Vandiver
2f4775ba68 wal-g: Write out a logfile.
Otherwise, this output goes into `/var/spool/mail/postgres`, which is
not terribly helpful.  We do not write to `/var/log/zulip` because the
backup runs as the `postgres` user, and `/var/log/zulip` is owned by
zulip and chmod 750.
2023-04-27 12:19:43 -07:00
Karl Stolley
67f3cb67c5 left-sidebar: Provide link to scheduled messages.
This provides a basic link to view scheduled messages. At present, the
link is always visible, and it does not yet include a scheduled-message
count.

Fixes part of #25101.
2023-04-27 12:13:59 -07:00
Tim Abbott
07cb08b8c5 message_row: Share most CSS for /me message senders.
This fixes a bug where clicking on a /me message sender would display
a focus outline incorrectly, and likely also overflow-related bugs.
2023-04-27 11:42:21 -07:00
Tim Abbott
9847e7024a message_row: Add sender_name_padding for /me messages.
This fixes the region between the avatar and the sender name in /me
messages not being part of the blue hover/highlight region for the
sender's user card.
2023-04-27 11:42:21 -07:00
Tim Abbott
ab0c5f3092 message_row: Shrink sender_info_hover region.
The sender_info_hover region incorrectly filled the full row to the
right of the sender's name, resulting in the blue highlight being
visible in parts of the message that should be just the message body.

Fix this by moving the selectors for it further down in the DOM.

Fixes #25276.
2023-04-27 11:42:21 -07:00
Lalit
866c91d5a5 info_overlay: Fix initial keyboard focus in keyboard shortcuts help.
The core bug here was that we opened the overlay after setting up the toggler
widget; this meant that the call to focus the correct element in the toggler 
widget setup code path was ignored due to it not being possible to focus an
element that is hidden.

Fix this bug by reordering the execution of things, now we first open
the overlay to make sure that the content is available to be focused when
setting up the toggler.
2023-04-27 10:34:18 -07:00
Lalit
ae613c815e refactor: Move append_compose_banner_to_banner_list to compose_banner.ts.
Before `scroll_util` typescript migration this function was present in `compose_validate`
but this function is more closely related to `compose_banner` module, hence moved this
function to `compose_banner`.
2023-04-27 09:00:13 -07:00
Lalit
c7b8f0658b ts: Migrate scroll_util.js to TypeScript.
This commit migrates `scroll_util.js` to typescript. I made a helper
type `JQueryOrZJQuery` for the argument of `get_scroll_element` instead
of adding a `__zjquery` property to the global JQuery object because it
isn't being used anywhere outside of this function and hence it makes
sense to have a little helper type than to add the property to the global
object.
2023-04-27 09:00:13 -07:00
Prakhar Pratyush
b6aa004334 notifications: Enable desktop notifications for the UNMUTED topic.
UNMUTED topics in muted streams obey stream-specific
notification settings and global notification settings
as fallback.

A user receives or does not receive email or push
notifications for messages in UNMUTED topics depending
on the email or push stream-specific notification settings
configured, and global notification settings are used as a fallback.

This commit updates the logic to send or not send
desktop notifications for messages in the UNMUTED topic
depending on the corresponding stream-specific notification
settings configured and global notification settings as a fallback.
2023-04-27 08:56:58 -07:00
Daniil Fadeev
db37880d08 emails: Fix some css not being applied to emails.
This commit places the email CSS into the `style` tag located in the
`head` section. This resolves the issue of being unable to apply
certain CSS styles that cannot be inlined, such as media queries and
pseudo-classes.
2023-04-27 08:55:24 -07:00
AcKindle3
521487f444 tornado_url: Replace occurrences of uri with url.
In #23380 we want to replace all occurrences of `uri` with `url`.
This commit replaces the occurrences appeared in a variable name
`tornado_uri` and a function name `get_tornado_uri`.
2023-04-26 16:37:16 -07:00
AcKindle3
0a1ccb3d89 api_url_context: Replace uri with url.
In #23380 we want to change all occurrences of `uri` with `url`.
This commit changes the occurrences in a context key `api_uri_context`
and a function name `add_api_uri_context`.
2023-04-26 16:37:16 -07:00
AcKindle3
98c9a0366a settings: Replace occurrences of uri with url.
In #23380 we want to change all occurrences of `uri` with `url`.
This commit changes the names of two variables `external_uri_scheme`
and `main_site_uri`, who are constructed using `settings` constants.
2023-04-26 16:37:16 -07:00
AcKindle3
4544eb4576 email: Replace uri with url in templates and backend.
In #23380 we want to change all ocurrences of `uri` to `url`. This
commit changes the ocurrences of `uri` appeared in files related to
email, including templates (`.html`, `.txt`) and backend (`.py`)
codes.

In `email.md`, `base_images_uri` is changed to `images_base_url` -
the words `base` and `images` are swapped and plural form is added
for `image`.  This is becasue the former is not found anywhere in
the codebase while the later appears a lot. To reduce confusion,
this doccumentation changed accordingly.
2023-04-26 16:37:16 -07:00
Sahil Batra
e4420bcd61 dropdown_list_widget: Show stream icons when widget is disabled.
We show the stream privacy icon for the selected option in
dropdown list widget even if the widget is disabled. It is
fixed by changing the CSS to hide only the "i" element used
for the arrow toggle button and not all the "i" elements in
disabled state.
2023-04-26 15:44:35 -07:00
Alex Vandiver
3aba2789d3 prometheus: Add an exporter for wal-g backup properties.
Since backups may now taken on arbitrary hosts, we need a blackbox
monitor that _some_ backup was produced.

Add a Prometheus exporter which calls `wal-g backup-list` and reports
statistics about the backups.

This could be extended to include `wal-g wal-verify`, but that
requires a connection to the PostgreSQL server.
2023-04-26 15:41:39 -07:00
Lauryn Menard
a22168d8b3 templates: Add CSS formatting to invalid email redirect page.
Adds CSS formatting for `invalid_email.html`.

Uses the `white-box` style because this page is a redirect when
there is an error with the email the user provided during
registration.

Also, updates the text of this page for some grammar errors and
to clarify the language between an invalid email and an email that
is not allowed by the Zulip organization in question.

Finally, makes any references to the `realm_name` also link to
the Zulip organization with the `realm_uri`.
2023-04-26 15:41:20 -07:00
Lauryn Menard
601d8101f5 templates: Add CSS formatting to no available licenses page.
Adds CSS formatting for `no_spare_licenses.html`.

Uses the `white-box` style because this page is a redirect when
a user tries to register for a Zulip Cloud organization that does
not have any available licenses for new users.

Updates reference to `realm_name` to be a link to the `realm_uri`.
2023-04-26 15:41:20 -07:00
Lauryn Menard
32521bf7a8 templates: Add CSS formatting to unsubscribe link error page.
Adds CSS formatting for `unsubscribe_link_error.html`.

Uses the `white-box` style because this page is a redirect when
there is an error when processing an unsubscribe email link.
2023-04-26 15:41:20 -07:00
AcKindle3
de420f68a4 ts migration: Convert dark_theme.js to dark_theme.ts.
Add `void` type annotation to the return type of functions. The
rest of the file is not modified.
2023-04-26 15:40:23 -07:00
Alya Abbott
7effa717fd portico: Tweak wording on /values. 2023-04-26 14:34:15 -07:00
Alya Abbott
cf17c336b4 portico: Link to Atolio case study. 2023-04-26 14:33:30 -07:00
Alya Abbott
977bec25ba portico: Add Atolio case study. 2023-04-26 14:33:30 -07:00
Tim Abbott
10b893e1e3 api_docs: Update API docs for presence changes. 2023-04-26 14:26:47 -07:00
Mateusz Mandera
a9f40a64fd presence: Support null values in UserPresence. 2023-04-26 14:26:47 -07:00
Mateusz Mandera
0d79f6dd27 presence: Deduplicate code formatting legacy presence info.
This also removes the error in one of these functions that was using a
different constant instead of
PRESENCE_LEGACY_EVENT_OFFSET_FOR_ACTIVITY_SECONDS.
2023-04-26 14:26:47 -07:00
Mateusz Mandera
ed91e72c5c presence: Rewrite the backend data model - final migration. 2023-04-26 14:26:47 -07:00
Tim Abbott
027b67be80 presence: Rewrite the backend data model.
This implements the core of the rewrite described in:

For the backend data model for UserPresence to one that supports much
more efficient queries and is more correct around handling of multiple
clients.  The main loss of functionality is that we no longer track
which Client sent presence data (so we will no longer be able to say
using UserPresence "the user was last online on their desktop 15
minutes ago, but was online with their phone 3 minutes ago").  If we
consider that information important for the occasional investigation
query, we have can construct that answer data via UserActivity
already.  It's not worth making Presence much more expensive/complex
to support it.

For slim_presence clients, this sends the same data format we sent
before, albeit with less complexity involved in constructing it.  Note
that we at present will always send both last_active_time and
last_connected_time; we may revisit that in the future.

This commit doesn't include the finalizing migration, which drops the
UserPresenceOld table.
The way to deploy is to start the backfill migration with the server
down and then start the server *without* the user_presence queue worker,
to let the migration finish without having new data interfering with it.
Once the migration is done, the queue worker can be started, leading to
the presence data catching up to the current state as the queue worker
goes over the queued up events and updating the UserPresence table.

Co-authored-by: Mateusz Mandera <mateusz.mandera@zulip.com>
2023-04-26 14:26:47 -07:00
Daniil Fadeev
980f7df376 compose: Fix banners running off the screen.
We introduce a scrollable region, with a simplebar scrollbar.

Fixes: #25115.
2023-04-26 14:03:34 -07:00
Lalit
b9223088f3 refactor: Move simplebar helper functions from ui to scroll_util.
This commit eliminates the `ui.js` module from the codebase by moving
all simplebar helper functions to the `scroll_util` module.
2023-04-26 12:59:08 -07:00
Lalit
b55ee161e2 refactor: Move replace_emoji_with_text from ui to ui_util. 2023-04-26 12:59:08 -07:00
Lalit
e132a68193 refactor: Create compose_textarea and extracted related handlers from ui.js.
Created the new `compose_textarea` and moved event handlers for `#compose_textarea`
from `ui` to this new module so that it is now responsible for initializing event handlers
for compose_textarea instead of `ui` module.
2023-04-26 12:59:08 -07:00
Lalit
7e52509ee7 ui: Move update_message_lists related functions to other related modules.
This commit moves mainly two functions from `ui.js` to `message_live_update`,
`update_message_in_all_views` and `update_starred_view`. This is done in favor of
eliminating `ui.js` and also these functions are more closely related to
`message_live_update` module than to `ui` module.

We also move `show_message_failed` and `show_failed_message_success` to `echo.js`
for cleaner seperation of responsibilities.
2023-04-26 12:59:08 -07:00
sbansal1999
aad2f7c7c5 compose: Remove empty message warning border after closing.
Adding this made the line coverage of
"web/tests/lib/zjquery_element.js" equal to 100%, hence it
was required to remove it from the exempt files list.
2023-04-26 10:58:08 -07:00
Tanmay Munjal
80c01e9fc3 auth: Refactor JWT code to push REQ to top level functions.
Fixes #25015.
2023-04-26 10:57:22 -07:00
Sahil Batra
95add66ed3 templates: Add missing "aria-hidden" attribute.
This commit adds missing "aria-hidden" attribute for hashtag
icon in inline_decorated_stream_name.hbs template and sets its
value to "true".
2023-04-26 10:55:58 -07:00
Sahil Batra
9ec3608569 dropdown_list_widget: Colorize stream privacy icons.
This commit adds code to colorize the stream privacy icons in
dropdown list widget. Both the selected option in button and
options in the menu are colorized as per the stream color.

Fixes #25282.
2023-04-26 10:55:58 -07:00
Alex Vandiver
b8a6de95d2 pg_backup_and_purge: Allow adjusting the backup concurrency.
SSDs are good at parallel random reads.
2023-04-26 10:54:51 -07:00
Alex Vandiver
19a11c9556 pg_backup_and_purge: Take backups on replicas, if present.
Taking backups on the database primary adds additional disk load,
which can impact the performance of the application.

Switch to taking backups on replicas, if they exist.  Some deployments
may have multiple replicas, and taking backups on all of them is
wasteful and potentially confusing; add a flag to inhibit taking
nightly snapshots on the host.

If the deployment is a single instance of PostgreSQL, with no
replicas, it takes backups as before, modulo the extra flag to allow
skipping taking them.
2023-04-26 10:54:51 -07:00
Alex Vandiver
4b35211ca1 pg_backup_and_purge: Remove unnecessary explicit types. 2023-04-26 10:54:51 -07:00
Alex Vandiver
e72e83793d pg_backup_and_purge: Just use subprocess directly.
dry_run was never passed into run(); switch to using subprocess directly.
2023-04-26 10:54:51 -07:00
Anders Kaseorg
033f561d94 ci: Run pnpm dedupe --check.
New in pnpm 8.3.0, this replaces the yarn-deduplicate check that was
removed in commit 3a27b12a7d (#24731).

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-25 22:26:04 -07:00
Anders Kaseorg
b8023da17a dependencies: Upgrade JavaScript dependencies.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-25 22:18:48 -07:00
Anders Kaseorg
6c4705a4ef install-node: Upgrade Node.js from 18.15.0 to 18.16.0.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-25 22:18:48 -07:00
Anders Kaseorg
03b3c8522d requirements: Upgrade Python requirements.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-25 21:20:33 -07:00
Anders Kaseorg
f74cfe0ed5 test_console_output: Fix WrappedIO.writelines with iterator.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-25 21:20:33 -07:00
Anders Kaseorg
5ecff88c1b ruff: Fix C418 Unnecessary dict literal passed to dict().
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-25 21:20:33 -07:00
Anders Kaseorg
9db3451333 Remove statsd support.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-25 19:58:16 -07:00
Anders Kaseorg
ca6b0d8c5a e2e-tests: Fix ensure_enter_does_not_send.
A variable in the Node.js context cannot be mutated by a function
evaluated in the browser context.  The boolean was also incorrectly
inverted, and a click to open the dialog containing
`enter_sends_choice` was missing.

Co-authored-by: Aman Agrawal <amanagr@zulip.com>
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-25 19:30:35 -07:00
Anders Kaseorg
ae7a21834e utils: Fix make_safe_digest type safety.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-25 19:01:01 -07:00
Anders Kaseorg
408ef63404 utils: Fix process_list_in_batches type safety.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-25 19:01:01 -07:00
Tim Abbott
9886cd1488 popovers: Tweak mute/unmute icons for topic menu.
While we use a different convention in recent conversations and
recipient bars, in this context, it make sense for this icon to just
match the action we'll be doing.
2023-04-25 18:00:11 -07:00
Tim Abbott
5c528f164c help: Use correct unmute icon for unmute. 2023-04-25 17:56:47 -07:00
Tim Abbott
f4424c38db emails: Remove stale CSS from previous message email designs.
Elements with these classes stopped being generated in
a5c69fb707,
be762f9485, and
3a6fc09a4d.
2023-04-25 17:53:14 -07:00
Daniil Fadeev
d79f4d4f46 emails: Fix style regression for dynamically generated content.
The migration to css-inline "fixed" the fact that styles from this
file previously were never applied to the internals of missed-message
emails.

Rewrite much of the CSS to more correctly scope to apply to the
appropriate elements, and document with comments the purpose of most
blocks.

Co-authored-by: Tim Abbott <tabbott@zulip.com>
2023-04-25 17:53:14 -07:00
N-Shar-ma
9f2ef69c71 compose: Add banner for unmuting the muted topic a message is sent to.
We add a new banner informing the user if and when they send a message
to a muted topic / stream. It also has a button to unmute the topic.

Fixes: #24246.
2023-04-25 16:16:47 -07:00
N-Shar-ma
ff8d209807 compose: Add utility function to clear all compose banners. 2023-04-25 16:04:38 -07:00
David Rosa
6608f2b211 help: Update links for muting / unmuting topics and streams. 2023-04-25 15:04:24 -07:00
Alya Abbott
dd4b391229 help: Cover unmuting topics in /help/mute-a-topic. 2023-04-25 15:04:24 -07:00
Hardik Dharmani
fa53026244 topic_sidebar_actions: Implement new mute/unmute toggle UI for topics.
For topics in muted streams, replace the "Mute topic" option in the
three-dot topic menu with an "Unmute topic" option, which should make
the topic unmuted. For unmuted topics in muted streams, show the
regular "Mute topic" option, which should specifically mark the
topic as muted, as usual.

Also, used new unmute icon for unmute option in three-dot menu for
topics in muted stream.

Fixes part of #24243
2023-04-25 15:01:52 -07:00
Hardik Dharmani
dd001e1a5f recent_conversations: Use unmute icon for topics in muted streams.
Updated click handlers for mute/unmute icons for topics in
recent_conversations to work as per their stream.

Fixes #25124
2023-04-25 13:35:38 -07:00
Hardik Dharmani
eee5c99cd7 recipient_row: Use unmute icon for topics in muted stream.
Updated mute_or_unmute_topic to take visibility policy as parameter
and set topic visibility_policy to the passed visibility_policy.

In zulip.css, updated CSS to set opacity as per visibility_policy.

Updated click handlers for recipient_row mute/unmute icons to
work as per stream.

Fixes #25124
2023-04-25 13:35:38 -07:00
Hardik Dharmani
06709bc5da icons: Add new unmute icon SVG.
Added unmute.svg in web/shared/icons. Also added
source and license information for the icon in
docs/THIRDPARTY.

Additionally, used unmute icon for unmute option in
topic_sidebar menu for topics in muted stream.

Fixes #25124
2023-04-25 13:35:38 -07:00
Sahil Batra
99f8c19d6d compose: Show loading spinner in "Schedule" button.
We now showing spinner in the "Schedule" button while the
message is being schedules similar to how we show the spinner
for "Send" button.

Fixes #25182.
2023-04-25 12:51:59 -07:00
Sahil Batra
0e20cdfa50 compose: Fix behavior when scheduling message using slash command.
We show the loading spinner when scheduling message using slash
command as the submit button present is "Send" button and not
"Schedule" button. This commit fixes the behavior to hide the
loading spinner in case of both success and error and also resets
the UI (mainly enabling the textarea element and clearing the
compose box) after successful scheduling of message using the
slash command.
2023-04-25 12:51:59 -07:00
Sahil Batra
639af1d56d compose_ui: Refactor functions to show and hide loading spinners.
This commit refactors show_compose_spinner and hide_compose_spinner
functions to use class of the button instead of ID to select the
appropriate elements such that we can use the same function to show
and hide spinner in "Schedule" button in further commits. For this
purpose, we add a new class compose-submit-button to the "Send"
button and this class will be added to "Schedule" button as well
in the next commit.
2023-04-25 12:51:59 -07:00
Prakhar Pratyush
a079bb811b user_topics: Rename 'settings_muted_topics.js'.
This commit renames 'settings_muted_topics.js'
to 'settings_user_topics.js' because the file now
supports the settings for topics with any visibility_policy,
not just MUTED.

It also renames the corresponding test file.
2023-04-25 12:46:05 -07:00
Prakhar Pratyush
d5846ab534 user_topics: Rename 'muted_topics_settings.hbs'.
This commit renames 'muted_topics_settings.hbs' to
'user_topics_settings.hbs', because the file now represents the
settings for topics with any visibility_policy, not just MUTED.
2023-04-25 12:46:05 -07:00
Prakhar Pratyush
c526543498 settings: Update the 'Muted topics' setting.
This commit updates the existing 'Muted topics'
settings UI to add support for other visibility
policies.

Changes:
Settings sidebar:
1. Rename 'Muted topics' to 'Topics'.
2. Change icon.
Main panel:
3. Rename 'Muted topics' header to 'Topic settings'.
Topics table:
4. Rename 'Date muted' to 'Date updated'.
5. Update the search bar placeholder text to 'Filter topics'.
6. Drop the 'Actions' column.
7. Add a status column with a dropdown set of options.
(Muted, Unmuted, Default for stream)

Fixes #25081.
2023-04-25 12:46:05 -07:00
Prakhar Pratyush
e87f2ff408 user_topics: Update 'get_user_topics_for_visibility_policy'.
This prep commit updates the function
'get_user_topics_for_visibility_policy' to include 'visibility_policy'
as one of the keys in the user_topic objects.
2023-04-25 12:46:05 -07:00
Lalit
9cad825d95 refactor: Rename stream_sort.js to stream_list_sort.js.
Renamed `stream_sort` to `stream_list_sort` to make it clear that this
module is part of the stream_list bundle of modules.
2023-04-25 10:05:59 -07:00
Lalit
2996e8e722 js: Break cyclic dependency between modules related to stream_data.
Moved `stream_data.is_active` to `stream_sort.has_recent_activity` to
remove the cyclic dependency between `stream_data` and `stream_topic_history`.
2023-04-25 10:05:59 -07:00
sbansal1999
40cea58f87 ts: Convert fenced_code.js to TypeScript. 2023-04-25 09:31:15 -07:00
sbansal1999
5a758c74e4 fenced_code: Remove unused argument from stash_func calls.
The default stash function (which does nothing, as it's
essentially an identity function) and the function passed
from "markdown.js" do not accept any boolean input.

However, in "fenced_code.js", the function calls provide
a boolean parameter that is not used. This commit removes
that unused boolean argument.

It is required for its migration to TypeScript.
2023-04-25 09:31:15 -07:00
sbansal1999
a4f05af256 dependencies: Add "minimalistic-assert" and its type definitions. 2023-04-25 09:31:15 -07:00
Lalit
833cc71181 ts: Convert input_pill.js to TypeScript.
Migrated input_pill subsystem to TypeScript, used generics to make
it a generic module so that it works with different implementations
like stream_pill or user_pill.
2023-04-25 09:09:48 -07:00
Lalit
83e1d78b7b input_pill: Break import cycle with compose_recipient.js.
This commit breaks the trivial import cycle between `input_pill` and
`compose_recipient.js` by manually triggering an on-change event when we remove
a pill which makes sure to run the `update_on_recipient_change` as
the event callback without us having to import it inside `input_pill`
and manually calling it.

Fixes: #25022
2023-04-25 09:09:48 -07:00
Lalit
c0e9e463fb input_pill: Refactor payload object in appendValidatedData function.
Refactored `payload` object such that when we migrate this module to typescript,
we will not have to write an incomplete type definition for this object.
2023-04-25 09:09:48 -07:00
Lalit
e5e8c949d3 input_pill: Consistent binding of functions.
This is a prep commit for preparing this module for typescript
migration. We should consistently use `.bind` and bind the funcs
in the final prototype correctly.
2023-04-25 09:09:48 -07:00
Lauryn Menard
9880fcb936 narrow: Document new filters is:dm, dm and dm-including.
Documents narrows now have support for new filters for direct messages:
`is:dm`, `dm`, and `dm-including`. Also documents that `is:private`,
`pm-with` and `group-pm-with` are now legacy aliases for these three
new filters respectively.

Note that API documentation references the help center documentation
for search/narrow filters.

Fixes #24806.
2023-04-25 09:07:08 -07:00
Lauryn Menard
ae41e61520 narrow: Remove frontend support for "group-pm-with" operator.
Replaces "group-pm-with" in the web app with "dm-including".
2023-04-25 09:07:08 -07:00
Lauryn Menard
311f436c68 narrow: Add frontend support for dm-including: narrow.
Adds support in the web app for `dm-including` operator.

This will deprecate the `group-pm-with` operator, but any changes
to that narrow operator will be in a separate commit since it
returns a different message query. The `group-pm-with` operator
only returned group direct messages, while the new `dm-including`
operator returns both group and 1-on-1 direct messages.

The general API changelog and documentation updates will be done
in a final commit in the series of commits that adds support for
the various new direct message narrows.
2023-04-25 09:07:08 -07:00
Lauryn Menard
243216cb60 url-encoding: Update URLs for direct messages.
In a previous commit, the frontend of the web app was updated for
URLs with `#narrow/dm/...` for direct messages (group and 1-on-1).

Updates the URLs generated for email notifications and outgoing
webhook notification messages to use the new `/dm/...` format.
2023-04-25 09:07:08 -07:00
Lauryn Menard
0f7341dd48 narrow: Add frontend support for dm: narrow and /dm/... URL.
Adds support in the web app for `dm` operator. This will deprecate
the `pm-with` operator, but existing links/URLs are still supported
for backwards-compatilibity.

This commit updates the web app default behaviors to default to
the new narrow/URLs `dm/...` and `/#narrow/dm/...` when navigating
and searching in the app.

There is some general clean up of references to private messages
or PMs to be either direct messages or DMs in these changes.

The general API changelog and documentation updates will be done
in a final commit in the series of commits that adds support for
the various new direct message narrows.
2023-04-25 09:07:08 -07:00
Lauryn Menard
d379020726 narrow: Add frontend support for is:dm narrow and /is/dm URL.
Adds support in the web app for `is` operator with the `dm` operand.
This will deprecate the `is` operator with the `private` operand,
but we keep support for backwards-compatibility with links/URLs.

This commit updates the web app default behaviors to default to
the new narrow/URLs `is:dm` and `/#narrow/is/dm` when navigating
and searching in the app.

There is some general clean up of references to private messages
or PMs to be either direct messages or DMs in these changes.

The general API changelog and documentation updates will be done
in a final commit in the series of commits that adds support for
the various new direct message narrows.
2023-04-25 09:07:08 -07:00
Lauryn Menard
33886575b2 narrow: Add backend support for dm-including operator.
Adds backend support for `dm-including` operator. This will
deprecate the `group-pm-with` operator, but we keep support
for backwards-compatibility.

For testing updates, because the messages returned by these
two operators are different, most of the tests for `group-pm-with`
remain unchanged, but added comments about deprecated state.

Also, cleans up remaining instance of "PM" in `narrow.py` to
be "DM".

The general API changelog and documentation updates will be done
in a final commit in the series of commits that adds support for
the various new direct message narrows.
2023-04-25 09:07:08 -07:00
Lauryn Menard
29832de5f6 narrow: Extract function for calculating huddle recipients.
Extracts the code from `by_group_pm_with` that calculates the
huddle recipients. Prep commit for implementing new `by_*`
method for "dm-including".
2023-04-25 09:07:08 -07:00
Lauryn Menard
665e435b58 narrow: Add backend support for dm operator.
Adds backend support for `dm` operator. This will deprecate the
`pm-with` operator, but we keep support for backwards-compatibility.

For testing updates, updates the existing tests for `pm-with` to
use `dm`, and adds one basic test for `pm-with` in the `add_term`
tests as the two operators refer to the same `by_*` method.

The general API changelog and documentation updates will be done
in a final commit in the series of commits that adds support for
the various new direct message narrows.
2023-04-25 09:07:08 -07:00
Lauryn Menard
ece752014c narrow: Add backend support for is:dm narrow.
Adds backend support for `is` operator with the `dm` operand. This
will deprecate the `is` operator with the `private` operand, but we
keep support for backwards-compatibility.

Note that there is some clean up of references to private messages
in the updated backend test. In commit 43ec7ed, the documentation
for `build_narrow_filter` wasn't updated for the rename of
`BuildNarrowFilterTest` to `NarrowLibraryTest`, so that's also
corrected in these changes.

The general API changelog and documentation updates will be done
in a final commit in the series of commits that adds support for
the various new direct message narrows.
2023-04-25 09:07:08 -07:00
Lauryn Menard
45da8c2a54 pm-list-data: Increase max conversations shown in left sidebar.
Incresase the max number of conversations shown when not zoomed
into the direct messages in the left sidebar to be 8 when there
are no unread conversations and 15 when there are unread
conversations.
2023-04-25 08:59:03 -07:00
Lauryn Menard
94837d56cf templates: Add account-creation class to unsubscribe_success.html.
Adds the `account-creation` class to `<div>` tag in template so that
the associated CSS styles for `white-box p:last-of-type` and the
font-weight are applied.
2023-04-25 08:56:30 -07:00
sbansal1999
77ae3176ca webhooks: Rephrase message for Issue Assigned and Unassigned Events.
This commit rephrases the message for Issue assigned and unassigned
events for GitHub Integration.
2023-04-24 23:16:48 -07:00
sbansal1999
31a9d0e69e webhooks: Change assignee info for Issue events in Github Integration.
This commit changes the assignee info to the correct one.

Earlier, the current assignee info of the issue was used
to create the message but when an issue was unassigned
this would give incorrect information if there are still
assignees left on the issue. Now, it uses the details of
the user who has been unassigned from the issue.
2023-04-24 23:16:48 -07:00
sbansal1999
e15df084ad webhooks: Remove description from Issue Unassigned event message.
This commit removes the description from the Issue Unassigned
event message that is sent by the Github Integration.
2023-04-24 23:16:48 -07:00
sbansal1999
85689a5343 webhooks: Remove description from Issue Assigned event message.
This commit removes the description from the Issue Assigned
event message that is sent by the Github Integration.

Previously when an issue was assigned, the message also had the
description of the issue, which is redundant as the description
has been already sent through the issue created event. After
this commit, the description no longer appears in the message.

Fixes #24554
2023-04-24 23:16:48 -07:00
sbansal1999
566e59f0c2 webhooks: Add issue unassigned fixture to GitHub Integration.
This commit adds the fixture that is received when an issue
is unassigned. This fixture helps in testing the integration
for that event.
2023-04-24 23:16:48 -07:00
sbansal1999
f2e820d103 webhooks: Add issue assigned fixture to GitHub Integration.
This commit adds the fixture that is received when an issue
is assigned. This fixture helps in testing the integration
for that event.
2023-04-24 23:16:48 -07:00
Lakshay Mittal
0b10a33565 search: Fix display of suggestion box when search bar empty.
When search bar is empty and we've reached that state
by using the `backspace` key. There are no suggestions
as there are when you select an empty search bar.

The cause of this was an explicit prevention of this
suggestion box in `typeahead.js` so that the
`backspace` key is free to interact with the other
elements.

The fix here is to add an optional `hideOnEmpty` option
so that if we want this suggestion box to appear we can
set this option to `false` and this behavior will be
prevented.

This option is enabled for the search input when pills are not
enabled.

Fixes: #25062.
2023-04-24 21:45:06 -07:00
Tim Abbott
a66c8227d8 node tests: Fix drafts tests for new colors.
This should have part of a03cf8045a3bb9ea47f91901533c3ca2a15ff548.
2023-04-24 18:16:04 -07:00
Aman Agrawal
219a936aee css: Use less saturated colors for PMs. 2023-04-24 17:29:06 -07:00
Aman Agrawal
defd1c30df stream_color: Try a different color mix for recipient bar color. 2023-04-24 17:29:06 -07:00
Alex Vandiver
63e31a6de4 upgrade-zulip-from-git: CWD will be the cache directory.
96e42b8e81 broke this when it split out the steps to reset the
upstream.
2023-04-24 17:19:27 -07:00
evykassirer
7c9677becd search: Put typeahead under search bar in the DOM with full width.
Previously the typeahead container was being created at the bottom
of `body`, and its width (and `top` and `left`) were being set to
move it to the right position.

Now it sits in the search box container, which gives it the correct
position and width by default. This is better for DOM readability,
and is also better for the new 100% width (which is part of the
search bar redesign) because it can change width more smoothly
with the search bar when the page changes width.

This commit adds custom functionality to the bootstrap typeahead
to allow the typehead to be placed in the search box container
(whereas previously, it could only be appended to `body`).
2023-04-24 17:15:41 -07:00
Lakshay Mittal
e3984f119d popovers: Fix popovers not hiding when clicked on search.
Added `popovers.hide_all()` call in desired functions related
to search bar.

Fixes: #24318
2023-04-24 17:09:36 -07:00
N-Shar-ma
f1ec9e139f typeahead: Hide typeahead on clicking outside after clicking its header.
Until now, the typeahead was hidden on clicking outside only if the last
click was not on the header. This happened because clicking the header would
blur the input, and any other click then would not trigger the blur event
(which is responsible for hiding the typeahead).

Now we refocus the input after clicking the header, so that clicking
elsewhere blurs the input and hides the typeahead.
2023-04-24 17:06:56 -07:00
Ujjawal Modi
449febf036 streams: Make stream settings and create stream UI more consistent.
This commit make changes in create stream panel by moving
announce stream option below stream description and adds a
"Stream permissions" section heading just above
"Who can access the stream?" and also rewords the text
"Announce stream".

Also now announce stream option is only shown if the user creating
stream have access to the announcement stream name. When option
is not shown, default behaviour is to announce public and
web-public streams.

Fixes #23327.
2023-04-24 17:02:33 -07:00
m-e-l-u-h-a-n
308f42eded css: Add word-break property to .modal__title.
Modal that were used as dialog boxes for editing info
had issues with long heading text int .modal__title,
This commit add word-break to break words and avoid
abrupt ui in such cases.
2023-04-24 16:53:35 -07:00
m-e-l-u-h-a-n
ae16787a25 css: Remove redundant css rule from streams/groups overlay. 2023-04-24 16:53:35 -07:00
m-e-l-u-h-a-n
4b5c073c05 user groups: Minor fixes in CSS common to #groups and #streams overlay.
This commit does following improvements in #streams and #groups overlay.
* Adds word break in the title in the right pane to handle long stream
  and group names.
* Fix positioning of edit (pencil) button to the right end and provide
  maximum available space for stream/group name.

Co-authored-by: Hardik Dharmani <Ddharmani99@gmail.com>
2023-04-24 16:53:35 -07:00
Akarsh Jain
b154722dec todo_widget: Fix cursor focus in todo lists.
Previously, when adding a task to a /todo list, after pressing "Add
task", the cursor would move to the "Description" field, which is
not the desired behavior. This commit fixes this issue by ensuring
that the cursor moves to the "New task" field after a task is created.

The core bug was introduced in
68dcdcd28e, which added the incorrect
.focus().

Also tighten the selectors while we're at it.

Fixes #25064.
2023-04-24 16:11:20 -07:00
SameepAher
9e4b5b2bed css: Fix text overflow bug for pill values.
This commit fixes the text overflow bug for pill values by adding a
maximum width of 100% for the pill along with the ellipsis property on
text overflow.

Fixes: #21807.
2023-04-24 16:04:03 -07:00
Joelute
a840cd88ab click_handlers: Allow messages being edited/viewed to be clicked.
If a user is editing a message or viewing the message source, they'll notice that clicking on the messsage doesn't move the blue box to it while the keyboard works just fine. We want to allow the message to be selected while not triggering the reply function.
2023-04-24 16:02:34 -07:00
Joelute
e2c4033d75 help: Add instructions for do not mark messages as read.
As a follow up to #24309, we want to add a new tab with desktop/web
instructionsto the "Configure whether messages are automatically marked as
read" section.The paragraph has also been tweaked to accommodate the new
feature.
2023-04-24 15:58:59 -07:00
Hardik Dharmani
7a14f12031 recipient_row: Correct hotkey for mute icon tooltip. 2023-04-24 15:56:16 -07:00
Tim Abbott
28f86057d6 lint: Fix TypeScript linter error in localstorage.ts.
This was introduced because the PR converting this file to TypeScript
predated this linter rule being enabled.
2023-04-24 13:24:08 -07:00
Tim Abbott
5e8e7af066 i18n: Fix encoding of stream bookends.
Fix an issue with how 3e6f34780a
passed the stream name to the template around translation tags.
2023-04-24 12:19:06 -07:00
AcKindle3
fd84651a16 Localstorage: Use zod to parse type FormData.
Local storage is an untyped interface external to the frontend code
itself. The `data` field after `JSON.parse`'d from `raw_data` can be
further validated using `zod`'s schema `formDataSchema`.

The test case `server_upgrade_alert hide_duration_expired` in
`navbar_alerts.test.js` has a bug at `start_time`, which is fixed in
this commit. `start_time` is a mock value of `Date.now()` used in
`localstorage.ts`, which will concatenate with a number `expires`.
So `start_time` was supposed to be an integer value. Before fix, `new
Date(1620327447050)` returns a `Date` object which is wrongly
concatenated with `expires`.

Fixes #24997.
2023-04-24 11:59:02 -07:00
AcKindle3
70b8eb3423 TS migration: Convert localstorage.js to localstorage.ts.
Added function parameter types, return type, and types of local
varaibles. Added a `null` check for `raw_data` before `JSON.parse`.
Created a type `FormData` and an export type `LocalStorage` to
imporve conciseness and clearity.

Type `LocalStorage` is exported because it might be used in other
files based on an observation that many files have imported `localstorage`.
2023-04-24 11:59:02 -07:00
Akarsh Jain
3e6f34780a bookend: Add stream icons to subscribed/unsubscribed divider line.
Fixes: #23685.
2023-04-24 11:53:16 -07:00
palashb01
047bffe257 compose_box: Convert dynamic closed compose box tooltips to tippyjs.
This commit converts the dynamic closed_compose_box
tooltip to template-based tippy.js tooltips. The functions in
the compose_closed_ui.js file are refactored to dynamically change
the 'data-tooltip-template-id' attribute according to the situation.

The title parameter is removed from the functions in
compose_closed_ui.js so that we can change the tooltip within the
caller functions themselves, according to the situation. Since there
is no way to match the title in existing functions with different
languages to change the tooltip attribute dynamically, it is better
to change the tooltip attribute within the caller function according
to the situation, rather than passing the title as a parameter.

In the case of the reply button, we disable it when direct messages
are not allowed. However, tippy.js tooltips do not appear in the
case of disabled elements, so we have to use the container element
around it to show the tooltip. This approach is used in the case of
the reply button, where the span element wraps the button.

We used to have two titles for the reply button: one is the usual
'Reply to selected message', and the other is for the disabled state.
However, in the case of recent conversations, it makes more sense
to have a new tooltip title: 'Reply to selected conversation'.

To ensure that the tooltip content changes dynamically, it is
required to destroy the tooltip instance and then reinitialize it
every time.

Fixes: #25096
2023-04-24 11:45:56 -07:00
palashb01
aa23b9deaf compose_box: Convert compose_box tooltips to tippyjs tooltips.
This commit converts the static tooltips of closed compose box
to tippy.js tooltips.
2023-04-24 11:45:56 -07:00
Hardik Dharmani
98162b7a3a left_sidebar: Show unread_mention in regular font if in unmuted topic.
If there are unread_mentions in unmuted topic in muted stream then,
show `.subscription_block unread_mention` in regular font not faded.

An additional parameter is passed to the update_count_in_dom function
to add or remove the "has-unmuted-mentions" class from the
.subscription_block, allowing for the relevant CSS to be applied to
display the unread mentions in regular font.

Fixes part of #24243.
2023-04-24 11:41:21 -07:00
Hardik Dharmani
6f1b8fe340 left_sidebar: Implement new unread_count logic for muted stream.
This commit implements a new logic to display unread messages count
in muted streams. If there are any unread messages in unmuted topics
within a muted stream, the unread counter for the stream will display
the total count of all the unread messages in the unmuted topics.
The counter will be shown in regular font (not faded).

Fixes part of #24243.

Co-authored-by: Tim Abbott <tabbott@zulip.com>
2023-04-24 11:41:10 -07:00
Hardik Dharmani
19a2365ab9 left_sidebar: Display unmuted topic in regular font (not faded).
Add class unmuted_topic to li.bottom_left_row element if topic is
unmuted. Add relevant CSS for .unmuted_topic to display unmuted
topics in regular font.

Fixes part of #24243.
2023-04-24 11:40:58 -07:00
Hardik Dharmani
8701d546f3 left_sidebar: Change CSS for fading muted stream.
Previously, muted streams in the left sidebar were faded using
opacity: 0.5, and on hover, the opacity was increased to 0.75.
This opacity was applied to all elements within the muted stream,
including the stream-privacy icon, names of the stream and topics
within, and the unread_count.

In this PR, we changed this behavior to handle opacity for each
element separately. We changed the opacity of the stream-privacy icon
and unread_count, while for the text (names of stream and topics),
we changed the alpha factor for the hsla color property.

The reason for this change is that we can have different opacity levels
for the unread_count and other elements. This will allow us to add
feature in next commits in this PR to set the opacity of unread_count
to 1 while keeping it at 0.5/0.75 for other elements in the case of
muted streams with unread messages in unmuted topics.

Fixes part of #24243
2023-04-24 11:27:53 -07:00
Lalit
2d118f098a compose: Fix opening stream picker by triggering click event.
We should trigger click event to open up the dropdown popup instead of using
`.dropdown("toggle")` because we want to clear the search state when opening up
the popup and the logic for that is registered in `on-click` handler defined in
`dropdown_list_widget`.

Fixes: #25218
2023-04-24 11:26:28 -07:00
Joelute
9192098326 unread_banner: Group all unread banners up into a folder.
Since we currently have 3 unread banners, it'd be much preferred to group
all of them up into one folder to keep them organized like how compose
banners are. This way, it's much easier to keep track of unread banners
and new ones in the future.
2023-04-24 11:20:17 -07:00
Joelute
e999518d9a user_settings: Add option to only read messages on scroll in topic.
After merging #24309, we want to add an additional option to the "mark
messages as read on scroll" setting where we only mark messages as read
on scroll in conversation views.
2023-04-24 11:20:17 -07:00
Deekshith S Shetty
596abf6190 popovers: Add Copied! tooltip when copy code button is clicked.
`copy code` button now show a `Copied!` tooltip when clicked.
It implements a similar function used on `saved as draft` notice.

We need to modify the copy_code_button template to limit
data-tippy-trigger to not include click; otherwise, repeated clicks to
copy code will incorrectly also display the "Copy code" tooltip
alternating with "Copied".

Fixes part of #21036.
2023-04-24 11:10:19 -07:00
Lakshay Mittal
f84de2212e notifications: Fix blank notification sent when no text specified.
When we send a message (for which notifications are enabled)
in format `[](file_url)`. A blank notification is sent.

Fixing this by checking if there is no text and adding
message  in that case.

Inspired from: #8796.
Fixes: #8087.
2023-04-24 10:37:23 -07:00
Aman Agrawal
a90fa79bfc hotkey: Clear message sent success banners too on escape keypress.
Without this, if there was a success compose banner and user pressed
escape key, no banners were hidden and the same behaviour was repeated
without compose ever closing.
2023-04-24 10:19:19 -07:00
Lauryn Menard
f1c09598bf welcome-emails: Revise text in onboarding_zulp_guide.
Revises the text prior to the link to the `/for/.../` guide in the
`onboarding_zulip_guide` email to be more engaging.
2023-04-24 10:04:47 -07:00
Lauryn Menard
2dc9e52531 welcome-email: Update call to action at end of followup_day2 email.
Updates the final phrase in the `followup_day2` email to be: "Go
to Zulip" and makes it a button instead of text with a link.
2023-04-24 10:04:47 -07:00
Joseph Ho
942cfa7118 narrow: Explicitly resume the reading state when narrow.deactivate.
Previously, when a user marks messages as unread in the all messages view
then enters another view and finally back to the all messages view, they'd
notice that the reading state in all messages view is still paused. 

This happened uniquely for "All messages" because we only resumed the "reading"
state in `narrow.activate` (and generally that would generate a new MessageList anyway); 
but `message_lists.home` is a singleton, so the "no longer reading" state would remain
attached to that object forever.

Fix this by explicitly resuming the reading state when we enter all messages
view/message_lists via narrow.deactivate.
2023-04-24 09:56:04 -07:00
Hardik Dharmani
af24279aea recent_conversation: Fix mute icon tooltip on focus.
Set data-tippy-trigger="mouseenter" on mute icon in recent
conversation to prevent tippy from staying on when the mute icon
is focused after clicking it. (The Tippy default is "mouseenter focus").
2023-04-24 09:52:31 -07:00
Daniil Fadeev
43669a83d8 timerender: Fix expiration date on invite modal. 2023-04-24 09:50:20 -07:00
Alex Vandiver
e0eb074b23 export: Skip PreregistrationRealm data.
Much like PreregistrationUser rows, these do not make sense to export.
2023-04-24 09:48:25 -07:00
Tim Abbott
dee3d7a172 user_topics: Rerender unmuted topics in Recent conversations.
Rename get_muted_topics to `get_user_topics_for_visibility_policy()`,
since it works for both muting and unmuting.

Additionally, inline rerender_for_muted_topic, as well as removing
most of the logic to diff the sets of muted topics; the event is for a
single topic being changed.

Co-authored-by: Hardik Dharmani <Ddharmani99@gmail.com>
2023-04-21 16:59:21 -07:00
palashb01
6d1efdc013 unmute_topic: Support unmuted topics in all messages feed.
This commit refactors the logic of the 'all messages' view to
display messages from unmuted topics within muted streams.

Previously, we hid all messages from muted streams except mentions
by checking if the stream was muted. With this new change, we also
check for unmuted topics within muted streams using the
'is_topic_unmuted' function inside 'user_topics', which returns
'true' if the topic is unmuted. If there is any unmuted topic, we
show the messages from that topic in the 'all messages' narrow.

Live update was handled by the previous commit.

Fixes part of: #24243
2023-04-21 13:52:02 -07:00
Tim Abbott
ae314a3ca9 message_list: Deduplicate stream muting live update code path.
We can dramtically simplify the stream muting live-update code path
for updating home_msg_list by observing the only thing it was doing
intentionally differently from update_muting_and_rerender is replacing
_all_items with a new version computed from from all_messages_data,
and the rest of update_muting_and_rerender can handle the live update
correctly unmodified.

This deduplication means live-update of "Unmute topic" just requires
updating the `in:home` filter logic appropriately, without any special
live update work.
2023-04-21 13:52:02 -07:00
Joelute
47b6bec0d4 emails: Update phrasing in confirm_registration.txt.
Previously, the email had a line that says "Click the button below". This
sounds weird as the plain text emails don't have buttons and only had links.
We should change "Click the button below" to "Click the link below" which
makes more sense.
2023-04-21 12:06:24 -07:00
Hardik Dharmani
1e1e18d28c left_sidebar: Prioritize unmuted topics in non-zoomed topic list.
Created a new function choose_topics that loops through the topics
and push filtered topics using should_show_topic function to items
array if not zoomed else just push all topics directly to array.

If stream is muted and not zoomed call the choose_topics function
twice, first with passing unmuted_topics and second time with passing
remaining topics. else, call it only once with topic_names.

Fixes part of #24243
2023-04-21 10:32:44 -07:00
Aman Agrawal
ace3ca80a8 unread_ops: Add unread class to messages instead of a full rerender.
When user marks messages as unread, we used to rerender them but
that was not required since we only need to add `unread` class
to their `message_row` to achieve the same effect.
2023-04-21 09:43:24 -07:00
Tim Abbott
c8f1325281 message_list: Move show_message_as_read to view layer. 2023-04-21 09:43:24 -07:00
Aman Agrawal
c99c71a9a5 message_list_view: Don't mark message as read after re-render.
When selecting a previously selected message after a re-render,
we don't need to mark it as read. This caused a bug where
user cannot mark the selected message in a narrow as unread.

Also, added an additional check to only select messages if the
message is re-rendered in the currently visible message list since
you cannot select a message in a view which is not visible.
2023-04-21 09:43:24 -07:00
Lauryn Menard
e68a69e91f api-docs: Update docs to reference max lengths in register response.
Updates areas in the API documentation that reference the maximum
length of a stream message topic to note the `max_topic_length`.

Updates areas in the API documentation that reference the maximum
length of a stream name to note the `max_stream_name_length` and
areas that reference the maximum length of a stream description to
note the `max_stream_description_length`.

All of these maximum values are sent by the `POST /register`
response.
2023-04-21 08:33:16 -07:00
Lauryn Menard
c848e0ff34 api-version: Bump to feature level 176 for URL templates for linkifiers.
See commit b7bfa5801c for related changes for this API feature
level update.
2023-04-21 08:32:19 -07:00
Lauryn Menard
cad2bc7628 api-changelog: Fix feature level 174 note.
Fix typo in API changelog feature level 174, and change "will"
to "may" about removing support for deprecated "private" value
for `type` parameter.
2023-04-21 08:32:19 -07:00
Sahil Batra
c80807c962 compose: Fix "Shift+Tab" behavior for stream dropdown in compose box.
We now open the stream dropdown if a user presses "Shift+Tab" from
topic input in the compose box, instead of just changing the focus
to be on dropdown toggle button.
2023-04-20 16:09:55 -07:00
Tim Abbott
f4dc5afe82 compose: Add brief comments documenting the modules. 2023-04-20 16:09:55 -07:00
evykassirer
0c706aeafc compose: Extract a compose_recipient module.
This helps reduce the amount of import cycles we have in the compose
code path following the migration to a fancier stream input.

`compose_closed_ui.initialize()` was moved further down in the
initialization order because it relies on the dropdown widget
to be defined.
2023-04-20 16:09:55 -07:00
evykassirer
5948671f92 compose: Improve responsiveness for compose recipient.
This allows the dropdown to display larger names, and also
overall improves the compose recipient experience on small
screens.
2023-04-20 16:09:55 -07:00
evykassirer
5ca73388c0 compose: Overflow long stream names with ellipsis in dropdown menu. 2023-04-20 16:09:55 -07:00
evykassirer
584d3c66a3 dropdown: Add ability to update items in dropdown widget.
This is needed for the compose stream dropdown widget,
which is also updated here. Now when a user is subscribed
or unsubscribed from a stream, or a stream is renamed, or
or a stream is deleted, the dropdown widget updates
accordingly. This fixes a regression of this functionality
that happened during the switch to the dropdown.
2023-04-20 16:09:55 -07:00
evykassirer
19a47a71d8 stream dropdown: Add a space after the stream icon.
This applies to several dropdowns, and matches the spacing of
the left sidebar.
2023-04-20 16:09:55 -07:00
evykassirer
02ae5818ae compose: Add privacy icons to the stream dropdown menu.
These were previously used in the input form field and
this commit removes the code that supported that and
replaces it by using existing dropdown_widget functionality
to display the icons in the compose dropdown.
2023-04-20 16:09:55 -07:00
evykassirer
8a2455a294 compose: Change stream field in composebox to be a dropdown.
Fixes #11832

This lets the user see more options than the three that appear
in the typeahead menu, and prevents them from inputting invalid
stream names.

This change replaces the input field with the dropdown, and
updates everything that referred to the classnames of the old
input field, so that they now get the data they need from the
new dropdown.
2023-04-20 16:09:55 -07:00
evykassirer
429f23fc4f click handler: Consolidate composebox-closing logic.
Previously, we stopped the composebox from closing on
in-composebox clicks by stopping propagation from the
composebox click handler. This was an issue because
we need to propagate the event to bootstrap in
situations like dropdown clicks. We can avoid closing
the composebox on in-composebox clicks by just checking
if the click is in the composebox.
2023-04-20 16:09:55 -07:00
evykassirer
32f75085cb dropdown hot key: Generalize enter behaviour for dropup as well as dropdown.
Also updated comment to more accurately represent that this isn't
only for the gear menu.
2023-04-20 16:09:55 -07:00
evykassirer
7f7845eb78 dropdown widget: Add method to replace list data.
This is a helpful prep commit for the upcoming compose
stream dropdown, which needs to change the list of
stream names when the user changes their stream subscriptions.
2023-04-20 16:09:55 -07:00
N-Shar-ma
3a64c8c0db compose: Change video call url text to "Join video call.".
Earlier it was "Click here to join video call".
2023-04-20 15:04:26 -07:00
alik-balika
67f82eb7b6 portico: Fix typo in development community page. 2023-04-20 14:59:48 -07:00
Joelute
567791e302 emails: Update remaining emails with "contact us" lines.
After merging #24423, it was found that there were still an email yet to be updated with the new lines introduced in that PR. This commit updates both the email and plain-text versions.
2023-04-20 14:58:09 -07:00
Joelute
ee71255296 emails: Fix "contact us" line in plain-text versions of emails.
This is a continuation of #24260 where we have redrafted the "contact us"
line in various emails, but the plain-text versions of those emails remains
untouched. We want to also update those versions and ensure that they match
with our emails.

Fixes: #25198.
2023-04-20 14:58:09 -07:00
David Rosa
93062b3ec4 help: Update Message formatting section and page on Mentions. 2023-04-20 10:42:49 -07:00
David Rosa
b6b217681a help: Improve emoji and emoticon documentation. 2023-04-20 10:42:49 -07:00
Sahil Batra
6607db8a1c dropdown_list_widget: Fix fading transition during focus.
This commit sets the transition to "none" for the dropdown
list widget element during focus to remove a weird fade-in
effect. We have to set this to none as the existing CSS
sets transition for all button elements inside ".new-style"
div. This commit adds the CSS for select element too,
as both are using same CSS, but since there was no transition
effect for select elements before as well, we can do this
change safely.
2023-04-20 10:38:24 -07:00
Lauryn Menard
e8c777a43c empty-narrow: Update banner for no starred messages.
Updates the empty narrow banner when there are no starred messages
for a more general use case. Previously, it indicated that the
user hadn't starred anything yet, which could be confusing for an
experienced user who had just cleared out their starred messages.
2023-04-20 10:37:53 -07:00
Lauryn Menard
3c88db9164 docs: Update development version warning text to be more explicit. 2023-04-20 10:37:30 -07:00
Alya Abbott
983c1e5318 help: Update /help/require-topics.
There is no longer a special permissions exception for adding a
topic to messages without one.
2023-04-19 20:28:29 -07:00
Alya Abbott
e8dfe9eefd help: Update "Disable welcome emails" help page.
Drop unnecessary details about number and content of welcome emails,
which were no longer accurate.
2023-04-19 20:28:07 -07:00
Anders Kaseorg
77a669c15c e2e-tests: Replace deprecated page.waitForTimeout.
https://pptr.dev/api/puppeteer.page.waitfortimeout
https://nodejs.org/api/timers.html#timerspromisessettimeoutdelay-value-options

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-19 17:45:01 -07:00
Alya Abbott
303b7d6d9f help: Document new "Rename topic" option. 2023-04-19 17:11:02 -07:00
Ujjwal Aggarwal
dcea17eb44 emails: Improve "contact us" line in onboarding emails.
Several onboarding emails sent to new users/organizations used the
same "contact us" language. Adds new macros for the "contact us"
line for Zulip Cloud and self-hosted realms to eliminate repetition.

The suitable macro for Zulip Cloud vs self-hosted organizations is
decided conditionally, by checking corporate_enabled.

Fixes #24260.
2023-04-19 17:09:17 -07:00
Prakhar Pratyush
b366c37452 user_topics: Rename and refactor 'muted_topic_ui_row.hbs'.
This prep commit renames 'muted_topic_ui_row.hbs'
to 'user_topic_ui_row.hbs'.

This includes minor refactoring, as it is now the
template for rows with any visibility_policy,
not just MUTED.
2023-04-19 16:58:40 -07:00
Prakhar Pratyush
ba3867bed6 user_topics: Rename and refactor 'get_muted_topics'.
This is a prep commit that renames 'get_muted_topics'
to 'get_user_topics_for_visibility_policy'.

The function is refactored to add support for
visibility policies other than MUTED.
2023-04-19 16:58:40 -07:00
Alex Vandiver
c815dba368 install: Write out a zulip-git-version upon install. 2023-04-19 16:56:14 -07:00
Alex Vandiver
8ae167dc05 upgrade-zulip-from-git: We may need to fill in a zulip-git-version file.
Installs which are upgrading to current `main`, and are upgrading for
the very first time from an install which was originally from git,
have a `/home/zulip/deployments/current` which, unlike all later
upgrades, is not a `git worktree` of `/srv/zulip.git`, but rather a
direct `git clone` of some arbitrary URL.  As such, it does not have
an `upstream` remote, nor a cached `zulip-git-version` file.

This makes later attempts to determine the pre-upgrade revision of
git (for pre-deploy hooks) fail, as without a `zulip-git-version`
file, `ZULIP_VERSION` is insufficiently-specific (e.g. `6.1+git`), and
there is no guarantee the necessary tags exist either.

While we can make fresh git installs set up an `upstream` and run
`./tools/cache-zulip-git-version` going forward (see subsequent
commit), that does not address the issue for deploys which already
exist.  For those, we must configure and fetch a `remote` in the old
checkout, followed by re-generating a cached `zulip-git-version`.

Fixes: #25076.
2023-04-19 16:56:14 -07:00
Alex Vandiver
96e42b8e81 upgrade-zulip-from-git: Extract code to set zulip upstream remote. 2023-04-19 16:56:14 -07:00
Sahil Batra
3853a8bf20 dropdown_list_widget: Do not underline the option text on focus.
We remove the underline on the text in the options on focus as
we already have a outline which is enough to show that the option
is focussed.
2023-04-19 16:54:13 -07:00
Sahil Batra
1505fc30d6 dropdown_list_widget: Update focus outline of toggle button.
This commit updates the focus outline of toggle button to be
same as that of select element.
2023-04-19 16:54:13 -07:00
Anders Kaseorg
66f762f4f4 eslint: Enable @typescript-eslint/strict configuration.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-19 16:52:39 -07:00
Anders Kaseorg
60d49ae4a6 eslint: Fix @typescript-eslint/prefer-nullish-coalescing.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-19 16:52:39 -07:00
Anders Kaseorg
b280843e51 eslint: Fix @typescript-eslint/prefer-optional-chain.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-19 16:52:39 -07:00
Anders Kaseorg
5ac9b644eb eslint: Fix @typescript-eslint/prefer-return-this-type.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-19 16:52:39 -07:00
Anders Kaseorg
079b74e67e eslint: Fix @typescript-eslint/no-unnecessary-type-arguments.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-19 16:52:39 -07:00
Anders Kaseorg
d958948f43 eslint: Fix @typescript-eslint/no-unnecessary-boolean-literal-compare.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-19 16:52:39 -07:00
Anders Kaseorg
61b72f5117 eslint: Fix @typescript-eslint/non-nullable-type-assertion-style.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-19 16:52:39 -07:00
Anders Kaseorg
b9a28df63c eslint: Fix @typescript-eslint/consistent-indexed-object-style.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-19 16:52:39 -07:00
Anders Kaseorg
cd5fba24e0 eslint: Fix @typescript-eslint/consistent-generic-constructors.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-19 16:52:39 -07:00
Anders Kaseorg
084771ce74 eslint: Fix @typescript-eslint/consistent-type-definitions.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-19 16:52:39 -07:00
Lalit
ccbba1acb0 dialog_widget: Refactor AjaxRequest type and moved it to types.ts.
Changes `AjaxRequest` name to more clear one `AjaxRequestHandler`,
also moved this type to `types.ts` with a comment to move it into
`channel.js` once it migrates to typescript.
2023-04-19 16:43:27 -07:00
Lalit
cfa92aa60b js: Break cyclic dependency between reload,js and server_events.js.
Removes direct dependency cycle between `reload.js` and `server_events.js`
by calling `reload.add_reload_hook(cleanup_event_queue)` from `server_events`
initialize function which registers a hook to run on reloading.

Created a function `call_hooks` which loops over all the registered hooks
and executes them on performing a reload.
2023-04-19 16:42:45 -07:00
Lalit
915b6cd9e7 js: Break cyclic dependency between admin.js and settings.js.
There was a direct dependency between `admin.js` and `settings.js` which
was due to the fact that we needed to call `build_page` of both modules
in each other's `launch` function.

This is solved by lifting those `build_page` calls up from both modules to
`hashchange.js` which is the module which calls the `launch` function
of both modules.
2023-04-19 16:41:49 -07:00
Hardik Dharmani
98176ddb57 left sidebar: Improve tooltip for show_all_private_messages.
Switch to a full keyboard-shortcut advertising tippy tooltip for
show_all_private_messages in left sidebar by adding a class
`.tippy-left-sidebar-tooltip` which adds tooltip with LONG_HOVER_DELAY
and default placement right with fallback placement equal to bottom.

Fixes part of #24311.
2023-04-19 16:21:17 -07:00
Hardik Dharmani
bfdd9adaa4 tooltips: Add tippy tooltips for all_messages, recent_topics, and drafts.
Added tippy tooltips for all_messages, recent_topics, and drafts
in left sidebar by adding class `.tippy-left-sidebar-tooltip`
which add tooltips with LONG_HOVER_DELAY and default placement right
with fallback placement equal to bottom.

Fixes part of #24311
2023-04-19 16:16:08 -07:00
Hardik Dharmani
de6bca9fc5 tooltips: Add new tippy tooltip class for left sidebar elements.
Added new tippy tooltips class `.tippy-left-sidebar-tooltip`
which add tooltips with `delay: LONG_HOVER_DELAY`, appended to body,
and default placement right with fallback placement equal to bottom.

Fixes part of #24311
2023-04-19 16:16:07 -07:00
Hardik Dharmani
a32c30e34c tooltips: Remove the title attribute for Mentions, Starred_messages.
This commit removes tooltips from the Mentions and Starred messages
as they do not advertise any keyboard shortcuts and do not provide
any additional information beyond what is already visible in the UI.

Fixes part of #24311
2023-04-19 16:15:06 -07:00
Hardik Dharmani
ab70df5f44 tooltips: Change compose-send-button tooltip dynamically.
Added a tippy tooltip in `tippyjs.js` that delegates to
`#compose-send-button`. Content of tippy tooltip is changed
dynamically as per value of `user_settings.enter_sends`.
`user_settings.enter_sends` returns true if send shortcut is
`enter` and flase if shortcut is `Ctrl + Enter`.

Fixes #24619
2023-04-19 16:13:29 -07:00
Alya Abbott
0c12a3bcb4 portico: Remove Senior Frontend Engineer position from /jobs page.
Also add a note about reaching out to us, since there are no open
positions remaining at this time.
2023-04-19 16:07:46 -07:00
Tim Abbott
262e8c8e8d events: Fix live update when deleting a starred message.
Previously, we didn't notify the starred messages code path when
processing the event that a message was deleted, resulting in the
displayed counter potentially being stale until the app is reloaded.

Fixes #25190.
2023-04-19 12:43:13 -07:00
Zixuan James Li
05a3456581 settings: Use url_template for internal names.
This replaces any "url_format_string" or "url_format" with
"url_template" for the linkifier settings, including HTML ids, template
variables, and etc.

This is not affected by any external API changes.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-04-19 12:20:49 -07:00
Zixuan James Li
6f42542320 migrations: Remove filter_format_validator.
This removes the validator argument for 0423_realmfilter_url_template,
which do not really alter the database schema. It otherwise fails
the migration because the filter_format_validator function is removed.

Migration 0094_realm_filter_url_validator is modified because we can no
longer refer to filter_format_validator.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-04-19 12:20:49 -07:00
Zixuan James Li
032e6f8cb4 linkifier: Update edit_linkifier command to use url_template.
This is mainly updating the variable names and relevant docstrings
without actual change to the behavior of the command.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-04-19 12:20:49 -07:00
Zixuan James Li
268f858f39 linkifier: Support URL templates for linkifiers.
This swaps out url_format_string from all of our APIs and replaces it
with url_template. Note that the documentation changes in the following
commits  will be squashed with this commit.

We change the "url_format" key to "url_template" for the
realm_linkifiers events in event_schema, along with updating
LinkifierDict. "url_template" is the name chosen to normalize
mixed usages of "url_format_string" and "url_format" throughout
the backend.

The markdown processor is updated to stop handling the format string
interpolation and delegate the task template expansion to the uri_template
library instead.

This change affects many test cases. We mostly just replace "%(name)s"
with "{name}", "url_format_string" with "url_template" to make sure that
they still pass. There are some test cases dedicated for testing "%"
escaping, which aren't relevant anymore and are subject to removal.
But for now we keep most of them as-is, and make sure that "%" is always
escaped since we do not use it for variable substitution any more.

Since url_format_string is not populated anymore, a migration is created
to remove this field entirely, and make url_template non-nullable since
we will always populate it. Note that it is possible to have
url_template being null after migration 0422 and before 0424, but
in practice, url_template will not be None after backfilling and the
backend now is always setting url_template.

With the removal of url_format_string, RealmFilter model will now be cleaned
with URL template checks, and the old checks for escapes are removed.

We also modified RealmFilter.clean to skip the validation when the
url_template is invalid. This avoids raising mulitple ValidationError's
when calling full_clean on a linkifier. But we might eventually want to
have a more centric approach to data validation instead of having
the same validation in both the clean method and the validator.

Fixes #23124.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-04-19 12:20:49 -07:00
Zixuan James Li
ab53e8d3e6 migrations: Backfill url_template from url format string.
This is implemented by replacing all matches of "%(var_name)s" in a URL
format string with "{var_name}". Since we do want to ensure that the
templates aren't broken after this migration, a RuntimeError is raised
to let the maintainer know that certain linkifier cannot be converted
automatically if it does not pass the uri_template.validate check.

Also, we need to escape "%%", which is used to represent "%" in the old
format string syntax, as well as "{" and "}", which is a part of the
URL template syntax.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-04-19 12:20:49 -07:00
Zixuan James Li
a19c80df43 linkifiers: Add url_template field.
This will later be used to expand matching linkifier patterns.
Making it nullable for now, but we will make it required in
the APIs.

As a part of this transition, we temporarily make url_format_string
nullable as well, which will be later removed. This allows us to
switch to populating url_template without caring about passing
url_format_string.

Note that the validators are imported in the migration because Django
otherwise diffs it and considers the schema to be different, generating
a migration, failing the "tools/test-migrations" test.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-04-19 12:20:49 -07:00
Zixuan James Li
8b43a50a78 requirements: Add uri-template.
This is later used for supporting RFC 6570 URI Template in place of the
URL format string that we were using for linkifiers.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-04-19 12:20:49 -07:00
palashb01
acb4d7efa6 recent: Add support for unmuted topics within muted streams.
This commit refactors the logic of message filtering for
'Recent conversations' narrow.

Previously, we used to filter the recent conversations messages
based on the state of the stream and topic. If the stream or topic
was muted, we would avoid displaying the message. However, with
the new changes, we check if the topic is unmuted before applying
the aforementioned condition. If the topic is unmuted, we add the
message to the all 'Recent conversations' narrow.

Fixes part of: #24243
2023-04-19 10:05:48 -07:00
Alex Vandiver
ed4de6da4a migrations: Add a migration to fix invalid deleted user emails.
208c0c3034 fixed this for new deleted users, but left existing users
with potentially invalid email addresses.  This is problematic if the
realm is ever exported and re-imported, as the addresses will not
validate.

Add a migration which attempts to fix these invalid email addresses.
2023-04-19 10:01:03 -07:00
Aman Agrawal
5f0fa1b730 compose: Fix send later tooltip being cut by compose box container. 2023-04-19 09:43:50 -07:00
Aman Agrawal
1b89ab8095 tippy: Add a short delay to narrow to topic tooltip. 2023-04-19 09:43:50 -07:00
Alex Vandiver
7dc7962c04 zulip-puppet-apply: Any resources failing to apply should exit 2.
The existing `except subprocess.CalledProcessError` only catches if
there are syntax errors which prevent the `lastrun` file from being
written; it does not handle if there are properly-defined resources
which fail to evaluate (e.g. due to a missing dependency or file).

Check the `failed` resource count, and exit 2 if there are any such
resources.  This will cause `zulip-puppet-apply --force --noop` (which
is used as a pre-flight check during upgrades) to properly detect and
signal on more types of invalid puppet configurations.  In turn, this
will cause `upgrade-zulip` to not attempt to power through upgrades it
knows are destined to fail.
2023-04-19 09:35:19 -07:00
Alex Vandiver
cace8858f9 puppet: Move logrotate config into app_frontend_base.
7c023042cf moved the logrotate configuration to being a templated
file, from a static file, but missed that the static file was still
referenced from `zulip_ops::app_frontend`; it only updated
`zulip::profile::app_frontend`.  This caused errors in applying puppet
on any `zulip_ops::app_frontend` host.

Prior to 7c023042cf, the Puppet role was identical between those two
classes; deduplicate the rule by moving the updated template
definition into `zulip::app_frontend_base` which is common to those
two classes and not used in any other classes.
2023-04-19 09:34:37 -07:00
Lauryn Menard
b910bb107a api-docs: Clean up documentation of API events with message_type.
Cleans up the API documentation for get events with a `message_type`
value: `delete_message`, `typing op:start` and `typing op:stop`.
2023-04-19 09:33:58 -07:00
Alex Vandiver
775c7ca4ea hooks: Give a bit better Zulip deploy message. 2023-04-19 09:32:39 -07:00
Joelute
938b7917d3 user_settings: Add option to not mark messages as read on scroll.
These changes introduces an new user option where it allows
users read messages and scroll through their feed without
marking those messages as read.

Fixes: #22804.
2023-04-18 18:32:02 -07:00
Joelute
ffbe6e870a unread_ui: Rename functions names to offer a general clarity.
Previously, the naming of functions in unread_ui was targeted towards a
specific unread banner. This is terrible if we plan on having multiple
types of unread banners and this change aims to offer that level of clarity.
2023-04-18 18:32:02 -07:00
Joelute
afbd0a9b43 user_settings: Add web_mark_read_on_scroll_policy field.
This is a backend change that will help support the new
`Mark messages as read on scroll` user setting.
2023-04-18 18:32:02 -07:00
Joelute
82a805e286 compose: Fix incorrect preview area first/last child selectors.
Following up to #24961, it was discovered that emojis looked worse with
the new changes as the spacings became uneven with each emojis.

Debugging determined that the root cause that the selectors used
applied to __every__ first child of its parent inside the
rendered_markdown area, not just the first child of the main
container.
2023-04-18 17:41:37 -07:00
Joelute
cdad925add popover: Scroll to top of long message when viewing message actions.
Previously, when a user scrolls down a long text of message and presses
the hotkey for viewing the message actions, the popover menu would continue
to open where the message actions button. Thus, the popover menu would be
cut short and sometimes off the screen. These changes will scroll the
client to the top of the message and ensure that the popover menu is
always visible.

Fixes: #23774.
2023-04-18 17:06:24 -07:00
brijsiyag
0c30acbe39 streams: Fix notice appears even when the panel is not empty.
This fixes regression in 55bd3220b6,
Where notice gets rendered even when there are streams shown in panel.
Now the check var to render message conditionally checks for both
`subscribed` and `all streams` tabs. We are avoiding the fully use of DOM
in this context because if the filter results in no stream, then also
it will display a notice. Also this commits swaps order of calling
`stream_data.delete_sub()` and `stream_settings_ui.remove_stream()`
functions in server_events_dispatch because `update_empty_left_panel_message`
uses stream_data, which was giving outdated data.
2023-04-18 17:02:01 -07:00
Prakhar Pratyush
83bbd8c767 user_topics: Update 'do_update_message' to handle 'merge userTopic states'.
This commit updates the logic for migrating user_topic rows
during the move-messages operation when the target topic
already has messages.

Previously, the target_topic's visibility_policy was simply
set to the original_topic's visibility_policy,
and the original_topic's visibility_policy was set to INHERIT.

This commit updates the move-messages code path to determine
the new visibility_policy depending on the visibility policies
of the original and target topics.
The target_topic's visibility_policy is then updated.

The number of db queries has increased by two:
One query corresponds to determining if 'target_topic_has_messages'.
Another query corresponds to 'get_users_with_user_topic_visibility_policy'
to determine 'target_topic_user_profile_to_visibility_policy'.
2023-04-18 16:40:57 -07:00
Prakhar Pratyush
d5f148aa36 user_topics: Update 'topic_has_visibility_policy' to support INHERIT.
This prep commit updates the lib function
'topic_has_visibility_policy' to add support for the case
when visibility_policy=INHERIT.

Previously, it had support for all the visibility policies
except INHERIT.
2023-04-18 16:40:57 -07:00
Prakhar Pratyush
18eea3fc4a message_edit: Refactor the move user_topic records code block.
This commit refactors the move user_topic records
code block in 'do_update_message', resulting in
clean code.

We directly iterate over the dictionary items
instead of looping over the keys and fetching
values if the key exists.
2023-04-18 16:40:57 -07:00
brijsiyag
5cef364c74 upload: Open compose immediately on file drop or paste event.
This commit changes the way compose box responds to a file drop or paste.
Currently, the compose box expands only after the file is uploaded to the
server, which can cause confusion if the upload fails and there is also no
progress bar. With the update, the compose box will expand immediately upon
drop or paste events showing the status of upload. Also it was opening
the stream compose box even if we are in a direct message, now it starts
a reply.

Fixes #24654.
2023-04-18 16:37:56 -07:00
Ruchir Harbhajanka
e08256ce88 urls: Move jwt_fetch_api_key endpoint to v1_api_mobile_patterns.
Moves jwt_fetch_api_key endpoint to v1_api_mobile_patterns so
that tools/test-api detects it as an API endpoint that is pending
documentation.

Fixes #24982.
2023-04-18 15:44:31 -07:00
Anders Kaseorg
1f05ed2486 emails: Remove compiled from .gitignore.
It’s unused since commit 2f203f4de1
(#24991).

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-18 13:25:52 -07:00
Lauryn Menard
2c043c6242 message-type: Add support for "direct" as value for type parameter.
For endpoints with a `type` parameter to indicate whether the message
is a stream or direct message, `POST /typing` and `POST /messages`,
adds support for passing "direct" as the preferred value for direct
messages, group and 1-on-1.

Maintains support for "private" as a deprecated value to indicate
direct messages.

Fixes #24960.
2023-04-18 12:29:33 -07:00
Lauryn Menard
42d9560413 message: Use recipient_type_name for API message type references.
Refactors instances of `message_type_name` and `message_type`
that are referring to API message type value ("stream" or
"private") to use `recipient_type_name` instead.

Prep commit for adding "direct" as a value for endpoints with a
`type` parameter to indicate whether the message is a stream or
direct  message.
2023-04-18 12:29:33 -07:00
Lauryn Menard
c87fbacaed message: Use more accurate recipient_type when applying unread event. 2023-04-18 12:29:33 -07:00
palashb01
3ad5e7dfc0 tippy: Prevent second appearance of tooltips for recipient bar icons.
There are four icons in the recipient bar that have tooltips, and
each of them shows a second appearance if we click on a button of
the topic menu that is just over the area of the icon. To prevent
the second tooltip, we have used the
'hide_tooltip_if_reference_removed' function to observe changes in
the DOM and hide the tooltip if the reference is removed.
2023-04-18 10:03:09 -07:00
Palash Baderia
054098fa01 tippy: Prevent appearance of second view_user_card tooltip.
With the recent migration of the topic_menu popover to Tippy,
some tooltips have been impacted. If we click on a popover menu
and then click on any button where the area is above the tooltip
icon, two tooltips appear. The first one is expected to appear over
the reference element, but the second tooltip appears on the top
left corner of the screen because the associated reference element
is hidden.

This commit fixes this issue for the view_user_card tooltip with
the help of the 'hide_tooltip_if_reference_removed' function.
We have set the attributes config to be 'true', since when the
tooltip appears, the parent div with classname
'message_row include_sender' is added with the value
'sender_name_hovered' in its className. We just need to observe
this classname change to hide the tooltip.
2023-04-18 10:03:09 -07:00
Mateusz Mandera
eb4fc7568c auth_enabled_helper: Add realm_authentication_methods argument.
This allows removing pointless db queries when calling
*_auth_enabled(realm) repeatedly.
2023-04-18 09:22:56 -07:00
Mateusz Mandera
72d56d5d59 auth: Remove Realm.AUTHENTICATION_FLAGS class attribute.
With the removal of the authentication_methods bitfield this is now
useless and just duplicates AUTH_BACKEND_NAME_MAP keys.
2023-04-18 09:22:56 -07:00
Mateusz Mandera
ffa3aa8487 auth: Rewrite data model for tracking enabled auth backends.
So far, we've used the BitField .authentication_methods on Realm
for tracking which backends are enabled for an organization. This
however made it a pain to add new backends (requiring altering the
column and a migration - particularly troublesome if someone wanted to
create their own custom auth backend for their server).

Instead this will be tracked through the existence of the appropriate
rows in the RealmAuthenticationMethods table.
2023-04-18 09:22:56 -07:00
Sahil Batra
41f17bf392 popovers: Fix showing resolve topic option in sidebar popover.
We previously showed "Mark as unresolved" or "Mark as resolved"
option in topic sidebar popover only is user was allowed to
move messages between streams. This commit fixes it to show
if user is allow to move within stream, or in other words edit
the topic, since resolving or unresolving topics is essentially
topic ediitng only.

Note that we still cannot show or hide the option as per the time
limit setting (since client may not have the first message of the
topic locally), so we just show or hide it as per
move_messages_within_stream_policy setting.
2023-04-18 09:01:39 -07:00
Sahil Batra
8874328b87 stream_popover: Add "Rename topic" option in topic sidebar popover.
This commit adds "Rename topic" option in topic sidebar popover
which will be shown when user is only allowed to edit topics and
not streams.

Note that we still cannot show or hide the option as per the time
limit setting (since client may not have the first message of the
topic locally), so we just show or hide it as per
move_messages_within_stream_policy setting.

Fixes #19886.
2023-04-18 09:01:39 -07:00
Sahil Batra
0b608d7952 message_edit: Add buffer when checking time to disable move message inputs.
This commit adds 5 seconds buffer when checking the permission to edit
stream and topic for disabling the inputs in "Move message" and
"Move topic" modal.

We already do this for the message content edit UI.
2023-04-18 09:01:39 -07:00
Aman Agrawal
d3dc26cbad header: Improve dropdown click handler.
Minor tweaks that make sense to do.
2023-04-18 08:54:55 -07:00
Aman Agrawal
2553858c91 portico-header: Fix navbar user dropdown not working.
As part of #24678, this code was accidentally removed. We just
add it back to fix the broken user profile dropdown in the navbar
of non corporate pages.
2023-04-18 08:54:55 -07:00
Sahil Batra
c27ff12b8c user_groups: Update ID of overlay container element.
This commit renames ID of the container element of group
settings overlay to group_overlay_container. We also
rename the variables used for this element. This makes
it consistent with the container element of settings overlay.
2023-04-18 08:53:08 -07:00
Sahil Batra
a5580264eb stream_settings: Update ID of overlay container element.
This commit renames ID of the container element of stream
settings overlay to streams_overlay_container. This makes
it consistent with the container element of settings overlay.
2023-04-18 08:53:08 -07:00
Tim Abbott
c995e48e11 recent: Clarify recenter_focus_if_off_screen.
The previous name suggested it did something unconditionally.
2023-04-17 19:10:42 -07:00
Lakshay Mittal
ce578423f8 popovers: Hide popovers during scroll in recent_conversations.
Previously, popovers scrolled oddly along with the content in the
Recent Conversations tab; copy our approach in the message feed of
closing them on scroll.
2023-04-17 19:10:42 -07:00
Aman Agrawal
5b71acf21b message_list_view: Change date of sticky header more carefully.
If the sticky recipient bar hides the date separator completely,
the recipient bar needs to show the correct date for the message
next to it, otherwise the user will see the wrong date for the
message.

To fix this, we show the date on the date separator as soon as
the sticky message header starts to overlap with the date separator.
2023-04-17 18:51:00 -07:00
Ishaan Singh
96b051bec4 left_sidebar: Fix 'more topics' view scroll position.
This is a preparatory work for #24360.

'DIRECT MESSAGES' are completely collapsed in the 'more topics' view.

Clicking on 'DIRECT MESSAGES' exits the 'more topics' view and
scrolls to it from that state. One wouldn't be able to open
'DIRECT MESSAGES' without leaving the 'more topics' view.

Fixes: #25035.

Signed-off-by: Ishaan Singh <asishaan.191cs124@nitk.edu.in>
2023-04-17 17:40:35 -07:00
Sahil Batra
2700ad7903 typeahead: Show stream privacy icons in typeahead options.
We now show the stream privacy icons along with their names
in the typeahead options.
2023-04-17 17:19:11 -07:00
Sahil Batra
0676629008 dropdown_list_widget: Show stream icon in the button.
We now show the stream privacy type icon for the option
selected in dropdown list widget.

This commit also includes a minor CSS change to make the
web-public better aligned in the dropdown list widget
"Move topic" and "Move message" modal. There is no visible
change for other pages and other icons due to this CSS
change.

Fixes part of #22355.
2023-04-17 17:19:11 -07:00
Hardik Dharmani
82bf1ba58a shortcuts: Update Shift + M shortcut to work for unmute topics too.
Renamed toggle_topic_mute function to toggle_topic_visibility_policy.

In toggle_topic_visibility_policy function if topic is either muted or
unmuted it will set the topic's visibility_policy to Inherit else, if
stream is muted or unmuted topic's visibility_policy will be set to
unmuted and muted respectively.

Updated set_user_topic_visibility_policy to only show feedback widget
in case of muting topics with hotkey.

Fixes #25125
2023-04-17 17:16:28 -07:00
Aman Agrawal
043d54d170 scheduled_messages: Add overlay to display and edit them.
Fixes #20971
2023-04-17 16:59:25 -07:00
Aman Agrawal
ff52187289 compose: Add UI to schedule messages.
Fixes #20971
2023-04-17 16:59:25 -07:00
Palash Baderia
a4a8fd7bf3 typo: Remove duplicate word in comment. 2023-04-17 15:42:21 -07:00
Lauryn Menard
c8a4b401c7 unsubscribe-success: Update template for org name and welcome emails.
Because unsubscribing from welcome emails cannot be undone, it is
confusing that the unsubscribe success page suggests that the user
can. Makes the second sentence about undoing the unsubscribe action
conditional on the `subscription_type` not being "welcome".

Updates the first sentence to specifically note the Zulip realm
that has been updated for the unsubscribe action so that it is
clear for which Zulip organization the user's settings have been
updated/changed, since the user might have accounts with various
Zulip organizations (via Zulip Cloud or self-hosted servers) that
use the same email account.
2023-04-17 12:58:32 -07:00
Aman Agrawal
fbb2967ff0 message_body: Remove link from message time when locally echoed.
Fixes #25069

Since the locally echoed link of message doesn't work, it is
better to remove it.
2023-04-17 12:19:20 -07:00
Aman Agrawal
2c83efc6b4 message_row: Rename local class to be more verbose. 2023-04-17 12:19:20 -07:00
Aman Agrawal
7bd66891f0 css: Add background color for date row.
The logic to avoid first unread message with a date row to not
have an unread marker works purely based on `z-index` and seems
to be working nicely.

This avoids a bug where the background color of the date row
of the first unread message is different from others.
2023-04-17 12:12:41 -07:00
Sahil Batra
8293bbea28 message_edit: Show modal if user cannot resolve topics.
We show a modal if user is not allowed to resolve or unresolve
topics due to time limit. The modal just contains the text
mentioning user cannot resolve topic without stating the
count of messages that are within the time limit as we do
not recommend partial resolving of topics.

This commit does not include any changes for resolving or
unresolving topic using "Move topic" or "Move message" modals,
as we will still consider them as simple topic move and show
the same modal that is shown in general for moving message.
2023-04-17 11:25:28 -07:00
AcKindle3
e08535ab3e typo: Fix a typo in block comment
Changed `one` to `want` so that the sentence make sense.
2023-04-17 09:59:41 -07:00
Alex Vandiver
3f9ed40c62 version: Bump PROVISION_VERSION for previous change.
e536a14b61 left off the required major PROVISION_VERSION bump.
2023-04-17 09:36:11 -07:00
Aman Agrawal
a06f3d26d0 scheduled_messages: Add endpoints to fetch and delete them. 2023-04-14 17:38:37 -07:00
Aman Agrawal
c0ef1c360a message_send: Edit scheduled message if its ID is present.
If the ID of the scheduled message is passed by the client, we
edit the existing scheduled message instead of creating a new one.

However, this will soon be moved into its own API endpoint.
2023-04-14 17:38:37 -07:00
Aman Agrawal
555041c081 models: models: Extract get_recipient_ids method.
This will be used by scheduled messages to as it is used by drafts.
2023-04-14 17:38:37 -07:00
Aman Agrawal
a0eac4aaf4 models: Rename _type to recipient_type_str. 2023-04-14 17:38:37 -07:00
Aman Agrawal
b63f440fb1 models: Allow scheduled msgs to store rendered content.
This is required by the client to display a list of currently
scheduled messages.
2023-04-14 17:38:37 -07:00
Aman Agrawal
a941545523 drafts: Add abstract classes for messages in an overlay.
This will help up achieve 2 things:

* Have a lot of common CSS for drafts and scheduled messages.
* Have common JS for things like keyboard navigation between drafts
  and scheduled messages.
2023-04-14 17:38:37 -07:00
Aman Agrawal
c8878ed6a5 drafts: Use new tooltip design to show keyboard shortcuts. 2023-04-14 17:38:37 -07:00
Tim Abbott
1d2cf734f3 lint: Limit JS assert rule to web/tests. 2023-04-14 12:26:33 -07:00
Joelute
5d69a54849 time_picker: Reduce increment of minutes to one.
After some discussions in CZO, it was decided that we should reduce the
increment of minutes to one because the up/down arrow isn't very helpful
at all. Most of the time, users would manual type their desired time and
micro adjust with the arrow keys if needed.

This change also solves the issue where the time picker only counts
multiples of 5s as valid time as it was tied to the increment of minutes.
2023-04-14 11:02:10 -07:00
Hardik Dharmani
d7d3126f80 settings: Use place_caret_at_end for New Email input field.
Used updated `place_caret_at_end` function from ui_utils to focus
`New Email` input field and place the cursor at end on modal render.
2023-04-14 10:59:42 -07:00
Hardik Dharmani
17ae99f436 ui_util: Update place_caret_at_end to also work for input fields.
Previously, `place_caret_at_end` was only used for HTMLElement with
contenteditable="true", updated it so it takes HTMLElement as
argument and use logic to place cursor at end as per type of
element passed(i.e HTMLElement or HTMLInputElement).
2023-04-14 10:59:42 -07:00
sbansal1999
f0ef0f7157 tooltip: Change placement of tooltip according to the popover menu.
This commits changes the placement of "Add streams" tooltip
and "Filter streams" tooltip to "bottom" when the
"Add streams" popover menu is opened and changes its back
to "top" when the popover menu is closed.

It makes use of the "id" attribute that has been assigned
to those tooltips in commit 01e6121e5a.

Fixes: #20675.
2023-04-13 16:46:15 -07:00
sbansal1999
2cf9e354c0 tooltip: Append tooltips to "document.body".
This commit appends the "Add streams" and "Filter streams"
tooltip to "document.body". It was required to make sure
the tooltip appears at the top when space in
"Direct Messages" section was not enough (when only 1 Direct
Message was present).

This commit also removes the "tippy-zulip-tooltip" class
from tooltips or else the tooltips would have shown their
default behaviour.
2023-04-13 16:46:15 -07:00
sbansal1999
44ffc9c9ca tooltip: Add id attribute to "Add streams" and "Filter streams" tooltip.
This commits adds an "id" attribute to the "Add streams" and
"Filter streams" tooltip. "Add streams" tooltip has been given
the id "add_streams_tooltip" and the "Filter streams" tooltip
has been given the id "filter_streams_tooltip".

This has been done to get access of these tooltips later.
2023-04-13 16:46:15 -07:00
sbansal1999
be9fbff5cd tippyjs: Combine "delegate" functions with same functionality.
This commits combines two different "delegate" functions that
provide identical functionality by combining values of the
"target" array in the function.
2023-04-13 16:46:15 -07:00
Mateusz Mandera
2b358dc980 docs: Document how to use a self-modified dependency with Zulip in dev.
As explained in the doc, sometimes you want to test your changes to a
dependency WITH Zulip without waiting for upstream merge and release.
2023-04-13 15:58:03 -07:00
Mateusz Mandera
ef42065cec billing: Allow exempt_from_license_number_check any number of licenses.
exempt_from_license_number_check was initially added allowing
organizations with it enabled to invite new users above their number of
licenses.

However, an organization with this permission enabled,
cannot upgrade if they weren't on a plan already - because when choosing
Manual license management, you cannot enter a number of licenses lower
than the current seat count. However, an organization like that probably
already has some users that they get free of charge - and thus they need
to be able to enter a lower number of licenses in order to upgrade.
2023-04-13 15:26:44 -07:00
Mateusz Mandera
be208f73f7 billing: Fix exempt_from_from_license_number_check column name.
exempt_from_from_license_number_check was clearly not intended.
2023-04-13 15:26:44 -07:00
Mateusz Mandera
2a45429a51 zilencer: Delete duplicate remote push registrations.
This fixes existing instances of the bug fixed in the previous commit.

Fixes #24969.
2023-04-13 15:17:20 -07:00
Mateusz Mandera
ade2225f08 zilencer: Avoid creating duplicate remote push registrations.
Servers that had upgraded from a Zulip server version that did not yet
support the user_uuid field to one that did could end up with some
mobile devices having two push notifications registrations, one with a
user_id and the other with a user_uuid.

Fix this issue by sending both user_id and user_uuid, and clearing
2023-04-13 15:17:20 -07:00
Alex Vandiver
d888bb3df2 error-bot: Remove ERROR_BOT support.
This isn't sufficiently useful to keep the added complexity.  Users
should use the email error reporting, or set up Sentry error
reporting.
2023-04-13 14:59:58 -07:00
Alex Vandiver
db07b8668f error_notify: Consolidate email and zulip codepaths. 2023-04-13 14:59:58 -07:00
Alex Vandiver
daba72c116 error_notify: Drop any remaining browser-side errors in RabbitMQ queue. 2023-04-13 14:59:58 -07:00
Alex Vandiver
e536a14b61 report_error: Remove API endpoint for client error reporting. 2023-04-13 14:59:58 -07:00
Alex Vandiver
cb7bc1b7b9 report_error: Remove reference to old non-existant path. 2023-04-13 14:59:58 -07:00
Alex Vandiver
2d5c678614 blueslip: Only show in dev mode, or report to Sentry.
This removes the production reporting to `/json/report/error` upon
`blueslip.error`, and replaces it with reporting to Sentry, if
enabled.  Sentry provides better reporting and grouping for exceptions
than the email- and `#errors`-reporting provided by the
`/json/report/error` endpoint.

The development behaviour of rendering `blueslip.error` messages and
stacktraces immediately, and stopping execution, is preserved.

To better chain exception information, the whole previous exception is
passed to `blueslip.error`, not just the stack, and the second
parameter is formalized to be an object to map to Sentry's "context"
concept.
2023-04-13 14:59:58 -07:00
Alex Vandiver
f9f7c7b114 docs: Document Sentry frontend reporting. 2023-04-13 14:59:58 -07:00
Alex Vandiver
7152278463 blueslip: Remove unused blueslip.timings store.
This was a write-only store which was never accessed.
2023-04-13 14:59:58 -07:00
Alex Vandiver
6882ec8087 blueslip: Remove unused preview_node.
It is unused, and an XSS waiting to happen if misused.
2023-04-13 14:59:58 -07:00
Alex Vandiver
52c4cae239 blueslip: Remove unused ui_message / show_ui_msg codepath.
This was last used in 71e14674aa, a decade ago.
2023-04-13 14:59:58 -07:00
Alex Vandiver
1833afee6a js: Enable cross-origin error debugging with crossorigin="anonymous".
If the script comes from a different origin than the requesting page,
and is not marked `crossorigin="anonymous"`, the `window.onerror`
handler receives no information other than "Script error." in the
event of a runtime error.

This effectively silences blueslip errors in development if the user
is developing on a remote host (such as a DigitalOcean droplet), since
static resources are served from `hostname.zulipdev.org`, and the
realm is served from `realmname.hostname.zulipdev.org`.  It also
silenced blueslip reporting in production for any non-default (non-"")
realms.  Sentry reporting, Vagrant developments, and truly ancient or
insecure browsers were unaffected.

Add the necessary `crossorigin="anonymous"` attribute to the
`<script>` tag to allow blueslip access to this error information.
2023-04-13 14:59:58 -07:00
Joelute
a96cfb58bd timerender: Remove "Active just now" user status.
Currently, we only show the "Active just now" status once a user has gone
offline within the last 2 minutes. This ends up never showing up the
threshhold which the client marks an user as user is longer than 3 minutes.
Thus deemingthe user status as useless. After a discussion on CZO, it was
decided that we should remove this status altogether as the phrasing doesn't
make sense as well.
2023-04-13 14:59:08 -07:00
Joseph Ho
1e98a659c1 timerender: Revert extra changes to time in recent conversations.
In #25012, which was intended to only modify the buddy list, we
accidentally changed the rendering of times for several other code
paths, including recent conversations, that were using the
last_status_from_time function, whose name really suggested it only
was used for the buddy list.

Extract a new function with a better name for the more common relative
time use case.
2023-04-13 14:59:08 -07:00
PALASH BADERIA
85029d604a tippy: Use delay on all compose and message feed tooltips.
Currently, most of the Tippy tooltips on icons in both the message feed
and the compose box have a delay, so they don't appear immediately
on hover, which can be distracting.

This commit adds this same delay to a few elements in these components
that had an inconsistent essentially 0 delay; the buttons located on the right side
of the compose box as well as the messagebox copy codeblock button tooltip.

Fixes part of #24825.
2023-04-13 13:16:18 -07:00
Daniil Fadeev
a385f65126 tooltips: Fix text overflowing. 2023-04-13 11:29:11 -07:00
sayamsamal
9f6f77f6bc icons: Change bot icon from GitHub logo to Google material icon.
We currently use the GitHub logo to show the bots settings in both
personal and organization settings. This icon is not a correct
representation since we use have support for several different bots
including but not limited to a GitHub integration bot.

This commit replaces the GitHub logo with Smart Toy material icon
from Google, while also adding the required licencing details at
docs/THIRDPARTY.

Part of #19797.
2023-04-13 10:47:09 -07:00
Sahil Batra
c29ccb6a3f app_components: Refactor css from stream-privacy-type-icon.
This commit refactors the CSS for stream-privacy-type-icon
element to avoid duplication.
2023-04-13 10:46:14 -07:00
Sahil Batra
2b84b86027 templates: Fix vertical alignment of globe icon.
This commit fixes the vertical alignement of globe icon in
inline_decorated_stream_name template by setting it using
relative units instead of px so that it is better aligned
at multiple places with different sizes.
2023-04-13 10:46:14 -07:00
Sahil Batra
66b6151f61 dropdown_list_widget: Add privacy icons for stream options.
This commit adds privacy icons before the stream names in
dropdown-list widget for "New user announcements",
"New stream announcements" settings and for stream dropdown
in "Move message" and "Move topic" modal.

Fixes part of #22355.
2023-04-13 10:46:14 -07:00
Sahil Batra
067c71adc4 templates: Use new lock and hashtag icons for stream privacy.
This commit updates inline_decorated_stream_name template to
use the new lock and hashtag icons for stream privacy added
in 8c744752.
2023-04-13 10:46:14 -07:00
Anders Kaseorg
b3a185103d ruff: Enable new lints INT, PYI.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-12 17:32:38 -07:00
Anders Kaseorg
bb2c0ad3bf ruff: Enable Django rules.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-12 17:32:38 -07:00
Anders Kaseorg
0a3dc8a944 ruff: Fix DJ012 Order of model's inner classes, methods, and fields.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-12 17:32:38 -07:00
Alex Vandiver
cdaf12da44 jinja2: Make sure that 500 pages have support_email set. 2023-04-12 16:41:07 -07:00
Daniil Fadeev
40f0663d9d emails: Fix background-color styling.
This issue was introduced after we changed the library we use for
inlining CSS into email HTML. For some reason, the styles in
email.css were not applied earlier but were applied after we
migrated to css-inline. With this commit, we have fixed the
regression in background-color of email body.

Fixes #25083.
2023-04-12 15:48:32 -07:00
Daniil Fadeev
f5190ea4de emails: Fix footer styling.
This issue was introduced after we changed the library we use for
inlining CSS into email HTML. For some reason, the styles in
email.css were not applied earlier but were applied after we
migrated to css-inline. With this commit, we have fixed the
regression in footer styles.

Fixes part of #25083
2023-04-12 15:48:32 -07:00
evykassirer
b07bc23e07 upload: Separate uploads into one upload bar per file.
Fixes #24287.
2023-04-12 15:42:07 -07:00
evykassirer
4e7f9100fc upload: Rename hide_upload_status to hide_upload_banner.
This will be clearer naming for when there are multiple banners,
but is likely a more intuitive name even for the current state
of the code.
2023-04-12 15:42:07 -07:00
Joelute
be38730d05 time_picker: Set minutes to zero in global time picker.
Usually when a user uses the time picker, they're most likely going to
set the time to the hour rather than the current minute. These changes
will set the minutes to zero whenever we are opening the global time
picker.

Fixes: #23874.
2023-04-12 15:39:49 -07:00
Alex Vandiver
d0fc3f1c2e puppet: Add prod hooks to push zulip-cloud-current and notify CZO. 2023-04-12 11:36:33 -07:00
Lauryn Menard
8552ff677d search: Improve suggestions for is:resolved and group-pm-with.
Improves suggestions to not include `is:resolved` for searches
that have already specified a narrow with direct messages, since
there are no topics for direct messages. And improves suggestions
for searches that already have `is:resolved` to not include options
that narrow to direct messages.

Improves suggestions to not include `group-pm-with` for searches
that have already specified a narrow for stream messages. And
improves suggestions for searches that already have `group-pm-with`
to not include options that narrow to stream messages.
2023-04-12 11:32:52 -07:00
Lauryn Menard
b9023db04e node-tests: Remove mock of topic_list in topic_list_data.test.
With commit f0d1332ba2, we no longer need to mock `topic_list.js`
in the `topic_list_data` node test. Instead, we can pass a string
directly to that function. The default is an empty string unless
there is a search input. Also, updates the default of the zoom to
be false instead of undefined in the tests.
2023-04-12 11:30:56 -07:00
Anders Kaseorg
9ed1c79f1b dependencies: Downgrade autosize to 5.0.2 to fix scrollbar regression.
https://chat.zulip.org/#narrow/stream/9-issues/topic/compose.20box.20scrollbars/near/1531138

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-11 21:21:34 -04:00
Tim Abbott
c43d551c5f Revert "markdown: Fix lists with 3+ digit markers retaining alignment for 2 digits."
This reverts commit d0f9e23ec6.

This didn't work correctly for lists containing more complex syntax inside.
2023-04-11 16:07:17 -07:00
Alex Vandiver
f34509bbdd tippyjs: Only destroy tippy popups if they exist at all. 2023-04-11 14:34:53 -07:00
N-Shar-ma
4e2931cefd compose: Disable "Message X" button for DMs when DMs are not allowed.
When in a private narrow, the "Message X" button is disabled if direct
messages are not allowed in the organisation and the current recipient
is not a bot.

Note that when the recipient is a user group with 1, more or all bots,
the button is disabled then too as such PMs are not allowed. Only when
the recipient is a single bot, then it's not disabled, as DMs with one
bot are allowed even in organisations where DMs are disabled.
2023-04-11 11:35:37 -07:00
Sahil Batra
6e4c844907 tests: Fix comment about number of database queries.
This commit fixes the comment about number of database queries
when moving message from muted topic to mention clearly about
the number of queries added due to original topic being muted.

We do not include the queries that is executed to check whether
the topic is muted or not, as they will be executed in all cases.
2023-04-11 11:07:23 -07:00
Sahil Batra
f9eff1c478 stream_popover: Disable topic input in "Move topic" modal.
This commit adds code to disable the topic input in "Move topic"
modal if user cannot edit topics as per edit_topic_policy setting.
We do not check time-based permissions here as the first message
of the object may not be available. This commit also fixes a small
typo in the comment for that code along with updating the comment
to mention about disabling topic input.
2023-04-11 11:07:23 -07:00
Sahil Batra
6dc54d3738 message_edit: Show modal when trying to move older messages.
If user tries to move messages older than the allowed time limit,
we show a confirmation modal stating that the older messages will
not be moved and only the alloed messages are moved if user clicks
on "Confirm" button.
2023-04-11 11:07:23 -07:00
Sahil Batra
bd7f728796 message: Don't allow moving messages that have passed the time limit.
We previously allowed moving messages that have passed the time limit
using "change_all" value for "propagate_mode" parameter. This commit
changes the behavior to not allow moving messages (both stream and
topic edit) that have passed the time limit for non-admin and
non-moderator users.
2023-04-11 11:07:23 -07:00
Sahil Batra
440f9e397a message_edit: Apply topic edit restrictions to "(no topic)" messages.
Previously, editing topic of "(no topic)" messages was allowed
irrespective of time limit or the "edit_topic_policy" setting.
Since we are working in the direction of having "no topic" messages
feel reasonable, this commit changes the code to not consider them
as a special case and topic editing restrictions apply to them as
well now like all other messages.

We still highlight the topic edit icon in recipient bar without
hovering for "no topic" messages, but it is only shown when user
has permission to edit topics.
2023-04-11 11:07:23 -07:00
N-Shar-ma
61fa24fd5e compose: Have at least 1 new line before and after a giphy gif.
Until now, a giphy gif was inserted in an inline manner, but now we insert
it as a block, with 0 blank lines before and after it.
2023-04-11 10:40:19 -07:00
N-Shar-ma
64ec503994 compose: Have at least 1 new line before and after an attachment.
Until now, an attachment was inserted in an inline manner, but now we
insert it as a block, with 0 blank lines before and after it.
2023-04-11 10:40:19 -07:00
N-Shar-ma
2961da5ea0 compose: Have at least 1 new line before and after a video call link.
Until now, a video call link was inserted in an inline manner, but now
we insert it as a block, with 0 blank lines before and after it.
2023-04-11 10:40:19 -07:00
N-Shar-ma
9d4cec6e87 compose: Make count of new lines inserted around content block customizable.
Until now, we had been inserting a hard-coded number of new lines before
and after a quoted message. Now we replace that with an optional parameter
to make it customizable for different use cases.

This is a preparatory commit for the next commits, which will allow
inserting other elements as a block in the compose box.
2023-04-11 10:40:19 -07:00
Hardik Dharmani
7105a232aa topics_sidebar_actions: Update topics_sidebar to include unmute option.
Updated topics_sidebar_actions.hbs to include a option to add/remove
unmute visibility_policy for a topic is in a muted stream,
if in development environment.

Added 2 new classes sidebar-popover-unmute-topic and
sidebar-popover-remove-unmute for unmute topic option. Also, Renamed
previous sidebar-popover-unmute-topic to sidebar-popover-remove-mute.

Added 4 new click handlersthat uses
user_topics.set_user_topic_visibility_policy() to update
topic's visibility_policy.

Fixes #24244
2023-04-11 09:51:01 -07:00
Hardik Dharmani
aab252f657 user_topics: Update user_topics.js to include all visibility policies.
Updated user_topics.js to include all visibility policies
rather than just mute/inherit visibility policies.

Replaced muted_topics Map with `all_user_topics` Map which has
structure: {stream_id:{topic_name:{date_updated,visibility_policy}}}.

Removed add_muted_topic, remove_muted_topic functions which were
adding/removing topics in muted_topics Map. Added new function
update_user_topics which take parameter stream_id, topic,
visibility_policy, and date_updated(optional) which adds a topic
to all_user_topics with date_updated and visibility_policy,
if visibility_policy is not equal to inherit.
else, removes topic from all_user_topics.

Added get_topic_visibility_policy which returns visibility_policy
if stream_id is not undefined else return false.

Added 2 helper functions is_topic_muted and is_topic_unmuted which
uses get_topic_visibility_policy and return true if topic is
muted and unmuted respectively else return false.

Replaced switch case statement which was using add_muted_topic
and remove_muted_topic functions in set_user_topic with new function
update_user_topics.

Fixes #24244
2023-04-11 09:51:01 -07:00
Hardik Dharmani
46cabdd59e user_topics: Use new API endpoint to update topics_visibility_policy.
Removed functions mute_topic and unmute_topic in muted_topics_ui.js
which were using old API endpoints to mute/unmute topics.

In user_topics.js added new function set_user_topic_visibility_policy
which uses new API endpoint `/user_topics` to update the topic's
visibility_policy to visibility_policy passed to
set_user_topic_visibility_policy function as a parameter.

In functions toggle_topic_mute and mute_or_unmute_topic, replaced
the calls of mute_topic and unmute_topic with the new
user_topics.set_user_topic_visibility_policy function.

Added "web/src/user_topics.js" in EXEMPT_FILES in test-js-with-node
as adding function `set_user_topic_visibility_policy` resulted in
user_topics.js losing 100% test coverage.

Fixes #24244
2023-04-11 09:51:01 -07:00
Hardik Dharmani
83fae2f710 user_topics: Rename global map visibility_policy to all_visibility_policies.
Fixes #24244
2023-04-11 09:51:01 -07:00
Sahil Batra
e010cb3d5a settings_config: Add "Nobody" group option to system_user_groups_list.
This commit adds "Nobody" group option to system_user_groups_list in
settings_config.js. We do not allow can_remove_subscribers_group to
be set to "Nobody" group currently, but it is nice to add support
for this here since it will be used in more settings in future.
2023-04-11 09:02:09 -07:00
Sahil Batra
9278a219ea user_groups: Refactor get_realm_user_groups_for_dropdown_list_widget.
This commit refactors get_realm_user_groups_for_dropdown_list_widget
function to use "group_permission_settings" module instead of
passing variables like "allow_internet_group", etc. individually
for each settings.

We lose some test coverage due to this commit, but that would be
fixed when we add some more group-based settings and allow groups
other than system groups in the group based settings.
2023-04-11 09:02:09 -07:00
Sahil Batra
a5cbf95c12 settings: Add group_permission_settings.ts.
This commit adds a new module group_permission_settings.ts
which is used to define configuration options like
allow_owners_group, allow_nobody_group, etc. for group-based
settings similar to GroupPermissionSetting dataclass we have
in backend.
2023-04-11 09:02:09 -07:00
Sahil Batra
66693f2101 user_groups: Add allow_nobody_group to access_user_group_for_setting.
This commit adds allow_nobody_group parameter to
access_user_group_for_setting with a default value of True.
2023-04-11 09:02:09 -07:00
Sahil Batra
5237e9008f types: Add allow_nobody_group field to GroupPermissionSetting. 2023-04-11 09:02:09 -07:00
Aman Agrawal
8c744752ed stream_privacy: Use new lock and hashtag icons.
This commit doesn't modify the lock and hashtag icon in settings.
2023-04-10 23:41:30 -07:00
Aman Agrawal
bc8d136d5c css: Implement new design for recipient row.
This mostly includes the CSS changes for recipient row design,
most of the HTML and JS changes are present in previous commits to
this.
2023-04-10 23:41:30 -07:00
Aman Agrawal
3711d0ae69 message_list: Update recipient bar color on theme change. 2023-04-10 23:41:30 -07:00
Aman Agrawal
4b35164bca recipient_row: Add a user icon at start of PMs. 2023-04-10 23:41:30 -07:00
Aman Agrawal
819bf9b2aa recipient_row: Add > icon between stream name and topic. 2023-04-10 23:41:30 -07:00
Aman Agrawal
7e473003a6 recipient_row: Use a dimmed stream color for background.
Following important changes are being made here:
* color_class lib is removed since it not used anywhere now.
* We don't need the `dark_background` class since the background
  color is already adjusted based on color scheme. So, all
  instances of it being used is removed.
2023-04-10 23:41:30 -07:00
Aman Agrawal
023584e049 recipient_row: Set color of privacy icon as a shade of stream color. 2023-04-10 23:41:30 -07:00
Aman Agrawal
ff6d04f88c drafts: Use generic template to show stream icon. 2023-04-10 23:41:30 -07:00
Aman Agrawal
12ac459379 recipient_row: Use generic template to show stream icon.
stream_privacy template has conditions to show stream privacy icon
for all the cases, so we use it here since we also want to show
`#` icon for public streams.
2023-04-10 23:41:30 -07:00
Aman Agrawal
17a4140773 ui_util: Extract listener for change in preferred-color-scheme.
This will further be used for recipient bar colors since they
have different colors in dark and light color scheme.
2023-04-10 23:41:30 -07:00
Aman Agrawal
397ca97060 stream_color: Remove redundant update_historical option.
This option has no significance anymore. Both the callers to this
function pass it as `true`, so it is always true when it is being
run.
2023-04-10 23:41:30 -07:00
Aman Agrawal
e37f5082de recipient_row: Remove message-header-wrapper div.
This div serves no purpose. Just removed the div and shifted
corrected alignment for other divs.
2023-04-10 23:41:30 -07:00
N-Shar-ma
d0f9e23ec6 markdown: Fix lists with 3+ digit markers retaining alignment for 2 digits.
Until now, lists with 3+ digit markers would have their beginnings cut off
to align with 2 digit markers. We fix that by having custom styling for
markers where we align markers only up to 2 digits, and let larger numbers
take up more space pushing the list item content forward as required to fit
the marker.
2023-04-10 21:54:51 -07:00
Alya Abbott
aa65813294 email: Rewrite followup_day2 email.
Keep the focus of the email the same (topics), but improve how
the information is presented.
2023-04-10 17:44:18 -07:00
Lauryn Menard
2654af3675 welcome-emails: Separate context for followup day1 and day2.
Separates the context dictionary that is used for `send_email` for
the `followup_day1` and `followup_day2` emails.

Prep commit for updates to `followup_day2` email.
2023-04-10 17:44:18 -07:00
Alex Vandiver
3efc0c9af3 workers: Rewrite missedmessage_emails with a worker thread.
The previous implementation leaked database connections, as a new
thread (and thus a new thread-local database connection) was made for
each timer execution.  While these connections were relatively
lightweight in Python, they also incur memory overhead in the
PostgreSQL server itself.  The logic for managing the timer was also
unclear, and the unavoidable deadlock in the stopping logic was rather
unfortunate.

Rewrite with one explicit worker thread which handles the delayed
message sending.  The RabbitMQ consumer creates the database rows, and
notifies the worker to start its 5s timeout.  Because it is controlled
by a condition variable, it does not hold the lock while waiting, and
can be notified to exit.
2023-04-10 17:38:08 -07:00
Lakshay Mittal
4478f8cc55 local echo: Fix tooltip over locally echoed spinner.
Despite the timestamp being hidden while sending the message, the link
on the timestamp (message url) was still hoverable and clickable, and
had a tooltip.

Here we disable the tooltip, but
https://github.com/zulip/zulip/issues/25069 remains open for the link
part.
2023-04-10 17:36:26 -07:00
Lakshay Mittal
e86fe4e57c messages: Add spinner for messages sent on slow connections.
At times, it might get confusing for users who are on
slow connections if their messages has not been sent
even after 5s. Including a spinner that will only show
up after 5 seconds has elapsed will keep user informed
about their slow connection.

5s is set as minimum time because showing up a spinner
before than might be distracting for users on normal
connections.

Fixes: #19328.
2023-04-10 17:36:26 -07:00
Mateusz Mandera
24d9d3d90c support: Add option to upgrade an org to Plus plan on /activity/support.
This is so that we don't need ops to run the
manage.py switch_realm_from_standard_to_plus_plan command on the server
to handle these upgrades.
2023-04-10 17:32:45 -07:00
Mateusz Mandera
1a15449e16 support: Rename "downgrade plan" to "modify plan".
Just a naming change to facilitate adding more options to that <select>
- mainly, an option to upgrade the plan to Plus.
2023-04-10 17:32:45 -07:00
Ujjawal Modi
10adb6c183 settings: Reword permissions notice banners.
Reworded the permissions notice banners on
adding bots panel,user groups panel and custom
emoji panel.
2023-04-10 16:28:12 -07:00
Ujjawal Modi
c89ca2e862 settings: Improve permissions notice banners.
This commit changes behaviour of banners
in user groups panel and emoji settings panel
under organization settings.

Now banner in these panels is only
shown when user is an administrator or user
does not have permissions to perform actions
on panel.

Fixes #24157.
2023-04-10 16:28:12 -07:00
Elizabeth Funk
bff6be22eb flatpickr: Add check for undefined 'hotkey' to fix type errors.
The flatpickr keyboard UI functions are very confusing. We previously
had a bug where typing keys that were not keyboard shortcuts or
numeric values could throw an exception due to accessing hotkey.name
when hotkey was undefined.

Fix this, and add a bundle of comments improving the documentation of
this confusing code path. Unfortunately, the implementation is still
somewhat mysterious; we leave debugging that to future work.

Fixes #24773.

Co-authored-by: Tim Abbott <tabbott@zulip.com>
2023-04-10 12:56:30 -07:00
Tim Abbott
c76adf1e89 compose: Ensure compose box is focused after inserting any content.
In `insert_syntax_and_focus`, we now explicitly focus the textarea
before inserting the content, rather than relying on insert() to do
this for us. A comment is added documenting the quirks of insert that
require this.

This fixes a bug where the compose box might not be focused after
inserting video call links, emojis from the picker, GIPHY gifs, and
some other buttons.
2023-04-10 12:46:44 -07:00
AcKindle3
ff48f3c489 templates: Use root_domain_url Django templates.
Per the issue #25045, this commit changes some occurences of `uri`
appeared in variable `root_domain_uri`. Files affected are some
html files that used this variables and a backend file
`context_processors.py` that set it as a key.
2023-04-10 10:26:48 -07:00
AcKindle3
02364dd69f web: Use uri instead of url.
Following the issue #23380 and PR #25038, this commit changes all
occurences of `uri` into `url` in all comments, local variables,
handlebars templates (.hbs) function names and their callers in
all `.js` and `.ts` files.
2023-04-10 10:26:48 -07:00
Lakshay Mittal
5a89d3b4d2 search: Fix selecting all messages from recent conversations.
When there are no operators to narrow down
the search to, pass into `deactivate()` if
we're in `recent conversations`.

If we are, it will go to `all messages`.

This is done by using `is_visible()`
function of `recent_topics_util`.
2023-04-10 10:24:00 -07:00
Lauryn Menard
af0b450817 templates: Update invite_users_modal.hbs for undefined variables.
Removes undefined `time_input` from  `invite_users_modal.hbs`.
The default input value for the expiration custom time limit is
not set until the "custom" option is selected from the dropdown.

Removes the undefined `csrf_input` from the same template. And
imports `csrf.ts` into `invite.js` to get the csrf token and
add it to the request data, which is the current pattern used
in other `/web/src` modules.
2023-04-10 09:07:11 -07:00
sbansal1999
ea2de5b0a4 js: Break cyclic dependency between topic_list and topic_list_data.
This commit breaks the cyclic dependency between "topic_list.js"
and "topic_list_data.js".

It achieves this by passing "search_term" generated by the
"get_topic_search_term" function to "topic_list_data.js" directly
through the function call from "topic_list.js".
2023-04-10 08:55:06 -07:00
Lauryn Menard
f391bfeec6 emails: Add new onboarding email with guide for organization type.
Adds a new welcome email, `onboarding_zulip_guide`, to be sent four
days after a new user registers with a Zulip organization if the
organization has specified a particular organization type that has
a guide in the corporate `/for/.../` pages. If there is no guide,
then no email is scheduled or sent.

The current `for/communities/` page is not very useful for users
who are not organization administrators, so these onboarding guide
emails are further restricted for those organization types to
only go to new users who are invited/registered as admins for the
organzation.

Adds two database queries for new user registrations: one to get
the organization's type and one to create the scheduled email.

Adds two email logs because the email is sent both to a new user
who registers with an existing organization and to the organization
owner when they register a new organization.

Co-authored by: Alya Abbott <alya@zulip.com>
2023-04-10 08:38:09 -07:00
Lauryn Menard
ab00648e3e email: Refactor calculation of delay for scheduled emails.
Refactors the logic for adjusting the delay for sending an email
to not land on a weekend so that it can be used to schedule any
number of onboarding emails we decide to send.

Consolidates duplicate testing into
`zerver/tests/test_email_notifications.py`. The initial test and
function were introduced in commit 610f2cbacf with the test
located in `zerver/tests/test_signup.py`.

Prep commit for adding new welcome / follow up email.
2023-04-10 08:38:09 -07:00
Hardik Dharmani
daad0a6618 navbar: Fix alignment of search_close icon on device width < $sm_min.
This commit fixes the alignment of the `search_close` icon on devices
with a width less than $sm_min (576px) by removing a top padding
of 5px and adjusting the position to top 5px from the previous 4px.
2023-04-10 08:09:18 -07:00
AcKindle3
b0ef8f0822 test: Replace occurences of uri with url.
In all the tests files, replaced all occurences of `uri` with `url`
appeared in comments, local variablles, function names and their callers.
2023-04-08 16:27:55 -07:00
Joelute
946b4e73ca integration: Remove branch names from Gitea edited PR event.
This is a follow up to #24673, we want to modify every webhook events to
follow the same pattern and consistency where branch name should only
show on opened and merged events.
2023-04-07 15:17:23 -07:00
Lauryn Menard
95d48bc2ad topic-list-data: Increase max topics shown in left sidebar.
Incresase the max number of stream topics shown when not zoomed
into the stream for more topics in the left sidebar to be a max
of 8 unread conversations and 12 when there are unreads.
2023-04-07 15:10:24 -07:00
sbansal1999
e1a2789de2 js: Break cyclic dependency between top_left_corner and unread_ui.
This commit breaks the cyclic dependency between "top_left_corner.js"
and "unread_ui.js".

It achieves this by shifting the "animate_mention_changes" function
from "unread_ui.js" to "top_left_corner.js".
2023-04-07 15:04:26 -07:00
Satyam Bansal
338436dfbd integrations: Add Rundeck webhook integration.
Co-authored-by: sbansal1999 <sbansal1999@gmail.com>
2023-04-07 10:13:21 -07:00
brijsiyag
ee1a83996a user-profile: Prevent unintended clicks through profile modal overlay.
When a user opens a profile modal, the overlay is clicked
through in responsive mode, which results in unintended button/link
clicks. This commit removes the causing CSS properties
`pointer-events:none;` which was passing pointer-events to other
elements and `pointer-events:all` which is experimental and do no
effect.
2023-04-07 10:09:04 -07:00
Deekshith S Shetty
fc1477499b hotkey: Toggle gear_menu on clicking g hotkey.
This commit toggles the gear_menu on pressing the `g` keyboard hotkey,
if it's already open.

Fixes: #24417.

Co-authored-by: Tim Abbott <tabbott@zulip.com>
2023-04-07 10:00:41 -07:00
Prakhar Pratyush
d96048b0af test_classes: Rename and refactor 'tornado_redirected_to_list'.
This commit renames the 'tornado_redirected_to_list' context
manager to 'capture_send_event_calls' to improve readability.

It also refactors the function to yield a list of events
instead of passing in a list data structure as a parameter
and appending events to it.
2023-04-07 09:45:26 -07:00
Aman Agrawal
a62fcb1fd9 do_render_buddy_list_tooltip: Don't show tooltip on touch devices.
Read the comment for details.
2023-04-07 09:27:50 -07:00
Aman Agrawal
13e0986091 buddy_list_tooltip: Directly get target node.
On mobile, the tooltip is triggered at the same time when right
sidebar is hidden when user clicks on a user name in the buddy
list. So, `instance.reference` node no longer exists in DOM.
2023-04-07 09:27:50 -07:00
Ujjawal Modi
915084fe82 timerender: Reword user activity info from "Last active:" to "Active".
Fixes #22758.
2023-04-07 09:24:15 -07:00
Sahil Batra
9ccc45b700 dropdown_list_widget: Refactor code to select option using "Enter".
This commit moves the code to select option on pressing "Enter" in
dropdown_keyboard_events as we handle other "keydown" events there.
This change is done for both MultiSelectDropdownListWidget and
DropdownListWidget components.
We also remove the usage of now depreceated "keypress" event with
this change.
2023-04-07 09:19:39 -07:00
Sahil Batra
35433c02b3 dropdown_list_widget: Select first option on pressing enter in search.
This commit updates the code for MultiSelectDropdownListWidget and
DropdownListWidget components to select the first option on pressing
enter when focus is on search input.

Fixes #25024.
2023-04-07 09:19:39 -07:00
Sahil Batra
fc251fd464 dropdown_list_widget: Rename dropdown_focus_events.
This commit renames dropdown_focus_events function in
DropdownListWidget and MultiSelectDropdownListWidget
components to dropdown_keyboard_events, as we will be
adding other keyboard events to select an option in
this function further commits.
2023-04-07 09:19:39 -07:00
Lauryn Menard
b821c90f44 narrow-filter: Update Filter.describe_is_operator for "resolved".
Updates `Filter.describe_is_operator` to use switch/case instead
of if/else and adds case for "is:resolved" narrow so that it is
not shown as invalid when used with other search narrow filters.
2023-04-07 09:18:52 -07:00
Lauryn Menard
982a37aece tests-narrow: Remove unneeded helper function in narrow.test.js.
In commit aa002f5c6d, a handlebars template was created for empty
narrow feed messages, which removed a number of div element ids,
and updated `narrow_banner.show_empty_narrow_message` to first
empty the main empty narrow div of any previous message content.

Removes the helper function for hiding the empty narrow messages
as `narrow_banner.show_empty_narrow_message` should empty the
empty message div of any text before rendering the updated empty
narrow for the new empty narrow banner text.

Also, cleans up a missed instance of 'uri' from commit b22578f
in the same test.
2023-04-07 09:18:16 -07:00
Alex Vandiver
e3f6e810dc export-search: Support writing out attachments as well. 2023-04-07 09:13:48 -07:00
Alex Vandiver
e408f069fe uploads: Add a method to copy attachment contents out. 2023-04-07 09:13:48 -07:00
Alex Vandiver
885334a3ad export-search: Support CSV output, trim down output fields. 2023-04-07 09:13:48 -07:00
Alex Vandiver
bde978d5b1 export-search: Move topic into recipient field. 2023-04-07 09:13:48 -07:00
Alex Vandiver
26bc112adc export-search: Add a --recipient filter. 2023-04-07 09:13:48 -07:00
Alex Vandiver
e44ba1bef1 export-search: Write output size before beginning export. 2023-04-07 09:13:48 -07:00
Alex Vandiver
21db267202 export-search: Non-time-limited is fine with a sender. 2023-04-07 09:13:48 -07:00
Alex Vandiver
ae20af84a9 export-search: Realm is required. 2023-04-07 09:13:48 -07:00
Anders Kaseorg
d2af06f4df middleware: Remove ZulipCommonMiddleware patch.
My fix for the relevant performance bug was upstreamed in Django 4.2.

https://code.djangoproject.com/ticket/33700

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-07 09:13:20 -07:00
brijsiyag
95f2ead33d streams: Add an explanatory notice when left panel is empty.
This commit adds a message and link to view or create streams on
empty streams panel. It conditionally renders the message when
there is no stream to show and also when any stream
event (delete,create,subscribe) occurs.

Co-authored-by: Tim Abbott <tabbott@zulip.com>

Fixes #21870.
2023-04-06 19:33:13 -07:00
Akarsh Jain
f122516e7d notifications: Add link to new location of single moved messages.
Improve the Notification Bot by adding a hyperlink to the new location
of a moved single message. The link will make it easier for users to
find the message in its new context.

Fixes #24604.
2023-04-06 19:04:40 -07:00
Ujjawal Modi
d0dbdfa52d user_groups: Send a message on changing user-groups subscribers.
After this commit a notification message is sent to users if they are
added to user_groups by someone else or they are removed from user_groups
by someone else.

Fixes #23642.
2023-04-06 19:03:26 -07:00
Ujjawal Modi
e163e3ced5 user_groups: Refactor the view function used for adding members.
This commit changes the variable names inside the view function
used for adding members to user_groups. This was done for better
readability of code.
2023-04-06 19:03:26 -07:00
Lakshay Mittal
f76ea24988 style: Fix dropdown icon partially visible on small screens.
The dropdown icon for direct messages is partially visible
on small screens. This was due to removing padding when the
screen size is below a certain size by media query.

The intent of the original code appears to have been to remove top
padding, so make the CSS do just that.
2023-04-06 18:25:09 -07:00
Hardik Dharmani
f41cc29ce3 markdown: Change search and alert word highlight colors.
As part of the redesign project, this highlight colors are changed:

Light theme:
Search highlight yellow: #FFEF95 - hsl(51deg 100% 79%)
Alert highlight orange: #FFC6AE - hsl(18deg 100% 84%)

Dark theme:
Search highlight yellow: #756400 - hsl(51deg 100% 23%)
Alert highlight orange: #98491b - hsl(22deg 70% 35%)

Fixes #24922
2023-04-06 18:13:43 -07:00
Anders Kaseorg
2c20028aa4 requirements: Upgrade Django to 4.2.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-06 17:58:44 -07:00
Anders Kaseorg
52266cbd41 user_groups: Work around django-cte bug with Django 4.2.
https://github.com/dimagi/django-cte/issues/66

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-06 17:58:44 -07:00
Anders Kaseorg
f1925487e8 db: Force use of TimeTrackingCursor to work around Django 4.2 bug.
Effectively revert commit b4cf9ad777 to
work around https://code.djangoproject.com/ticket/34466.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-06 17:58:44 -07:00
atharmohammad
e55f5a1b59 compose: Remove vertical shifts in compose when toggling preview mode.
The vertical shifts in message body was due to the <p> tags it gets when
converted to markdown. Removing the top margin from the first <p> child
and bottom margin from the last <p> child resolves this issue as due to
those default margins in <p> tags there was vertical shifts in message
body.

Fixes: #21276.
2023-04-06 17:57:24 -07:00
AcKindle3
ac4ec8888a ts migration: Convert favicon.js to favicon.ts.
Added type annotations to function parameters, function return
values and local variables. Added neccessary `if` statements to
enforce the objects having proper type before executing the later
operations.

An error type check in the catch block in `update_favicon`
function is added because the statement in the catch block requires
error to be a type `Error` in order to access `error.stack`.
2023-04-06 13:56:59 -07:00
xoldyckk
c575d62d5a ts: Migrate header.js to typescript.
Added strict if block check to make sure `labelID` is defined at
runtime.
2023-04-06 13:27:43 -07:00
Alex Vandiver
7c023042cf puppet: Rotate access log files every day, not at 500M.
Since logrotate runs in a daily cron, this practically means "daily,
but only if it's larger than 500M."  For large installs with large
traffic, this is effectively daily for 10 days; for small installs, it
is an unknown amount of time.

Switch to daily logfiles, defaulting to 14 days to match nginx; this
can be overridden using a zulip.conf setting.  This makes it easier to
ensure that access logs are only kept for a bounded period of time.
2023-04-06 14:31:16 -04:00
Tim Abbott
561daee2a1 puppet: Update declared zmirror dependencies.
Following zulip/python-zulip-api/pull/758/, we're no longer using
python-zephyr, and don't need to build it from source. Additionally,
we no longer need to build a forked Zephyr package, since ZLoadSession
and ZDumpSession were merged in
e6a545e759.
2023-04-06 09:45:06 -07:00
Alex Vandiver
6975417acf puppet: Create zmirror supervisor subdirectory.
To not change the `supervisor.conf` file, which requires a restart of
supervisor (and thus all services running under it, which is extremely
disruptive) we carefully leave the contents unchanged for most
installs, and append a new piece to the file, only for the zmirror
configuration, using `concat`.
2023-04-06 09:45:06 -07:00
palashb01
e646ed957b css: Refactor the topic_menu sidebar popover css.
This commit adds the <p> tag used for the topic name inside the
Tippy CSS for dark theme.
2023-04-05 16:47:39 -07:00
palashb01
af3e62b2ae popovers: Refactor topic_menu visible check and hide logic.
This commit refactors the topic_menu visible check and hide logic,
since we have already migrated the popover from stream_popover.js.
This last bit of code related to topic_menu is also migrated to
popover_menus.js, and the code is refactored to use the new logic,
which is more common for the popover_menus.js system.

To hide the popover, one possible solution could be to use the
hideAll method from TippyJS. However, this could lead to
unintentional behavior for all the popovers. To prevent this, the
hide method is used for the topic_menu only.
2023-04-05 16:47:39 -07:00
palashb01
dbd945eb96 popovers: Refactor keyboard handling for the topic_menu popover.
This commit removes the use of a separate keyboard handler for
the topic_menu, as we are already using a common keyboard handler
for all Tippy popovers.
2023-04-05 16:47:39 -07:00
palashb01
28f2124feb popovers: Migrate the topic_menu popover to Tippy.
This commit migrates the topic_menu popover from stream_popover.js
to popover_menus.js. Since the data required for rendering is large,
it has been moved inside popover_menus_data.js to improve code
readability.

Getting the link of the topic for the clipboardJS inside the onMount
instance was not working with the existing method. To make it easier
to work with, a new attribute, data-clipboard-text, is added to the
'Copy link to topic' anchor tag. This allows the clipboardJS to catch
the URL. The value of data-clipboard-text is sent from popover_menus.js
to the topic_sidebar_actions template.

Fixes: #23891
2023-04-05 16:47:39 -07:00
palashb01
84a5c1907f popovers: Export stream_popover.elem_to_stream_id.
This is a prep commit for migrating the topic popover to a Tippy
popover.

'elem_to_stream_id' function is used for the topic menu to find the
stream_id of the target topic menu.
2023-04-05 16:47:39 -07:00
Alex Vandiver
c519ba40fd hooks: Add a push_git_ref post-deploy hook. 2023-04-05 18:51:55 -04:00
Alex Vandiver
8a771c7ac0 hooks: Add a hook to send a Zulip before/after the deploy. 2023-04-05 18:51:55 -04:00
Alex Vandiver
377f2d6d03 hooks: Add a common/ directory and factor out common Sentry code. 2023-04-05 18:51:55 -04:00
Alex Vandiver
f4d70a2e37 hooks: Resolve version strings to commit SHAs, and pass in via the env. 2023-04-05 18:51:55 -04:00
Alex Vandiver
ecfb12404a hooks: Switch to passing values through the environment. 2023-04-05 18:51:55 -04:00
Alex Vandiver
160a917ad3 hooks: Add a helper to install a single static file. 2023-04-05 18:51:55 -04:00
Alex Vandiver
0c13bacb89 sentry: Switch shell variables to lower-case. 2023-04-05 18:51:55 -04:00
sbansal1999
f47a1c67a6 webhooks: Add body to PR Review Event message for GitHub Integration.
This commit passes the body of the PR Review as the message to
the helper function that generates the message to be sent by the
GitHub Integration.

Previously when a PR Review was done the message sent would just
include the link of the review but the message didn't include the
body the review. After this commit, the message also includes the
body of the review.

Fixes #24676
2023-04-05 15:48:26 -07:00
Ishita Gupta
8951319e98 refactor: Refactor progress_bar CSS to remove redundant code.
In this commit we remove any explicit references to the polyfills and
replace all the color codes to the hsl() format. We also remove any
other redundant code, after testing for any regressions.
2023-04-05 15:47:14 -07:00
Ishita Gupta
fc03c19ba2 bootstrap: Move progress bar styling out of bootstrap CSS.
In this commit, we move the progress bar styling out of the legacy
bootstrap.css and move it to a dedicated CSS file. This is a step
forward towards the ongoing effort to remove the use of Bootstrap
from the Zulip codebase.

The new CSS file, progress_bar.css, is added to common.ts, since it
is used in both the webapp and portico pages.

Fixes #23628.
2023-04-05 15:47:14 -07:00
Anders Kaseorg
b533cd979e templates: Enable Handlebars strict mode.
https://handlebarsjs.com/api-reference/compilation.html

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-05 15:23:54 -07:00
Daniil Fadeev
2f203f4de1 emails: Inline CSS in emails in build_email.
Previously, we had an architecture where CSS inlining for emails was
done at provision time in inline_email_css.py. This was necessary
because the library we were using for this, Premailer, was extremely
slow, and doing the inlining for every outgoing email would have been
prohibitively expensive.

Now that we've migrated to a more modern library that inlines the
small amount of CSS we have into emails nearly instantly, we are able
to remove the complex architecture built to work around Premailer
being slow and just do the CSS inlining as the final step in sending
each individual email.

This has several significant benefits:

* Removes a fiddly provisioning step that made the edit/refresh cycle
  for modifying email templates confusing; there's no longer a CSS
  inlining step that, if you forget to do it, results in your testing a
  stale variant of the email templates.
* Fixes internationalization problems related to translators working
  with pre-CSS-inlined emails, and then Django trying to apply the
  translators to the post-CSS-inlined version.
* Makes the send_custom_email pipeline simpler and easier to improve.

Signed-off-by: Daniil Fadeev <fadeevd@zulip.com>
2023-04-05 12:22:29 -07:00
Alex Vandiver
7202a98438 cron: Move fetch-tor-exit-nodes to not on the hour.
We see connection timeouts and other access issues when run exactly on
the hour, either due to load on their servers from similar cron jobs,
or from operational processes of theirs.

Move to on the :17s to avoid these access issues.
2023-04-05 12:20:30 -07:00
Anders Kaseorg
54b08ee30b setup-apt-repo: Fix GPG check of groonga-apt-source-*.deb.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-05 12:19:06 -07:00
Anders Kaseorg
c2458bfe94 help: Fix TypeError on missing article pages.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-05 12:18:41 -07:00
Lalit
fd830ce453 popover_menus: Change the selector .enter_sends for opening tippyjs popover.
Changed the `.enter_sends` css selector for launching tippyjs popover from
`compose.hbs` because it was colliding with `.enter_sends` selector present in
`organization_user_settings_defaults.hbs`.

Before this change when an admin tried to change user realm default setting of
`enter_sends` it was opening a tippyjs popover despite being a checkbox and it
was hitting `/json/settings` endpoint instead of `/json/realm/user_setting_defaults`.
2023-04-05 12:05:44 -07:00
Alex Vandiver
d0a8ae0c87 hashchange: Handle when history object has been marked dead. 2023-04-05 10:29:31 -07:00
Lalit
bbf2f5f91f ts: Convert emoji.js to TypeScript.
Converted `emoji.js` to TypeScript by adding relevant type definitions,
also modified `target` option in our tsconfig to 'ESNext' so that types
for object methods like `hasOwn` which is being used in `emoji.js` are
included.
2023-04-05 10:29:01 -07:00
Lalit
6f46c4830f emoji: Refactor get_emoji_details_by_name function.
This is a prep commit for typescript migration of `emoji.js`. This
commit refactors the code for generating emoji rendering details such
that we avoid writing an ugly code which will involve writing an
incomplete type object when we migrate to TypeScript.
2023-04-05 10:29:01 -07:00
Anders Kaseorg
30204ed694 dependencies: Upgrade JavaScript dependencies.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-04 18:27:11 -07:00
Anders Kaseorg
a0447bbb5f markdown_help: Fix reference to possibly missing variables.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-04 12:56:18 -07:00
Alex Vandiver
a77c89f610 docs: Always suggest start-server, now that it is safer. 2023-04-04 10:58:56 -07:00
Alex Vandiver
dd5dbcabcb start-server: More gracefully handle only starting part of the server.
While the previous commit handles the common case of all of the server
being started already, it still produces ERROR output lines from
supervisorctl when most of the server is already running.  Take the
case where one worker is stopped:

```
$ supervisorctl stop zulip-workers:zulip_events_deferred_work
zulip-workers:zulip_events_deferred_work: stopped
$ ./scripts/start-server
2023-04-04 15:50:28,505 start-server: Running syntax and database checks
System check identified no issues (15 silenced).
2023-04-04 15:50:31,977 start-server: Starting Tornado process on port 9800
zulip-tornado:zulip-tornado-port-9800: ERROR (already started)
2023-04-04 15:50:32,283 start-server: Starting Tornado process on port 9801
zulip-tornado:zulip-tornado-port-9801: ERROR (already started)
2023-04-04 15:50:32,592 start-server: Starting django server
zulip-django: ERROR (already started)
2023-04-04 15:50:33,340 start-server: Starting workers
zulip-workers:zulip_events_deferred_work: started
zulip_deliver_scheduled_emails: ERROR (already started)
zulip_deliver_scheduled_messages: ERROR (already started)
process-fts-updates: ERROR (already started)
2023-04-04 15:50:34,659 start-server: Done!
Zulip started successfully!
```

More gracefully handle these cases:
```
$ ./scripts/start-server
2023-04-04 15:52:39,815 start-server: Running syntax and database checks
System check identified no issues (15 silenced).
2023-04-04 15:52:43,270 start-server: Starting Tornado process on port 9800
2023-04-04 15:52:43,287 start-server: zulip-tornado:zulip-tornado-port-9800 already started!
2023-04-04 15:52:43,287 start-server: Starting Tornado process on port 9801
2023-04-04 15:52:43,300 start-server: zulip-tornado:zulip-tornado-port-9801 already started!
2023-04-04 15:52:43,300 start-server: Starting django server
2023-04-04 15:52:43,316 start-server: zulip-django already started!
2023-04-04 15:52:43,793 start-server: Starting workers
zulip-workers:zulip_events_deferred_work: started
2023-04-04 15:52:45,111 start-server: Done!
Zulip started successfully!
```
2023-04-04 10:58:56 -07:00
Alex Vandiver
cb097760b9 start-server: Make start-server a clean explicit no-op if already running.
Currently, the output from `start-server` if the server is already
running is potentially confusing, since it says ERROR several times:

```
$ ./scripts/start-server
2023-04-04 15:35:12,737 start-server: Running syntax and database checks
System check identified no issues (15 silenced).
2023-04-04 15:35:16,211 start-server: Starting Tornado process on port 9800
zulip-tornado:zulip-tornado-port-9800: ERROR (already started)
2023-04-04 15:35:16,528 start-server: Starting Tornado process on port 9801
zulip-tornado:zulip-tornado-port-9801: ERROR (already started)
2023-04-04 15:35:16,844 start-server: Starting django server
zulip-django: ERROR (already started)
2023-04-04 15:35:17,605 start-server: Starting workers
zulip_deliver_scheduled_emails: ERROR (already started)
zulip_deliver_scheduled_messages: ERROR (already started)
process-fts-updates: ERROR (already started)
2023-04-04 15:35:18,923 start-server: Done!
```

Catch the simple common case where all of the services are already
running, and output a clearer success message:

```
$ ./scripts/start-server
2023-04-04 15:39:52,367 start-server: Running syntax and database checks
System check identified no issues (15 silenced).
2023-04-04 15:39:55,857 start-server: Zulip is already started; nothing to do!
```
2023-04-04 10:58:56 -07:00
Alex Vandiver
5b9fb582e2 docs: Remove now-unnecessary reactivate_realm step after import.
113a8c4782 made this step unnecessary.
2023-04-04 10:58:56 -07:00
Lauryn Menard
e95b784f6e backend-auth: Add user ID to fetch api key responses.
Adds the user ID to the return values for the `/fetch_api_key` and
`/dev_fetch_api_key` endpoints. This saves clients like mobile a
round trip to the server to get the user's unique ID as it is now
returned as part of the log in flow.

Fixes #24980.
2023-04-04 10:54:49 -07:00
Anders Kaseorg
52f7eb4463 dependencies: Upgrade JavaScript dependencies.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-04 10:54:01 -07:00
Anders Kaseorg
620b1aa1bd Revert "ts: Convert css_variables.js to TypeScript."
This reverts commit 5f4bdfe6bc (#24630).

This was causing Webpack to trigger type checking with the TypeScript
compiler, which is very expensive.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-04 10:54:01 -07:00
Anders Kaseorg
e9c1d72771 stylelint: Fix media-feature-range-notation.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-04 10:54:01 -07:00
Anders Kaseorg
0d4dcc8583 install-transifex-cli: Upgrade Transifex CLI from 1.6.5 to 1.6.7.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-04 00:16:04 -07:00
Anders Kaseorg
a881918a05 requirements: Upgrade Python requirements.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-03 22:39:21 -07:00
Anders Kaseorg
2ce8357009 codespell: Fix newly found typos.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-03 22:39:21 -07:00
Prakhar Pratyush
ab7cd3c40a user_topics: Update test to verify end-to-end behaviour.
This commit updates 'test_user_ids_unmuting_topic' to make
an api_post call to '/api/v1/user_topics' instead of
calling the internal function 'do_set_user_topic_visibility_policy'
to verify the logic.
2023-04-03 22:31:49 -07:00
Prakhar Pratyush
f012d079c3 user_topics: Add a new endpoint to update visibility_policy.
This commit adds a new endpoint, 'POST /user_topics' which
is used to update the personal preferences for a topic.

Currently, it is used to update the visibility policy of
a user-topic row.
2023-04-03 22:31:49 -07:00
Prakhar Pratyush
0b2fe5b163 user_topics: Rename the 'zerver/lib/user_topics' functions.
This is a prep commit that renames lib functions
so that they can be used while implementing view
for the new endpoint 'POST /user_topics'.

We use a more generic name when removing the visibility_policy of
a topic, i.e., 'access_stream_to_remove_visibility_policy_by_id/name'
instead of 'access_stream_for_unmute_topic_by_id/name' which focused
on removing MUTE from a topic.
2023-04-03 22:31:49 -07:00
Prakhar Pratyush
e33eb45507 user_topics: Update tests to use the 'time_machine' module.
This commit updates the tests to use the 'time_machine'
module for mocking datetime.
2023-04-03 22:31:49 -07:00
Prakhar Pratyush
5c86d3ca9e user_topics: Update tests to verify end-to-end behaviour.
This commit updates the existing tests so that they call
API endpoints instead of internal functions to verify logic.
2023-04-03 22:31:49 -07:00
Mateusz Mandera
7ca08cb84b docs: Link to SCIM docs from SAML instructions. 2023-04-03 17:06:05 -07:00
Tim Abbott
ee673f1f5e docs: Add SCIM page to list of new production/ pages. 2023-04-03 17:06:05 -07:00
Mateusz Mandera
1bfe48bce6 docs: Add ReadTheDocs documentation for SCIM. 2023-04-03 17:01:05 -07:00
Sahil Batra
c37bd3cbd9 settings: Increase width of textarea field in profile settings.
This increases width of textarea field in profile settings to
match it with other inputs.
2023-04-03 16:59:51 -07:00
Sahil Batra
9612125481 settings: Increase width of person picker in profile settings.
This commit increases width of person picker element in profile
settings to match the width of other inputs.
2023-04-03 16:59:51 -07:00
Sahil Batra
16f8a83c32 settings: Increase width of text inputs.
This commit increases width of text inputs in settings, stream
settings and user group settings to be 325px, which is the
minimum width of select elements on these pages.
2023-04-03 16:59:51 -07:00
Sahil Batra
fc929e9eb6 settings: Update class of custom profile field select elements.
We now add settings_select class to custom field select elements
in "Profile" section and modal_select class to select elements in
"Manage user" modal.
2023-04-03 16:59:51 -07:00
Sahil Batra
9546fb6c5b settings: Update class of custom profile field text inputs.
We now add settings_text_input class to custom field text
inputs in "Profile" section and modal_text_input class to
inputs in "Manage user" modal.
2023-04-03 16:59:51 -07:00
Sahil Batra
cf13bdba94 settings: Add modal_text_input class to inputs in "Manage user" modal.
This should have been added in 1c6bed55, but was missed there.
2023-04-03 16:59:51 -07:00
Anders Kaseorg
144166cdc4 mypy: Remove exclusions for unused cssutils and premailer packages.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-04-03 16:52:51 -07:00
Alex Vandiver
113a8c4782 export: Make --deactivate-realm exports be imported as active. 2023-04-03 16:08:43 -07:00
Alex Vandiver
4b0b8abc6c import_realm: Keep the realm deactivated until import is complete. 2023-04-03 16:08:43 -07:00
Daniil Fadeev
5c6f842b28 emails: Replace Premailer with CSS-inline.
Primary goal of library replacement is improving execution speed.
This commit should not affect the functionality of the system
or make any changes to it.
2023-04-03 15:15:05 -07:00
N-Shar-ma
dceb49011a css: Fix misaligned invite link.
Remove unnecessary `relative` positioning from the invite link.
2023-04-03 15:07:38 -07:00
Alex Vandiver
db0ae85d97 sentry: Remove an unnecessary sudo.
790e4854dd made the hooks run as the `zulip` user, making this sudo
unnecessary.
2023-04-03 15:04:56 -07:00
Tim Abbott
3f199d570d docs: Update changelog to cover changes already staged for 7.0. 2023-04-02 23:28:10 -07:00
Joelute
78a9d716ec integration: Remove branch names to Gogs edited PR event.
This is a follow up to #24673, we want to modify every webhook events to
follow the same pattern and consistency where branch name should only
show on opened and merged events.
2023-04-02 23:06:15 -07:00
palashb01
84b4f498d5 tippy: Fix compose close button tooltip when no input.
The tooltip of the compose_close_button changes only when something
is typed into the input box. However, the state of the tooltip
remains the same until someone types into the input box again, even
if they close and reopen the compose box.

The function 'expand_compose_box' from 'compose_actions.js' is
called every time the compose box is opened. Since the input field
is emptied every time the compose box is closed, this function is
used to set the default tooltip for the close button. We want it to
say 'Cancel Compose' every time the compose box is opened since the
input field is always going to be empty whenever the compose box
reopens.
2023-04-02 16:45:53 -07:00
Palash Baderia
9809d229de tippy: Fix compose close button logic.
There are two different tooltips for compose close button
in compose box. One is when there is no text in the inputbox
that says 'Cancel compose' and if there is text in the inputbox
then it says 'Cancel compose and save draft' however the logic
of these two tooltips was reversed. This commit fixes that.
2023-04-02 16:45:53 -07:00
Hardik Dharmani
ebc07c0dd7 ts: Covert dialog_widget.js to typescript.
Created `WidgetConfig` type which has all the parameter that can be
passed launch(). Except html_heading, html_body, and on_click all
other fields are optional. Therefore, removed checking of undefined
mandatory fields as it will be done by typescript.

Co-authored-by: Hardik Dharmani <Ddharmani99@gmail.com>
2023-04-01 11:54:53 -07:00
Lalit
fcbc6dcae4 ts: Convert overlays.js to TypeScript.
Refactored some code as well to avoid unneccesaary `undefined`
checks in `overlays`. To be exact created an action_overlay
object of type `Overlay` such that the `reset_state` is just
`action_overlay = undefined` and having attributes like `$element`
and `close_handler`.

This would ensure that if you have an `active_overlay`, there will
be a registered `close handler` attached to it without needing to
write additional checks for `close_handler` just to satisfy type
checker.
2023-04-01 11:54:53 -07:00
human
0de0743e91 ts: Migrate debug.js to TypeScript.
TypeScript doesn't understand Array.prototype.slice.call; rather than dealing with the
type-checking issues around it, we remove it; it was only necessary for ancient browsers where
NodeList isn’t directly iterable.
2023-04-01 11:50:34 -07:00
Adarsh Tiwari
eed6f67fca ts: Migrate scroll_bar.js to typescript.
Remove the winjs specific `getScrollbarWidth` property while we're at it; 
WinJS isn't relevant anymore.

Reorders methods due to TypeScript files enforcing define-before-use when
this commit was drafted.
2023-04-01 11:43:58 -07:00
Anders Kaseorg
6199be39da web: Add missing CSS.escape calls.
When referring to <div id="my-id" class="my-class">:

- my-id is an id
- #my-id is a selector
- my-class is a class name
- .my-class is a selector

When an id or a class name is interpolated into a selector, it needs
to be escaped with CSS.escape.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-31 18:31:30 -07:00
Anders Kaseorg
341f6173aa ci: Enable XML coverage report to fix Codecov uploads.
This was broken by commit 534754442a
(#22039).

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-31 15:51:43 -07:00
Alex Vandiver
ecd559edd4 settings: Point the "moving messages" help link to the right place. 2023-03-31 14:49:25 -07:00
aparna-bhatt
998f0b3735 stream settings: Fix cancel button in create stream to update the URL.
Clicking cancel button in create stream form wasn't updating the URL hash.
2023-03-31 14:27:36 -07:00
aparna-bhatt
710e42f862 stream settings: Fix archiving of a stream opened in right panel.
We expect the URL to be of stream if it is opened in right panel.
As archiving a stream extracts stream id from hash,
but while a stream is opened and we switch between `All Streams` or
`Subscribed` tabs, the url changes, causing bug in archiving the stream.

As as fix for this issue if a stream is opened in the right
panel the hash of the URL remain of the stream and doesn't update.
If it is archived then the URL updates accordingly.

Fixes #23855.
2023-03-31 14:27:36 -07:00
Lauryn Menard
344d26d936 pm-list-data: Clean up node test for pm_list_data.js.
Cleans up node test to use helper functions when setting a filter
and narrow state for private messages and when checking the return
value for `pm_list_data.get_list_info`.

Also, reduces the number of users in the test by creating more
group direct message conversations.
2023-03-31 14:22:30 -07:00
evykassirer
1e62a42d75 compose: Reduce height of compose banners to better match designs.
Figma: https://www.figma.com/file/jbNOiBWvbtLuHaiTj4CW0G/Zulip-Web-App?node-id=2441%3A180271&t=tFynBT5Akes5HJ95-0
2023-03-31 13:52:31 -07:00
evykassirer
4cfafa382a compose: Rename recipient selector classes to be more descriptive. 2023-03-31 13:45:24 -07:00
evykassirer
83b484db32 compose validate: Rename overflow verifier.
This makes it clearer what the return value means.
2023-03-31 13:40:41 -07:00
N-Shar-ma
b406cc84ff Revert "typeahead: Fix bug where typeahead showed momentarily on shift + tab."
This reverts commit fa37befe3c, which broke
the topic typeahead after a complete stream name.
2023-03-31 11:08:45 -07:00
Tim Abbott
6c82772e15 compose: Fix incorrect scroll down notice in recent view.
The logic for whether one needs to scroll down to view messages sent
by the current client was incorrectly not checking whether a message
feed was visible at all.
2023-03-31 10:41:06 -07:00
Tim Abbott
872a336598 insert_new_message: Rewrite using all_rendered_message_lists.
This replaces one of the our larger remaining blocks of code with
explicit logic for message_lists.home with logic that should correct
if we support maintaining a different set of rendered message lists.

This should have identical behavior to the previous implementation
given that all_rendered_message_lists is either just
message_lists.home or that plus the current narrowed message list;
can_apply_locally() is always true for the home message list, and the
list === message_lists.current check is equivalent to the more complex
narrow_state.active() check.
2023-03-31 10:41:06 -07:00
Tim Abbott
f165e59273 message_events: Check is_message_feed_visible in callbacks.
Because we don't call this function with home_msg_list, I believe the
existing msg_list !== message_lists.current check would have always
been false when the new check is false, but this is more explicit
about the logical intent.
2023-03-31 10:41:06 -07:00
Sahil Batra
2ebb9834cd modal: Fix flex-direction property for modal__content.
The flex-direction property for modal__content should
be set to column as we want to display the elements.

This does not affect most of the modals since they
do not have multiple direct child elements that are
visible at same time and the data-simplebar attribute
already sets the "flex-direction: column" property to
the elements where it is used.

But in the email address visibility modal on user
registration page, there are multiple direct child
elements for the "modal__content" element and we need
to set "flex-direction: column" property for them to
work correctly. We also change the width of select
element in the modal to "fit-content" to avoid it
taking the whole width even when not required.

This commit also fixes the bug in login_to_access
modal, since the `modal__content` for it also
has two direct child elements.
2023-03-31 10:02:42 -07:00
Alex Vandiver
790e4854dd hooks: Run hooks as the zulip user, not as root. 2023-03-30 16:16:37 -07:00
Alex Vandiver
89e366771a prometheus: Add a postgres exporter. 2023-03-30 16:16:18 -07:00
Alex Vandiver
c2beb64a79 prometheus: Consistently import the base class and supervisor, if needed. 2023-03-30 16:16:18 -07:00
Anders Kaseorg
99ab700c1b Revert "node_cache: Work around pnpm install issue in Docker for Mac."
This reverts commit 126f3b5f47.

Testing showed that it was ineffective for many users.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-30 16:15:31 -07:00
Anders Kaseorg
9e0be51a56 dependencies: Switch tarball URL from codeload.github.com to github.com.
For some unexplained reason, this makes pnpm work more reliably in a
Docker for Mac shared volume.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-30 16:15:31 -07:00
David Rosa
95d34540a3 help: Add a dedicated page on how to format spoiler blocks. 2023-03-30 09:39:35 -07:00
Alya Abbott
0afd37dbae help: Add a dedicated page on how to format quotes. 2023-03-30 09:39:35 -07:00
David Rosa
56c03de927 help: Add a dedicated page on how to format LaTeX. 2023-03-30 09:39:35 -07:00
David Rosa
9c3efa6880 help: Update Message formatting section and page on code blocks. 2023-03-30 09:39:35 -07:00
David Rosa
dad5869c1f help: Add a dedicated page on how to format links.
Also remove the Images section from the "Message formatting" help
page, and drop unused markdown-image.png.

Fixes part of #24209.
2023-03-30 09:39:35 -07:00
Josh Klar
ef0c281070 integrations: Add documentation for Mastodon via public RSS feeds.
This uses the Mastodon logo SVG as pulled from
https://blog.joinmastodon.org/logo.svg.
2023-03-30 09:36:16 -07:00
Mateusz Mandera
e3f754fb9b help center: Document SAML configuration steps with Auth0.
Auth0 is another SAML IdP that we haven't detailed the instructions for
yet.
2023-03-30 09:11:55 -07:00
Palash Baderia
d5a12a7348 read_receipts: Open the help link in a new tab.
This commits improves the read link present inside the read receipts
to open the help page in a new tab.

Fixes: #24778
2023-03-30 09:10:20 -07:00
Alya Abbott
e136636715 docs: Clarify "Should I follow this installation guide?" instructions. 2023-03-30 09:08:48 -07:00
David Rosa
2b9374875d templates: Update text on /accounts/find.
- Being more specific about what the user will get.
- Putting less emphasis on entering multiple emails, since most
  people probably just have one email they need to check.
- Using more intuitive wording and hint that deactivated or
  deleted accounts won't be included.

Fixes: #24890.
2023-03-30 09:06:14 -07:00
evykassirer
e786c3ac98 dropdown list: Separate get_data() function, no functional change. 2023-03-29 21:58:17 -07:00
evykassirer
e5dd2810ee puppeteer: Move functions around in common.ts.
They need to be declared higher so that a future
commit can use them.
2023-03-29 18:14:54 -07:00
evykassirer
01643d1d19 compose: Use stream_name() and topic() abstraction everywhere. 2023-03-29 18:14:54 -07:00
Joelute
75611c6cee integration: Modify branch names for Bitbucket 3 events.
This is a follow up to #24673, we want to modify every webhook events to
follow the same pattern and consistency where branch name should only
show on opened and merged events.
2023-03-29 18:13:36 -07:00
Joelute
1ddfbc94c3 integration: Support reviewer in get_pull_request_event_message.
This is a prep commit to help make the changes to make changes to pull
event message easier. Our Bitbucket has been using a custom template to
render the reviewers. This means that values are fixed to how the templates
like it. These changes will allow `get_pull_request_event_message` to
support reviewer and allow for a easier and flexible adjustment to these
messages if needed.
2023-03-29 18:13:36 -07:00
Joelute
4dc85dddc1 integration: Move assignee message to the end for git integrations.
Previously, the assignee message would stick around in the middle of the
event message. This doesn't look as good as if we put it to the end of
the event message. These changes does just that and move the assignee
messages towards the end of the event message to make it look better
and cleaner for the readers.
2023-03-29 18:13:36 -07:00
Aman Agrawal
d564025d6a css: Integrate newly designed header. 2023-03-29 17:59:00 -07:00
Mateusz Mandera
f3db618cb5 actions: Implement do_delete_user_preserving_messages function.
With an extensive docstring by tabbott documenting its limitations.

Co-authored-by: Tim Abbott <tabbott@zulip.com>
2023-03-29 12:51:21 -07:00
Prakhar Pratyush
d8a5ca5ddc user_topics: Update test_edit_muted_topic to verify events sent.
Previously, there was a stale code that didn't verify
if 'muted_topics' and 'user_topic' events are sent correctly.

This commit updates the test to verify if the expected
users are notified via 'muted_topics' and 'user_topic'
events.
2023-03-29 09:50:06 -07:00
Prakhar Pratyush
117264fb37 user_topics: Update move-topic codepath to utilise bulk database operations.
This commit updates the move-topic codepath to perform
bulk database operations on the UserTopic record using
user_profiles for each visibility_policy instead of
previously looping over each user_profile one by one.
2023-03-29 09:50:06 -07:00
Prakhar Pratyush
60762a750b user_topics: Update 'set visibility policy' codepath for bulk db operations.
This commit refactors 'set_user_topic_visibility_policy_in_database'
to perform bulk database operations and the related changes.

There is an increase in database query count because requests
to delete user_topic rows now take two queries instead of one.
This is required for logging the info for a request to delete
a non-existent user_topic row while performing bulk operations
at the same time.

The overall query count will be lower while performing
bulk operations (multiple user_profiles instead of one).
2023-03-29 09:50:06 -07:00
Prakhar Pratyush
a890aaf34d user_topics: Update UserTopic records regardless of the visibility_policy.
This commit updates the 'do_update_message' codepath to
update the UserTopic records regardless of visibility policy
during the "move-topic" operation.

This is required before offering new visibility policies
in the UI.

Previously, UserTopic records were moved or deleted only
for objects with a MUTED visibility policy.

Fixes: #24574
2023-03-29 09:50:06 -07:00
Prakhar Pratyush
0377085f15 user_topics: Update a comment regarding the database query count.
This commit updates a stale comment regarding query count
to its correct value.
2023-03-29 09:50:06 -07:00
Prakhar Pratyush
e1ec814507 user_topics: Add a test helper to improve readability.
This commit adds a test helper function that helps
to remove line wrappings and improve readability.
2023-03-29 09:50:06 -07:00
Prakhar Pratyush
0ec9ff17ce user_topics: Update lib functions to work with any visibility_policy.
This is a prep commit that renames 'set_topic_mutes' and
'topic_is_muted' to 'set_topic_visibility_policy' and
'topic_has_visibility_policy' respectively, and refactors
them to work with any visibility_policy, not only MUTED.
2023-03-29 09:50:06 -07:00
Adarsh Tiwari
78fdb6135a ts: Migrate gear_menu.js to TypeScript.
Includes adding various missing values to page_params.
2023-03-29 09:36:52 -07:00
Ujjawal Modi
de8148bc9e notifications: Warn if all PM notifications will be disabled.
This PR adds a modal to warn when user unchecks a box on the "PMs,
mentions, and alerts" line of notifications panel that will result in
all notifications for private messages and mentions being disabled.

Fixes #24151.
2023-03-28 18:36:56 -07:00
Aman Agrawal
ddb0a6bae9 recent_conversation: Fix possibility of undefined topic row.
`topic_row_top = $(topic_row).offset().top;` returns an error
while calling `topic_offset_to_visible_area` since we cannot
find the `topic_row` for some reason which doesn't seem logically
possible but we add logic to handle that case as well.
2023-03-28 17:01:31 -07:00
Tim Abbott
b75b40cfa3 compose: Hide compose loading spinner after all failures.
The compose send button spinner (which disables the send button while
present) was correctly hidden in both the happy case of a sent message
as well as for all locally echoed message, in both cases via
clear_compose_box to reset the compose box for a new message.

But for a message that was not locally echoed, and failed to send,
nothing hid the compose spinner, resulting in the user being unable to
attempt to resend the message.
2023-03-28 16:47:12 -07:00
Tim Abbott
43fe61df1f compose: Fix disabled state for compose send button.
Disabling the send button was intended to prevent sending the same
message twice in immediate succession via the enter key.

Since a13058223d, this logic duplicates
the compose_spinner_visible check inside finish(), and more
importantly, was not cleaned up correctly if the message fails to send
without having been locally echoed, resulting in the compose box not
allowing you to send further messages after such a failure.

For successfully sent messages, the disabled state was cleared by
clear_compose_box calling check_overflow_text, which unconditionally
sets the disabled state on the send button based on whether the
message is too long.

Rather than try to clean this state up in the right places, remove
this duplicate mechanism for disabling the compose box.
2023-03-28 16:47:12 -07:00
Joelute
a2a9e53423 integration: Refactor get_issue_event_message to use kwarg.
Previously, some call sites for the function provided optional
arguments as positional arguments. These changes will allow the
arguments to be passed as keyword arguments to the function and
fix up the call sites of the function to pass keyword arguments
instead.
2023-03-28 15:51:43 -07:00
Joelute
a2c578e84d integration: Refactor get_pull_request_event_message to use kwarg.
Previously, some call sites for the function provided optional
arguments as positional arguments. These changes will allow the
arguments to be passed as keyword arguments to the function and
fix up the call sites of the function to pass keyword arguments
instead.
2023-03-28 15:51:43 -07:00
nzai
97ff259506 ts: Migrate narrow_error to TypeScript.
This commit migrates narrow_error.js to TypeScript by inferring the
required types in the file and defining types in types.ts.
2023-03-28 15:04:57 -07:00
Daniil Fadeev
602be3ed68 popovers: Refactor compose_enter_sends popover. 2023-03-28 14:51:56 -07:00
Daniil Fadeev
39936dee5d popovers: Refactor compose_control_buttons visibility checking. 2023-03-28 14:51:56 -07:00
Daniil Fadeev
729d3cfc30 popovers: Refactor compose_mobile_button visible check logic. 2023-03-28 14:51:56 -07:00
Daniil Fadeev
2bc6fdca23 popovers: Refactor stream_settings popover keyboard handling. 2023-03-28 14:51:56 -07:00
Daniil Fadeev
a0c98bc70a popovers: Refactor message_actions popover keyboard handling. 2023-03-28 14:51:56 -07:00
Daniil Fadeev
1337c0fec1 popovers: Migrate "all messages" popover to Tippy. 2023-03-28 14:51:56 -07:00
Daniil Fadeev
edb293c3da popovers: Migrate "drafts" popover to Tippy. 2023-03-28 14:51:56 -07:00
Daniil Fadeev
22561e2f3b popovers: Refactor keyboard handling for starred messages popover. 2023-03-28 14:51:56 -07:00
Daniil Fadeev
1f24addb88 popovers: Add shared keyboard handling for popovers.
This new system lets us handle detection and keyboard navigation in
popovers with just a a few lines of simple code for each individual
popover.
2023-03-28 14:51:56 -07:00
Daniil Fadeev
db61dd71e3 popovers: Extract default tippy options for the left sidebar. 2023-03-28 14:51:56 -07:00
Ujjawal Modi
f404dbddb2 recent_conversations: Exclude muted user PMs from recent conversations.
Earlier muted private conversations were shown in recent
conversations. This commit excludes them from recent conversations.

Fixes #24299.
2023-03-28 14:40:50 -07:00
Ujjawal Modi
bfc5092082 recent_conversations: Change name of muted user in group PMs huddle.
Earlier in recent conversations panel full name
was displayed in group PMs huddle even if the user
was muted.
This commit change the display name of such users to
`Muted Users`.
2023-03-28 14:40:50 -07:00
Ujjawal Modi
87215d1a98 recent_conversations: Parsing of user_ids is done using function call.
This commit refactors the code for parsing the user_ids in
`pm_conversations.js` by making a function call to parse user_ids.
2023-03-28 14:40:50 -07:00
Lauryn Menard
7b225245c0 tests: Update ZulipTestCase.tearDown to remove local uploads.
Previously, tests that exercised code paths that added local
uploads did not always clean up `settings.LOCAL_UPLOADS_DIR`
after the test was complete.

Updates the `ZulipTestCase` class to remove any local uploads
in the unique `settings.LOCAL_UPLOADS_DIR` in `tearDown` for
all tests.
2023-03-28 14:38:06 -07:00
Sahil Batra
a6fd41e012 migrations: Fix comment in 0403.
This commit fixes the file name in comment in
0403_create_role_based_groups_for_internal_realms.py.
2023-03-28 14:26:22 -07:00
Sahil Batra
bed2bf64c4 user_groups: Add "Nobody" system user group.
This commit adds code to create a "Nobody" system user group
to realms which will be used in settings to represent "Nobody"
option.

We also add a migration to add this group to existing realms.
2023-03-28 14:26:22 -07:00
Pranav2612000
ecead64718 markdown: Render larger emojis inside headings
Previously, the emoji size was fixed to 20px by 20px irrespective of
whether the emojis were inside a heading or not. This looked weird when
a small emoji was rendered next to a large h1 text.

This commit fixes that by setting the emoji height to 1.4em
which proportionately increases the size of the emojis as the text size
increases for different headings.

Fixes #12857
2023-03-28 09:17:02 -07:00
Sahil Batra
0c8f74d6e2 streams: Fix dropdown-list-widget menu in stream creation form.
The dropdown-menu for "Who can unsubscribe others" was not wide
enough to fit the options in stream creation form. This commit
fixes it to be wide enough to fit the options like we do in
stream edit form.
2023-03-28 09:14:54 -07:00
Sahil Batra
00abffda98 settings: Fix dropdown-list-widget menu for short options.
The dropdown menu for notification stream, default code block
language, etc. was not looking good for short options due to
width being set to fit-content. This commit adds min-width
property to make them look good for short options as well.
2023-03-28 09:14:54 -07:00
Sahil Batra
c5ff78a933 bootstrap: Remove width property for inputs.
This commit removes the width property for inputs from
bootstrap.css. We have already set the width for the
specific text inputs in previous commits. For other
type of inputs (like checkbox, radio, file, etc.),
there is no need to set the width as they are hidden
or we already set width for them.

This is a part of bootstrap removal project.
2023-03-27 22:34:30 -07:00
Sahil Batra
40f2865328 integrations_dev_panel: Add width CSS property for text inputs.
This commit adds width property CSS rule for text inputs in
integrations_dev_panel.css to 206px, as we are going to remove
the bootstrap CSS rule which sets width in further commits.
2023-03-27 22:34:30 -07:00
Sahil Batra
30f8c77151 billing: Add width property CSS for text inputs.
This commit adds width property CSS rule for text inputs
in billing.css to 206px, as we are going to remove the
bootstrap CSS rule which sets width to 206px in further
commits.
2023-03-27 22:34:30 -07:00
Sahil Batra
00ec5a3752 activity: Add width property CSS for inputs.
This commit adds width property CSS rule for text
inputs in activity.css to 206px, as we are going to
remove the bootstrap CSS rule which sets width to
206px in further commits.
2023-03-27 22:34:30 -07:00
Sahil Batra
9615d4ba05 widgets: Add CSS to set width of inputs.
This commit adds CSS to set width of text inputs in
poll and todo widgets to 206px as we will be removing
the bootstrap CSS rule which sets width of inputs to
206px in further commits.
2023-03-27 22:34:30 -07:00
Sahil Batra
52619657ca css: Add width property to CSS for #inline_topic_edit element.
This commit adds width property to CSS for "#inline_topic_edit"
element in zulip.css to set it to 206px, as we will be removing
the bootstrap CSS for it in further commits.
2023-03-27 22:34:30 -07:00
Sahil Batra
e1877ce57e settings: Add settings_text_input class to text inputs.
This commit adds settings_text_input class to text inputs in
settings, stream settings and user group settings pages. This
class is used to set the width of inputs to 206px, as we will
be removing the boostrap rule which sets width of the input
in further commits.
2023-03-27 22:34:30 -07:00
Sahil Batra
1c6bed55e4 modals: Add modal_text_input class to text inputs.
This commit adds modal_text_input class to text inputs
in modals to set width of them as set by bootstrap.
This class is used to set the width of inputs to 206px,
as we will be removing the boostrap rule which sets width
of the input in further commits.
2023-03-27 22:34:30 -07:00
Sahil Batra
dcce524376 settings: Increase width of url field in edit custom field form.
This commit increases the width of url field, displayed for
custom external account type fields, in edit profile field
form. The width of the input is increased as urls are generally
long enough and did not fit in the width set previously in most
cases. We increase the width to match the width in add custom
profile field form.
2023-03-27 22:34:30 -07:00
sbansal1999
a8b5167f89 ts: Convert portico/team.js to TypeScript.
This commit converts "portico/team.js" to TypeScript as well
as adds the required type definitions.

Some values were extracted into variables for type-checking.
2023-03-27 22:33:54 -07:00
sbansal1999
cc6661f777 team: Pop contributors from page_params.
Avoiding access to the "page_params" results in a cleaner interface
for conversion to TypeScript.
2023-03-27 22:33:54 -07:00
sbansal1999
23ff970cf5 portico: Add missing tab_name parameter in teams page.
The `tab_name` parameter is supposed to ensure that if you're looking
at a tab for repository that's not zulip/zulip, that the GitHub links
for authors without an associated GitHub username goes to the commits
for that repository.
2023-03-27 22:33:54 -07:00
Tim Abbott
50b91fe5c7 portico: Fix incorrect fallback contributors data type.
Previously, using this without having run fetch-contributors-data
would throw an exception trying to call .filter on an empty
dictionary.
2023-03-27 22:33:54 -07:00
Anders Kaseorg
eb572e525a stream_color: Fix duplicate ids for colored privacy icons.
This also fixes the color on these icons in the stream-specific rows
of the notification settings table.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-27 22:24:45 -07:00
Karl Stolley
deabb8ed53 docs: Document preference for hyphenated class and ID values.
This clarifies that kebab case should be the preferred style for
multiword classes in HTML and CSS.
2023-03-27 17:31:31 -07:00
Karl Stolley
674cf8eacc css: Hyphenate .status-emoji selector. 2023-03-27 17:31:31 -07:00
Karl Stolley
f695b08989 css: Hyphenate .smiley-icon selector. 2023-03-27 17:31:31 -07:00
Karl Stolley
89f45bf50e css: Hyphenate .selected-emoji selector. 2023-03-27 17:31:31 -07:00
Karl Stolley
36241e5758 css: Hyphenate .status-emoji-wrapper selector. 2023-03-27 17:31:31 -07:00
Karl Stolley
6e2b8a3b1d css: Hyphenate .user-status selector. 2023-03-27 17:31:31 -07:00
Karl Stolley
fcef6a2228 css: Hyphenate .user-status-content-wrapper selector. 2023-03-27 17:31:31 -07:00
Karl Stolley
c78c1ef54b css: Hyphenate #set-user-status-modal selector. 2023-03-27 17:31:31 -07:00
Anders Kaseorg
2976d2c2fa stripe: Fix non-translatable computed string.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-27 17:14:46 -07:00
Alya Abbott
1bea42dd44 help: Drop deprecated "Organize the streams sidebar" page. 2023-03-27 17:14:09 -07:00
Prakhar Pratyush
e45623fccc python: Update tuple handling pattern; returned by a delete() query.
This commit updates the pattern for dealing with tuples
returned by the delete() query.

The '(num_deleted, ignored) = ModelName.objects.filter().delete()'
pattern is preferred due to better readability.

We avoid the pattern '(num_deleted, _)' because Django uses _
for translation, which may lead to future bugs.
2023-03-27 16:18:23 -07:00
Aman Agrawal
83423bb45b copy_message_button: Use div HTML tag instead of button.
For some reason, browser is treating clicking on the button as
submitting the form, which results in the page getting redirected
to the same page with an additional empty query `?` in the URL.
2023-03-27 16:11:19 -07:00
Aman Agrawal
e65e78719d dependencies: Add colord as a direct dependency.
It was already present as indirect dependency but added again
since we need it to calculate stream colors.
2023-03-27 15:58:34 -07:00
Sahil Batra
f684d36710 test_classes: Add submit_realm_creation_form helper.
This commit adds a new helper submit_realm_creation_form,
similar to existing submit_reg_form_for_user, to avoid
duplicate code for creating realms in tests.
2023-03-27 15:44:42 -07:00
Sahil Batra
4d3c5fdc91 forms: Use RealmDetailsForm as subclass for RegistrationForm.
We now use RealmDetailsForm as subclass for RegistrationForm
such that we can avoid duplication of the checks for
realm_subdomain field.
2023-03-27 15:44:42 -07:00
Sahil Batra
96979e73c6 registration: Use get_realm_create_form_context for register.html.
This commit adds the fields related to realm creation form using
get_realm_create_form_context in the context passed to register.html
template to avoid duplication.
2023-03-27 15:44:42 -07:00
Sahil Batra
00ffa3e870 registration: Remove redundant code.
Since we have updated the registration code to use
PreregistrationRealm objects for realm creation in
previous commits, some of the code has become
redundant and this commit removes it.

We remove the following code -
- The modification to PreregistrationUser objects in
process_new_human_user can now be done unconditionally
because prereg_user is passed only during user creation
and not realm creation. And we anyway do not expect
any PreregistrationUser objects inside the realm
during the creation.
- There is no need of "realm_creation" parameter in
create_preregistration_user function, since we now
use create_preregistration_realm during realm creation.

Fixes part of #24307.
2023-03-27 15:44:42 -07:00
Sahil Batra
cf8d8db132 register: Update the user-registration form for realm creation.
In previous commits, we updated the realm creation flow to show
the realm name, type and subdomain fields in the first form
when asking for the email of the user. This commit updates the
user registration form to show the already filled realm details
as non-editable text and there is also a button to edit the
realm details before registration.

We also update the sub-heading for user registration form as
mentioned in the issue.

Fixes part of #24307.
2023-03-27 15:44:42 -07:00
Sahil Batra
c225de789e development: Use PreregistrationRealm object for creating realms. 2023-03-27 15:44:42 -07:00
Sahil Batra
791c3030eb backends: Update ZulipLDAPAuthBackend to use PreregistrationRealm.
This commit updates ZulipLDAPAuthBackend to use the recently added
PreregistrationRealm when creating realms with LDAP used as
authentication method.
2023-03-27 15:44:42 -07:00
Sahil Batra
e60b6b68ea registration: Modify PreregistrationRealm objects after registration. 2023-03-27 15:44:42 -07:00
Sahil Batra
765e65f954 registration: Use PreregistrationRealm object for realm creation.
We now use PreregistrationRealm objects in registration_helper
function when creating new realms instead of PreregistrationUser
objects.

Fixes part of #24307.
2023-03-27 15:44:42 -07:00
Sahil Batra
54771cfe94 registration: Create PreregistrationRealm object when creating realm.
This commit adds code to create PreregistrationRealm object when
creating realm and set it to the content_object field of
Confirmation object.
2023-03-27 15:44:42 -07:00
Sahil Batra
80b00933b1 templates: Add realm information fields in create_realm.html.
We now show inputs for realm details like name, type and URL
in the create_realm.html template opened for "/new" url and
these information will be stored in PreregistrationRealm
objects in further commits.

We add a new class RealmDetailsForm in forms.py for this
such that it is used as a base class for RealmCreationForm
and we define RealmDetailsForm such that we can use it as
a subclass for RegistrationForm as well to avoid duplication.
2023-03-27 15:44:42 -07:00
Sahil Batra
7f1bf9d6ab models: Add PreregistrationRealm class.
This commit adds PreregistrationRealm class which will be
similar to PreregistrationUser and will store initial
information of the realm before its creation as we are
changing the organization creation flow as per #24307.

Fixes part of #24307.
2023-03-27 15:44:42 -07:00
Sahil Batra
1874491178 templates: Extract realm creation form html in new template file.
This commit extracts realm creation form html in a new file
realm_creation_form.html as we are reworking the organization
flow as per #24307 and this change would allow us to avoid
duplicating the code.
2023-03-27 15:44:42 -07:00
Sahil Batra
5eeef1483d templates: Rename ID for form element in create_realm.html.
This commit updates the ID for form element in create_realm.html
to "create_realm" as we would need to update the error handling
for this page in further commits and we do not want to break it
for other forms using "send_confirm" as ID.
2023-03-27 15:44:42 -07:00
Sahil Batra
8c6bf72c1f registration: Rename prereg_user to prereg_object.
This commit renames prereg_user variable in
check_prereg_key and get_prereg_key_and_redirect
functions in zerver/views/registration.py to
prereg_object as in further commits the
preregistration object could also be
PreregistrationRealm object as part of changes
for #24307.
2023-03-27 15:44:42 -07:00
N-Shar-ma
25d2e1caed compose: Have at least 2 new lines before and after a quoted message.
Uptil now, 1 new line was added before and 1 after a quoted message. Now
for more breathing room around a quoted message, new lines are inserted
to space it from any content before and after by at least 2 new lines.

Fixes: #23608.
2023-03-27 15:31:45 -07:00
Alex Vandiver
3feb536df3 nagios: Remove swap check.
Swap usage is not a high signal thing to alert on, and is likely to flap.
2023-03-27 15:10:50 -07:00
Sahil Singh
89733670fd image_upload_widget: Refactor style of upload_widget's preview_image.
Forms using upload widget were using the
same css for image preview.

We fix this by assigning a class to the
widget and applying specific styles to it.
2023-03-27 10:19:29 -07:00
Joelute
edfb2a3948 compose_typeahead: Ensure header is counted in position calculation.
Previously, there is a bug where the position of the typeahead is off
whenever the user switches from stream typeahead to topic typeahead
in the compose box. The typeahead header was not hidden before
calculation of the position based on container height. These changes
will include the header before calculating for the position.
2023-03-27 10:18:12 -07:00
Joelute
fa37befe3c typeahead: Fix bug where typeahead showed momentarily on shift + tab.
Break on `keyup` for case of `shift` key, instead of letting it trigger
the typeahead.

Fixes: #24152.
2023-03-27 10:18:12 -07:00
Mateusz Mandera
42de31c2e8 billing: Tweak "contact support" links on billing page.
This is nicer than putting the raw email in the message.
2023-03-27 10:15:21 -07:00
Mateusz Mandera
f482fc2a73 billing: Add hint about support on the sponsorship pending page.
This just replaces the billing/upgrade with the statement that
"Your organization has requested sponsored or discounted hosting.", so
it should include an obvious contact in case the customer wants to amend
something or just bump a request that may have gotten missed.
2023-03-27 10:15:21 -07:00
Mateusz Mandera
684430faa2 billing: Add sponsorship request form to the billing page.
Previously this was only available on the upgrade page - meaning an
organization that already bought a plan wouldn't be able to request a
sponsorship to get a discount or such, even if qualified.
2023-03-27 10:15:21 -07:00
Mateusz Mandera
cf55e66c74 css: Move "style" from upgrade.html sponsorship form to billing.css.
Our linters demand "style" to not be used in .html and will complain
when trying to move this chunk of html to another .html file.
2023-03-27 10:15:21 -07:00
palashb01
454400605b settings: Replace 'Forgotten it?' to 'Forgot it?'.
This is nicer English.
2023-03-27 10:11:22 -07:00
Palash Baderia
cefc191dd6 settings: Fix responsiveness in change email,password dialogs.
Added a width for the Change Email and Password dialogs at
sm_min (576px) and ml_min (425px) to make them more responsive
on narrow screens.

Fixes: #24339.
2023-03-27 10:11:22 -07:00
Joelute
8747aa6fa1 integration: Modify branch names for Bitbucket 2 events.
This is a follow up to #24673, we want to modify every webhook events to
follow the same pattern and consistency where branch name should only
show on opened and merged events.
2023-03-27 10:09:25 -07:00
Mateusz Mandera
ca0869eb01 support: Fix scrubbing realms if string_id is a number.
This bug made it impossible to scrub realms where the string_id was a
number, e.g. 123.zulipchat.com because
confirmed_string_id === actual_string_id comparison failed due to one
being a string and the other a number.

Per http://api.jquery.com/data/#data-html5:
Every attempt is made to convert the attribute's string value to a
JavaScript value (this includes booleans, numbers, objects, arrays, and
null).
To retrieve a data-* attribute value as an unconverted string, use the
attr() method.
2023-03-27 10:07:41 -07:00
Joelute
505c217db5 bots: Change logic for notification bot after moved message.
Previously, when a user moves a message to another topic, the Notification
bot will post a message saying "This topic was moved here from..." This is
confusing when the topic already contains messages. The changes aims to make
the messages more clear by changing the logic for the Notification bot. When
there is already messages in the topic, the bot will post "A message was
moved here from..." or "N messages were moved here from...". The bot will
post "This topic was moved here from (somewhere) by (someone)." when the
topic is empty.

Fixes #23267.
2023-03-27 10:00:34 -07:00
Joelute
c8bce6f8d3 bots: maybe_send_resolve_topic_notiffications return message_id or None 2023-03-27 10:00:34 -07:00
Ganesh Pawar
a2d68e90cc bots: Disable Save changes button until user makes some changes.
Fixes #20831
2023-03-27 09:06:48 -07:00
Zixuan James Li
cf9b95b95a user_groups: rename create_user_group to create_user_group_in_database.
To avoid people calling "create_user_group" instead of
"check_add_user_group", we rename it to make its purpose clearer.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-03-27 09:05:00 -07:00
Zixuan James Li
e331c356e4 user_groups: Use check_add_user_group instead in test cases.
"check_add_user_group" is a safer helper function than
"create_user_group" to use when creating user_groups. It does
error handling and notify the client with the appropriate event.

Note that the populate_db command still uses "create_user_group"
because we do not need to enqueue events at that point.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-03-27 09:05:00 -07:00
Zixuan James Li
0f5d6432a4 user_groups: Move create_user_group to zerver.actions.user_groups.
Since this function creates a new user group into the database,
it is more appropriate to have it not as a generic "lib" function
but as an "action".

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-03-27 09:05:00 -07:00
Ujjawal Modi
d2db71fdf4 bots: Disable edit button for system bots.
Disabled "Edit bot" and "Deactivate" action buttons
for system bots as they cannot be edited or deactivated.

Fixes #24425.
2023-03-27 09:03:53 -07:00
Sahil Batra
6582374178 server_events_dispatch: Fix live-update of email_address_visibility. 2023-03-27 09:02:00 -07:00
Anders Kaseorg
38539c8fed dependencies: Add Zod and typing dependencies.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-25 11:18:38 -07:00
Anders Kaseorg
4c5042e736 eslint: Loosen no-use-before-define for TS like we do for JS.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-25 09:40:57 -07:00
Sahil Singh
0bcf03ea64 stream_settings: Fix stream description overflow in stream settings.
With longer stream descriptions, the text overflows in stream settings.

Fix this with 'word-break: break-all;'.
2023-03-24 17:39:04 -07:00
Anders Kaseorg
d274583d8f styles: Use modern color notation.
postcss-preset-env transpiles this back as necessary.  (It does a
better job than we did, in fact: we had several four-argument hsl()
calls that should have been hsla().)

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-24 17:26:55 -07:00
YashRE42
4853a9a736 navbar: Use feathericon close icon.
This uses the new close icon which we prefer over the one made available
from bootstrap. It also adds a reference to the icon in THIRDPARTY.
2023-03-24 16:30:15 -07:00
YashRE42
e3ad9c10bb navbar: Add Ionic search icon and use for navbar search.
This adds a new search icon which we prefer over the one made
available from bootstrap, and replaces search icons in navbar
search with the Ionic icon.
2023-03-24 16:30:15 -07:00
Anders Kaseorg
e029fe6249 message_list_view: Initialize status_message even for hidden messages.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-24 16:19:49 -07:00
SameepAher
6211939020 css: Change the selector name of the <i></i> tag.
Changed the id name of the <i></i> tag to user_profile_edit_button_icon
in the user profile modal, as earlier it was edit-button, which is too
vague of a selector name.
2023-03-24 15:47:54 -07:00
SameepAher
724af12cd6 css: Fix edit icon bug in user profile modal.
Close user profile modal on clicking the space around edit button, by
calling hide_user_profile() on clicking the hover box around the edit
button.

Also, modified the hover box to center around the edit button.
2023-03-24 15:47:54 -07:00
David Rosa
4508fb5d5c help: Add a dedicated page on how to format lists.
- Updates example and screenshot for numbered lists.
2023-03-24 15:19:08 -07:00
Alex Vandiver
93bfd3fb5f sentry: Provide a server-side tunnel.
Some well-intentioned adblockers also block Sentry client-side error
reporting.  Provide an endpoint on the Zulip server which forwards to
the Sentry server, so that these requests are not blocked.
2023-03-24 15:16:38 -07:00
Alya Abbott
926cb84ca5 portico: Rewrite "Why Zulip?" landing page. 2023-03-24 15:15:16 -07:00
Alex Vandiver
164d58bec9 web: Save a 301 redirect from /help to /help/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
6f4d22762c web: Save a 301 redirect from /new to /new/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
4914c3671f web: Save a 301 redirect from /case-studies/x to /case-studies/x/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
2ab79c0477 web: Save a 301 redirect from /self-hosting to /self-hosting/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
0b80397cfd web: Save a 301 redirect from /support to /support/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
ab7ff6b582 web: Save a 301 redirect from /billing to /billing/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
8da1c51a06 web: Save a 301 redirect from /security to /security/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
3e307781dd web: Save a 301 redirect from /for/x to /for/x/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
4b21852e72 web: Save a 301 redirect from /why-zulip to /why-zulip/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
14d19c00d7 web: Save a 301 redirect from /features to /features/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
1d428af776 web: Save a 301 redirect from /privacy/ to /policies/privacy. 2023-03-24 14:51:01 -07:00
Alex Vandiver
b5731c55b7 web: Save two 301 redirects from /privacy to /privacy/ to /policies/privacy. 2023-03-24 14:51:01 -07:00
Alex Vandiver
822683249d web: Save a 301 redirect from /terms/ to /policies/terms. 2023-03-24 14:51:01 -07:00
Alex Vandiver
ce847fd09c web: Save two 301 redirects from /terms to /terms/ to /policies/terms. 2023-03-24 14:51:01 -07:00
Alex Vandiver
d9daeb13e0 web: Save a needless 301 redirect from /apps to /apps/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
61adc9cfcc web: Save a needless 301 redirect from /team to /team/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
c686c5ed0f web: Save a needless 301 redirect from /plans to /plans/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
bf06d493ee web: Save a needless 301 redirect from /history to /history/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
eb81e62eaa web: Save a needless 301 redirect from /hello to /hello/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
a1570ff3dd web: Save a needless 301 redirect from /integrations to /integrations/. 2023-03-24 14:51:01 -07:00
Alex Vandiver
5967dda35d web: Save a needless 301 redirect from /upgrade to /upgrade/. 2023-03-24 14:51:01 -07:00
David Rosa
061f1dc43b help: Add tip about + keyboard shortcut to "Emoji reactions" page.
Adds `keyboard_tip` to the "Add a new reaction" section.
2023-03-24 12:58:35 -07:00
David Rosa
707fa87c74 help: Document = keyboard shortcut.
Documents the new shortcut in the `?` menu, Keyboard Shortcuts page,
and Emoji Reactions page.
2023-03-24 12:58:35 -07:00
oribe1115
26691a3bd1 docs: Add a Japanese translation style guide.
Co-authored-by: Sutou Kouhei <kou@cozmixng.org>
Co-authored-by: Greg Price <gnprice@gmail.com>
2023-03-24 12:36:48 -07:00
Daniil Fadeev
e8f5e8da4f message_controls: Fix "undefined" tooltip content. 2023-03-24 12:26:57 -07:00
David Rosa
00988c7ea8 help: Document mark messages as read via recent conversations.
- Adds `via-recent-conversations` tab to document the feature.
- Changes `desktop-web` tab -> `via-left-sidebar` for consistency.
2023-03-24 12:09:58 -07:00
David Rosa
99f48ef587 help: Move how to open Recent Conversations to include block.
Replaces instruction in Reading topics and Recent conversations
with include block.
2023-03-24 12:09:58 -07:00
Aman Agrawal
887cacd564 portico-header: Tag all links for translation. 2023-03-24 12:08:49 -07:00
Alex Vandiver
7448ab6234 bootstrap-aws-installer: Update the github.com SSH key.
Per https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/.
2023-03-24 12:01:55 -07:00
N-Shar-ma
b8cb72630f click_handlers: Ensure typeahead clicks do not collapse compose box.
Added condition for when a user clicks anywhere in a typeahead menu, be
it the header or empty space at the top and bottom, to not collapse the
compose box.

This fixes the bug where clicking anywhere on the typeahead except the
options would result in the compose box collapsing, but the typeahead
menu staying open and still working (on selecting a option in this state,
it would be inserted at the start, as visible on reopening the compose box).
2023-03-24 12:00:57 -07:00
Anders Kaseorg
1db7f80f94 ruff: Fix PLW1508 Invalid type for environment variable default.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-24 11:57:07 -07:00
Anders Kaseorg
b719227b04 ruff: Fix C416 Unnecessary dict comprehension.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-24 11:57:07 -07:00
Anders Kaseorg
869ea542fa ruff: Fix PLR1711 Useless return statement at end of function.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-24 11:57:07 -07:00
Anders Kaseorg
870238206c create-test-api-docs: Remove.
This tool plays fast and loose with HTML generation, and nobody seems
to use it.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-24 11:55:12 -07:00
Lauryn Menard
52801f3cd2 narrow: Support underscore version of "pm-with" and "group-pm-with".
Prior to commit a9b3a9c, the server implementation for documented
search operators with dashes, also implicitly supported clients
sending those same operators with underscores. This has been the
case sense the server side support for narrow filtering was
introduced in commit 3af2bf345a.

Updates the stricter version of mapping operator strings to `by*`
functions, to also include the underscore version of any operators
that have dashes. Adds a note that these undocumented versions are
tied to the support for the documented versions.
2023-03-24 11:54:50 -07:00
Alex Vandiver
f812d9bb42 localstorage: Accesses can fail randomly; make best-effort.
The localstorage machinery can fail for totally arbitrary reasons,
including filesystem breakages on the part of the client, or
capricious access control.

Wrap accesses to localstorage with try/catch blocks to do our best,
but continue execution in the event that the localstorage API errors
out; it is better to continue with the rest of our intended actions
than get hung up on those failures.
2023-03-23 16:16:04 -07:00
Alex Vandiver
bf532de8bb queue: Allow enabling TLS for the RabbitMQ connection.
This allows using cloud-based RabbitMQ services like AmazonMQ.

Fixes: #24699.
2023-03-23 16:02:10 -07:00
Alex Vandiver
262b19346e puppet: Decrease default nginx worker_connections.
Increasing worker_connections has a memory cost, unlike the rest of
the changes in 1c76036c61d8; setting it to 1 million caused nginx to
consume several GB of memory.

Reduce the default down to 10k, and allow deploys to configure it up
if necessary.  `worker_rlimit_nofile` is left at 1M, since it has no
impact on memory consumption.
2023-03-23 15:59:23 -07:00
evykassirer
12a61fcec6 emoji: Remove parens and apostrophes from emoji names.
This was breaking rendering of the emoji with these names.
More context on CZO: https://chat.zulip.org/#narrow/stream/9-issues/topic/issue.20with.20built-in.20emoji.20name/near/1517735
2023-03-23 15:58:43 -07:00
Alex Vandiver
b2c048f172 emojiset: Promise reject calls want an error, not an event.
This improves the error message captured, from the mildly inscrutable
"Non-Error promise rejection captured with keys: currentTarget,
isTrusted, target, type".
2023-03-23 15:58:11 -07:00
Alex Vandiver
75008d5f50 sentry: Drop HttpClientIntegration.
We have the information about all of these failures from the server
side, and Sentry groups all 5xx failures together with no stacktrace,
which makes them very difficult to get signal out of.
2023-03-23 15:57:41 -07:00
Anders Kaseorg
39b48e85a4 recent_topics_row: Remove unused dataset attributes from template.
Commit 084cbd4ff7 (#15064) removed the
.data() calls that inspected these.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-23 13:34:59 -07:00
Anders Kaseorg
508b9f7bd0 reactions: Pass missing vote_text to Handlebars template.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-23 13:26:37 -07:00
David Rosa
f5272a0382 help: Fix link to production docs in "Start a call" page.
- Fixes hash fragment to match the correct section heading.
2023-03-23 12:18:06 -07:00
David Rosa
55ded41b89 help: Fix link to production docs in "Import from Gitter" page.
- Fixes link formatting and hash fragment to match the correct
  section heading.
2023-03-23 12:18:06 -07:00
David Rosa
aa207b8207 help: Fix links to production docs.
We should normally be linking to the stable version of production
documentation, unless the page/section isn't there yet.
2023-03-23 12:18:06 -07:00
Joelute
0a3fcbb649 integration: Modify branch names for Gitlab MR events.
This is a follow up to #24673, we want to modify every webhook events to
follow the same pattern and consistency where branch name should only
show on opened and merged events.
2023-03-23 12:17:28 -07:00
Daniil Fadeev
b65b94894f stream_popover: Migrate Bootstrap to Tippy in starred messages' popover. 2023-03-23 11:59:46 -07:00
Tim Abbott
2b6ec56238 popovers: Use default our font size for Tippy popovers.
We'd accidentally shrunk the actions popover to 12px when migrating it
to Tippy.
2023-03-23 11:59:46 -07:00
Tim Abbott
d3152800a6 css: Refactor Tippy popover CSS.
The CSS for our first Tippy popover, actions_popover, incorrectly did
not split the CSS that is meant to be applied to all popovers from
that CSS that is only for that specific popover.

Reorganize this with some clarifying comments.
2023-03-23 11:59:46 -07:00
Joelute
cc7e29b96f help: Merge two similar sections in marking messages as read.
Previously, there was a two similar sections in `marking messages as read`.
We want to move the intro paragraph from the second section to the first
section. Then drop the "Do not mark as read" section altogether.
2023-03-23 10:17:38 -07:00
Sahil Batra
ce562c4820 user_settings: Create RealmAuditLog entries for all user settings.
We previously created RealmAuditLog entries for user notification
settings only. This commit changes the code to create entries for
all user settings. We cannot backfill the entries since we don't
have the data to do that.
2023-03-23 10:06:47 -07:00
Alex Vandiver
0c46bbdf9f puppet: Update dependencies. 2023-03-23 09:50:30 -07:00
Daniil Fadeev
3bfdac3e03 tippy: Fix tippy-arrow thickness. 2023-03-23 09:24:38 -07:00
Lauryn Menard
ffcdc13819 create-realm: Update notification message sent to admin realm.
When a new realm is created, a notification message is sent to
the realm configured as the settings.SYSTEM_BOT_REALM if there
is a "signups" stream that exists in that realm. This is used
for Zulip Cloud, but is an undocumented feature.

The topic of the message has been the subdomain of the new realm,
and the message content has been "Signups enabled" translated
into the default language of the new realm.

In order to make these messages more explicitly for Zulip Cloud,
the settings.CORPORATE_ENABLED is checked before sending these
messages.

To make these messages more useful, the topic for these
notifications is changed to be "new organizations". The content
of these messages is updated to have the new realm name (with a
link to the admin realm's activity support page for the realm),
subdomain (with a link to the realm), and organization type.
2023-03-22 17:48:53 -07:00
Anders Kaseorg
36475daba7 templates: Remove references to undefined fields.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-22 17:10:28 -07:00
Anders Kaseorg
a1f530fcc0 tests: Pass missing data to Handlebars templates.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-22 17:10:28 -07:00
Anders Kaseorg
73d400e4a3 web: Pass missing data to Handlebars templates.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-22 17:10:28 -07:00
Anders Kaseorg
5d7da7e537 settings_bots: Avoid Handlebars iteration with block parameters.
The fix at https://github.com/handlebars-lang/handlebars.js/pull/1855
is not released yet.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-22 17:10:28 -07:00
Aman Agrawal
f5f79048fe notifications: Handle exception when trying to play audio.
Safari denies user from playing audio without an interactive
trigger like a button by default. So, when user received a
notification in Zulip via Safari, it triggers an error when
trying to play the notification sound.

Our goal for this commit is to simply handle the error.
2023-03-22 12:27:20 -07:00
Alex Vandiver
95bdfa8ff8 help: Improve and extend "Export your oganization" documentation.
- Document compliance exports.
- Make structure of all the sections consistent.
- Make other tweaks to improve clarity.

Co-authored-by: Alya Abbott <alya@zulip.com>
2023-03-22 11:56:14 -07:00
Aman Agrawal
dbc2b2a839 recent_conversations: Fix unread topics navigation behaviour.
When marking an unread topic as read with `unread` filter selected,
we don't need to move user a row down since removing the selected row
will automatically move the user down.

Without this, the user goes down twice which is not intended.
2023-03-22 11:53:41 -07:00
N-Shar-ma
83e182a6fa typeahead: Fix stream typeahead flashing before topic typeahead.
Removed a redundant call to bootstrap typeahead's `lookup` function when
the `automated` function returns true, which was causing the streams
typeahead to show up briefly before the topic typeahead on pressing `>`
immediately after a stream name.
2023-03-22 11:43:21 -07:00
Anders Kaseorg
afa218fa2a semgrep: Detect some unsafe uses of markupsafe.Markup.
Use the built-in HTML escaping of Markup("…{var}…").format(), in order
to allow Semgrep to detect mistakes like Markup("…{var}…".format())
and Markup(f"…{var}…").

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-22 11:23:27 -07:00
Alex Vandiver
f66d952c57 log-search: Support HTTP method limits. 2023-03-22 11:20:47 -07:00
Alex Vandiver
b2666bf054 log-search: Compare lowered terms to lowered log line.
This allows us to search for upper-case things.
2023-03-22 11:20:47 -07:00
Lauryn Menard
90205a490d account-settings: Pass delivery email to change email modal.
When we converted the change email form to a dialog widget modal,
in commit f43d3b9986, the page_params value for delivery email
that was being referenced in the handlebars template
`change_email_modal.hbs` was not set, so instead an empty string
was the initial input value. Because the email change dialog
widget post_render callback sets the input value to the same
delivery email, the fact that the email was not being set when
the template was initially rendered was not noticable.

Passes the page_params.delivery_email to the html parameter in
dialog_widget.launch so that the template has the initial value
set when the form is initially rendered. Removes the now redundant
post_render callback, which resets the initial input value to the
same delivery email.
2023-03-22 11:18:49 -07:00
Lauryn Menard
25fb810d81 account-settings: Pass password page params to dialog widget.
When the password change form was converted to a dialog widget
modal, in commit f5fbf5f0e0, the page_params values for
password_min_length and password_min_guesses that were referenced
in the handlebars template `dialog_change_password.hbs` had no
value to set, which meant the password quality bar was no longer
checking the input value against those organization settings.

Passes the page_params values for password_min_length and
password_min_guesses to the html parameter in dialog_widet.launch
for the password change modal so that those values are available
and set when the template is rendered.
2023-03-22 11:18:49 -07:00
Anders Kaseorg
126f3b5f47 node_cache: Work around pnpm install issue in Docker for Mac.
On Docker for Mac with the gRPC FUSE or VirtioFS file sharing
implementations, we nondeterministically get errors like this from
pnpm install:

    pnpm: ENOENT: no such file or directory, copyfile '/srv/zulip/.pnpm-store/v3/files/7d/6b44bb658625281b48194e5a3d3a07452bea1f256506dd16f7a21941ef3f0d259e1bcd0cc6202642bf1fd129bc187e6a3921d382d568d312bd83f3023979a0' -> '/srv/zulip/node_modules/.pnpm/regexpu-core@5.3.2/node_modules/_tmp_3227_7f867a9c510832f5f82601784e21e7be/LICENSE-MIT.txt'

    Subcommand of ./lib/provision.py failed with exit status 1: /usr/local/bin/pnpm install --frozen-lockfile
    Actual error output for the subcommand is just above this.

Work around this using --package-import-method=copy.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-21 19:52:17 -07:00
Sahil Batra
627adf8465 create_realm: Tag import string for translation.
The string "Or import from Slack, Mattermost, Gitter, or
Rocket.Chat." in create_realm.html was not tagged for
translation before. This commit fixes it to tag the string
for translation.
2023-03-21 16:34:23 -07:00
Alya Abbott
6585cb0717 portico: Link to new End Point Dev case study. 2023-03-21 16:20:30 -07:00
Alya Abbott
e660ffbe07 portico: Add End Point Dev case study page. 2023-03-21 16:20:30 -07:00
Alya Abbott
fd703a9ee4 help: Clarify alert words documentation. 2023-03-21 15:49:16 -07:00
Tim Abbott
35440672a7 message_list: Rename confusing hide-date CSS class.
The previous hide-date CSS class had a semantic meaning of "this
recipient row has the same date as the previous one"; since we're now
having logic read that value, it's worth giving it a semantic name
that makes that code easier to understand.
2023-03-21 12:55:13 -07:00
Aman Agrawal
404f6a404a message_list: Fix duplicate date headers at the top of message feed.
Hide the date on date separator when it is above a sticky header; see
the comments for the full algorithm.
2023-03-21 12:55:13 -07:00
Joseph Ho
c8d043e12c popovers: Fix tooltip partially hidden by recipient bar when selected.
Previously, when a user view the message source of a message at the
very top with the blue box around, the tooltip for the button will
be partially hidden by the recipient bar. Ths cause is some legacy 
CSS from, for example, 3cd33c0fea,
which increased the z-index for the bodies of selected messages.

The intent of that code appeared to be something around handling overlaps
between unread indicators and the blue selected message box. It's logically
incorrect, and testing demonstrates that the blue box works fine next to unread
messages without this change, so we can safely remove these z-index values.
2023-03-21 12:47:47 -07:00
Anders Kaseorg
730eda60bc webpack: Disable webpack-dev-server overlay for runtime errors.
webpack-dev-server 4.12.0 introduced a global handler that shows a
full-screen overlay for all runtime errors, but it’s redundant with
our blueslip_stacktrace handler and less functional at this time.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-21 12:36:37 -07:00
Anders Kaseorg
6db1e75fb9 test_classes: Don’t spew BAN_CONSOLE_OUTPUT errors over failed tests.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-21 12:27:32 -07:00
Anders Kaseorg
34d7876cfd README: Update Ruff badge.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-21 11:46:20 -07:00
Alex Vandiver
8ad4ecb3a2 management: Add a command to send initial welcome bot messages. 2023-03-21 11:40:37 -07:00
palashb01
ac45a3f20d narrow_banner: Add a period at the end of the default banner.
This commit adds a period ('.') at the end of the default banner
in the narrow empty search for multiple filters. This is required
to maintain consistency among all banners, as for most banners, we
use punctuation at the end of the banner to create complete and
meaningful sentences.
2023-03-21 11:23:43 -07:00
palashb01
ce11657204 narrow_banner: Display title only for empty search with multiple filters.
This commit improves the display of the narrow banner when there are
multiple filters used in a narrow search and no results are found.
The banner will now only display the title 'No search results'
The node tests have been updated to reflect this change.
2023-03-21 11:23:43 -07:00
Hardik Dharmani
e07bb82704 js: Fix dependency cycle in overlays.js.
Removing browser_history.js import in overlays.js
helps to completely solve the dependency cycle issue for
importing dialog_widget.js in upload_widget.ts in PR #24426.

Removed the only use of browser_history in overlays.js
which was 'browser_history.exit_overlay()'cin open_settings
function by defining open_settings_overlay function in settings.js
and calling 'browser_history.exit_overlay()' in settings.js.

also removed overlays.js import in admin.js as the only use of
overlays was to call open_settings function which is now shifted
to settings.js and is called as settings.open_settings_overlay.
2023-03-21 11:22:11 -07:00
Hardik Dharmani
b722cf31cb js: Move popover.initialize to end of file.
Moved the initialize function in popover.js at end of file to
follow 'no-use-before-define' for function 'hide_all' being called
in initialize function and to follow convention to put
initialize at the end of the file.
2023-03-21 11:22:11 -07:00
Hardik Dharmani
2c30bbbf74 js: Fix dependency cycle in unread.js.
The import of recent_topics_ui.js from unread.js generates an import
loop. To remove this, we need to move the logic for rerendering recent
topics after update_message_for_mention out of the low-level unread.js
data module.

Since the logic was conditional on `content_edited` being true, and
that parameter is only passed in the message_events.js code path, we
can do this by just making the function return a boolean for whether
this rerender may be required, and moving the rerender logic to that
calling module.
2023-03-21 11:22:11 -07:00
Alya Abbott
b46e7ef78e help: Update "Trying out Zulip" documentation.
- Link to the new /try-zulip/ page instead of directly to CZO.
- Link to the communities directory.
- Tweak wording about creating a new organization.
2023-03-21 11:20:45 -07:00
Alya Abbott
b411c1bcf1 portico: Link to new /try-zulip page from /development-community. 2023-03-21 11:20:45 -07:00
Aman Agrawal
00505e9903 pm_list: Fix tooltips mutation handler.
The mutation handler was correct for user list in the right
sidebar but was incorrect for pms list in the left sidebar.

Since the left sidebar is updated differently, we need to
check for mutations on the element actually being updated.

This also required using a target node that is always present
for the pms list which otherwise throws an exception.
2023-03-21 10:53:25 -07:00
Aman Agrawal
05674f3ab5 pm_list_item: Convert pm_user_status to a class.
Since there are multiple elements that use pm_user_status, it
makes sense to have it as a class.
2023-03-21 10:53:25 -07:00
Lauryn Menard
611d36a8d1 help: Revert changes to "pm-with" and "group-pm-with" search filters.
In commit f3a67f0e31, we updated the documented search filters
for direct messages, but these had not been changed in the backend
or the frontend of the codebase and therefore the newly documented
filters do not work. Reverts the documentation to the previous
search filters.
2023-03-21 13:26:41 -04:00
Alex Vandiver
66de81425e portico: Use jQuery better to select the first integration.
The `.integration-lozenges` children may contain
non-`.integration-lozenge` elements; if there were no matching
integrations, attempting to fetch the css `display` property of those
failed.

Switch to using jQuery to find the full set of visible lozenges
directly; this does the right thing if there are no such elements.
2023-03-21 08:50:06 -07:00
Lauryn Menard
41ac95fe52 docs: Update "How it works" section in Documenting REST API endpoints.
Updates this section to use the shared `api-doc-template.md` as a
guide, as well as the current documentation for the `render-message`
endpoint. Previously, this section referred to a file that had been
removed with the transition to a shared template file.

Fixes #24485.
2023-03-20 17:42:04 -07:00
Joelute
4d55192e21 compose_typeahead: Add hint text to topic typeahead dropdown.
With the autocomplete dropdown, some users face trouble or uncertainty
while selecting topics. The autocomplete dropdown may encourage users
to find and select an existing topic rather than starting a new topic.
The changes adds a hint text to the topic typeahead dropdown to
encourage users to either start a new topic or select an existing
topic.

Fixes #23295.
2023-03-20 16:28:28 -07:00
Alya Abbott
13680651c5 docs: Rewrite guidelines for writing commit messages.
The focus is on making the instructions more specific and organized,
so that they are easier to follow.

Co-authored-by: Tim Abbott <tabbott@zulip.com>
2023-03-20 16:25:20 -07:00
Anders Kaseorg
3a27b12a7d dependencies: Switch to pnpm.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 15:48:29 -07:00
Anders Kaseorg
b3f9fdf99a dependencies: Upgrade JavaScript dependencies.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 15:48:29 -07:00
Anders Kaseorg
577d41023d dependencies: Remove unused postcss-mixins plugin.
Commit 7fc191d816 added this as
preparation for #19927, but we already have @extend from
postcss-extend-rule and don’t need both.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 15:48:29 -07:00
Anders Kaseorg
bd272149e6 dependencies: Add missing direct dependencies.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 15:48:29 -07:00
Anders Kaseorg
61f91f8503 tests: Mock autosize.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 15:48:29 -07:00
Anders Kaseorg
d5b2a667c5 message_view_header: Remove unused value for absent i18n placeholder.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 15:48:29 -07:00
Anders Kaseorg
13066e6406 styles: Fix dark-theme mixin in zulip.css.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 15:48:29 -07:00
Anders Kaseorg
ecde9066d7 stylelint: Fix declaration-block-no-redundant-longhand-properties.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 15:48:29 -07:00
Anders Kaseorg
790c8a1582 stylelint: Fix at-rule-empty-line-before.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 15:48:29 -07:00
Lauryn Menard
a9b3a9c673 narrow: Use dict to map operator to by_* method in NarrowBuilder.
Updates the logic for identifying the method to use to extend the
query for the given term from a narrow to use a dictionary that
maps the operator string to the by_* method in the NarrowBuilder
class.

Previously, the by_* method was determined by building a string
based on the operator string and replacing dashes with underscores.
2023-03-20 15:37:09 -07:00
Joelute
ff6ff1e014 integration: Add branch names to Azure Devops merged PR event.
This is a follow up to #24673, we want to modify every webhook
events to follow the same pattern and consistency where branch name
should only show on opened and merged events.
2023-03-20 12:33:47 -07:00
Anders Kaseorg
cd3c4cd991 styles: Extend help sidebar heading links like list links.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 11:35:53 -07:00
Alex Vandiver
33b61d9dc4 invite: Be more fair about the no-messages-sent warning flag.
The RealmCount statistics will be empty if the realm was created since
the last daily aggregation.  In cases where the daily stats have no
rows, it is likely fast enough to do the real count in the messages
table.  This stops unduly penalizing folks who have actually sent
messages, and are just inviting people within the first day.
2023-03-20 11:35:19 -07:00
Alex Vandiver
e6eaa9a7f6 webhooks: Handle explicit null context_line in Sentry. 2023-03-20 11:34:17 -07:00
Lauryn Menard
8fb001ce92 docs: Add tip about cross-linking between GitHub and dev community.
Adds a point in the "Tips and best practices" section of the
article on writing reviewable pull requests about cross-linking
between GitHub pull requests and conversations in the Zulip
development community.
2023-03-20 11:33:44 -07:00
Satyam Bansal
6323fc9571 api_docs: Fix outdated python code snippet for webhook integrations.
The python code snippet referred to exactly doesn't exists.
This commit changes it to the exact code present in
"zerver/lib/integrations.py", which has a type annotation.
2023-03-20 11:30:38 -07:00
Alex Vandiver
311a76ed1c Move QOS configuration into connection, not queue verification.
Prior to aa032bf62c, QOS prefetch was set on every `publish` and
before every `start_json_consumer` -- which had a large and
unnecessary effect on publishing rates, which don't care about the
prefetch QOS settings at all, much less re-setting them before every
publish.

Unfortunately, that change had the effect of causing prefetch settings
to almost never be respected -- since the configuration happened in
`ensure_queue`s re-check that the connection was still live.  The
initial connection is established in `__init__` via `_connect`, and
the consumer only calls `ensure_queue` once, before setting up the
consumer.

Having no prefetch value set causes an unbounded prefetch; this
manifests itself as the server attempting to shove every event down to
the worker as soon as it starts consuming; if the client cannot keep
up, the server closes the connection.  The worker observes the
connection has been shut down, and restarts.  While this does make
forward progress, it causes large queues to make progress more slowly,
as they suffer from sporadic restarts.

Shift the QOS configuration to when the connection is set up, which is
a more sensible place for it in general -- and ensures that it is set
on consumers and producers alike, but only once per connection
establishment.
2023-03-20 11:28:29 -07:00
Anders Kaseorg
ad357b18c0 bootstrap: Remove CSS hacks for IE.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 11:27:39 -07:00
Anders Kaseorg
70e9fc8b12 postcss: Enable postcss-preset-env.
This gives more comprehensive support of new and future CSS features
that can be transpiled for older browsers.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 11:26:30 -07:00
Anders Kaseorg
5cdf38b1f7 styles: Use standard CSS nesting syntax.
CSS nesting is being standardized with the syntactic restriction that
the nested selector cannot start with an identifier.  This was
necessary to allow the syntax to be parsed without lookahead.

https://webkit.org/blog/13813/try-css-nesting-today-in-safari-technology-preview/
https://www.w3.org/TR/css-nesting-1/#syntax

The postcss-nesting plugin used by postcss-preset-env enforces this
restriction.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 11:26:30 -07:00
Anders Kaseorg
f03b609bfd Revert "minor: Add z-index to message_time class."
This reverts commit e16e7630e6 (#19542).

This was compiling to

    a.messagebox-content .message_time {
        z-index: 1;
    }

which did nothing, because .messagebox-content is a <div>, not an <a>.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 11:26:30 -07:00
Anders Kaseorg
182969fba1 integrations_dev_panel: Fix unsafe use of innerHTML.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-20 10:31:15 -07:00
Anders Kaseorg
b21d93cdd2 help: Fix import-self-hosted-server-tips indentation.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-18 00:09:43 -07:00
Anders Kaseorg
14352547cd install-transifex-cli: Upgrade Transifex CLI from 1.6.4 to 1.6.5.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-17 13:11:02 -07:00
Anders Kaseorg
d4cc50c468 web: Remove inappropriate $ prefix from HTML variables.
Only jQuery object variables should be prefixed with $.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-17 11:35:43 -07:00
Alex Vandiver
fa6daee4e1 markdown: Fix use of pure_markdown for non-pure markdown rendering.
`render_markdown_path` renders Markdown, and also (since baff121115)
runs Jinja2 on the resulting HTML.

The `pure_markdown` flag was added in 0a99fa2fd6, and did two
things: retried the path directly in the filesystem if it wasn't found
by the Jinja2 resolver, and also skipped the subsequent Jinja2
templating step (regardless of where the content was found).  In this
context, the name `pure_markdown` made some sense.  The only two
callsites were the TOS and privacy policy renders, which might have
had user-supplied arbitrary paths, and we wished to handle absolute
paths in addition to ones inside `templates/`.

Unfortunately, the follow-up of 01bd55bbcb did not refactor the
logic -- it changed it, by making `pure_markdown` only do the former
of the two behaviors.  Passing `pure_markdown=True` after that commit
still caused it to always run Jinja2, but allowed it to look elsewhere
in the filesystem.

This set the stage for calls, such as the one introduced in
dedea23745, which passed both a context for Jinja2, as well as
`pure_markdown=True` implying that Jinja2 was not to be used.

Split the two previous behaviors of the `pure_markdown` flag, and use
pre-existing data to control them, rather than an explicit flag.  For
handling policy information which is stored at an absolute path
outside of the template root, we switch to using the template search
path if and only if the path is relative.  This also closes the
potential inconsistency based on CWD when `pure_markdown=True` was
passed and the path was relative, not absolute.

Decide whether to run Jinja2 based on if a context is passed in at
all.  This restores the behavior in the initial 0a99fa2fd6 where a
call to `rendar_markdown_path` could be made to just render markdown,
and not some other unmentioned and unrelated templating language as
well.
2023-03-17 08:46:25 -07:00
Zixuan James Li
24f24d236d cache: Use QuerySetAny for isinstance check.
Previously, `QuerySet` does not support isinstance check since it is
defined to be generic in django-stubs. In a recent update, such check is
possible by using `QuerySetAny`, a non-generic alias of `QuerySet`.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-03-17 08:38:20 -07:00
Alex Vandiver
f2a20b56bc puppet: Enable sentry hooks for production and staging. 2023-03-17 08:10:31 -07:00
Aman Agrawal
c4903fe85a message_row: Fix rewrapping message lines after receiving ack.
Since the message time of locally echoed messages were not displayed
and their width was restricted by `notvisible` CSS class, it
resulted in width available to message text changing after the message
was successfully sent and the time was displayed.

To fix this, we just try to set opacity of the message time to 0
for locally echoed messages.
2023-03-17 08:10:13 -07:00
Tim Abbott
93d0a6b1ba version: Add missing API feature level bump.
This should have been done in
042bbf2936.
2023-03-16 14:55:48 -07:00
Anders Kaseorg
3109ee8015 eslint: Enable @typescript-eslint/recommended plugin.
This is not automatically enabled by
@typescript-eslint/recommended-requiring-type-checking for some
reason.

https://typescript-eslint.io/linting/configs/#recommended

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-16 13:24:27 -07:00
Anders Kaseorg
96e657a954 install-node: Upgrade Node.js from 18.14.1 to 18.15.0.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-16 12:32:28 -07:00
Alex Vandiver
330141f55d invites: Switch new LIMITED-plan heuristic to enforcing. 2023-03-16 11:41:49 -07:00
Alex Vandiver
50a2a54393 test_invite: Rework and expand invitation limit tests.
This adds tests for more corner cases, in exchange for dropping the
query count tests, which were of dubious utility.  It also adds the
time-machine library to mock the current time to test that the limits
do expire.
2023-03-16 11:41:49 -07:00
Alex Vandiver
6971c6d62d test_invite: Just import django.core.mail and use it. 2023-03-16 11:41:49 -07:00
Alex Vandiver
9e972bc82c test_invite: Clarify by filters that no *new* ScheduledEmails are made. 2023-03-16 11:41:49 -07:00
Alex Vandiver
83fdc59304 test_invite: Remove a totally uninteresting assert. 2023-03-16 11:41:49 -07:00
Alex Vandiver
566806fb41 test_invite: Fix a docstring. 2023-03-16 11:41:49 -07:00
Alex Vandiver
695730b609 test_invite: Explicitly test that no emails are actually sent. 2023-03-16 11:41:49 -07:00
Alex Vandiver
34c8cd1b74 tests: Split out test_invite from test_signup.
There is no good reason for this single test file to be more than 6k
lines.
2023-03-16 11:41:49 -07:00
Joelute
869cb6dc34 integration: Modify branch names on pull request events.
Previously when Github bot receives an update pull request event,it
will produce the following message:

user updated PR #1 Start writing unit tests from test to main

"from test to main" is improper and causes unnecessary confusion.
These changes will update the logic to remove the phrase from
update events. These changes will also include the org: prefix to
the branch names to keep it consistent with Github and further
reduce confusions on branch names.

Fixes #24536.
2023-03-16 11:31:48 -07:00
Lauryn Menard
c446f86173 rendered-markdown: Move pre element CSS reset rules.
Moves CSS reset rules for `pre` elements to the `rendered_markdown`
class block.

Adds the `rendered_markdown` class to the scrollbar rules.
2023-03-16 11:30:04 -07:00
Lauryn Menard
2d8283e579 rendered-markdown: Move inline code CSS reset rules.
Moves the CSS reset rules for inline code elements to be in the
`rendered_markdown` class block.
2023-03-16 11:30:04 -07:00
Lauryn Menard
d98ba32588 rendered-markdown: Copy anchor tag CSS rules from bootstrap.
Prep commit for moving CSS reset rules for inline code elements
in `rendered_markdown.css` to the `rendered_markdown` class rules.
2023-03-16 11:30:04 -07:00
Anders Kaseorg
83b6866018 templates: Replace unnecessary {{#tr}} blocks with {{t}} helper.
`{{#tr}}` supports HTML and allows translators to accidentally
introduce HTML, so it’s safer to use the `{{t}}` helper unless HTML is
needed.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-16 11:26:45 -07:00
Anders Kaseorg
8cd78d356f templates: Allow the same line-wrapping in {{t}} as in {{#tr}}.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-16 11:26:45 -07:00
Anders Kaseorg
ba5a2c8866 templates: Support context variables in Handlebars {{t}} helper.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-16 11:26:45 -07:00
Prakhar Pratyush
042bbf2936 UserTopic: Set visibility_policy or delete UserTopic row without error.
This commit updates 'set_user_topic_visibility_policy_in_database'
to not raise an error when deleting a UserTopic row and the user
doesn't have a visibility_policy for the topic yet, or when setting
the visibility_policy to its current value.

Also, it includes the changes to not send unnecessary events
in such cases.
2023-03-16 10:55:54 -07:00
David Rosa
f783e8b6ca help: Add a dedicated page on how to add emphasis to text.
- Adds "Via Markdown" instructions block.
- Adds "Via compose box buttons" instructions block.

Fixes part of #24209.
2023-03-16 10:51:57 -07:00
David Rosa
2e2747dfac help: Update Message formatting documentation.
- Updates intro paragraph in Message formatting page.
- Change Markdown syntax -> Markdown formatting.
- Reorders items in the Writing messages section of the left sidebar.
2023-03-16 10:51:57 -07:00
David Rosa
b66d8dfd90 help: Add new "Writing messages" section.
Moves pages from "Sending messages" to a new help center section
to document what you can do in a Zulip message, and make this
information easy to find.

Fixes #24208.
2023-03-16 10:51:57 -07:00
Prakhar Pratyush
80a50741e5 help: Update 'Include organization name in subject line' documentation.
Document new "Automatic" configuration option.

This commit updates the help page 'email-notification.md' to reflect
the change in zulip#24075 from a checkbox to a dropdown for the
'Include organisation name in subject line' setting.
2023-03-16 10:49:07 -07:00
Zixuan James Li
ee26590528 util: Implement a safer type narrowing helper for arrays.
This implements a helper that parses an array that possibly contains
falsy elements into undefined when it does have at least one falsy
element, or returns a type narrowed array of non-undefined elements.

We use this in people.js, which achieves the same check we have using
"arr.every(Boolean)", but with type safety since it is not based on
validation.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-03-16 10:47:12 -07:00
Zixuan James Li
cd97c497bc people: Do not return undefined for is_cross_realm_email.
It would be semantically more straightfoward to return false when the
check does not succeed.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-03-16 10:47:12 -07:00
Zixuan James Li
111f2f5e9d people: Do not return false for group_pm_with_user_ids.
Returning undefined as opposed to false makes more sense in the context
of this function. This also will simplify the type annotation.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-03-16 10:47:12 -07:00
Zixuan James Li
04782a48e2 settings_data: Extract TimePreferences.
This type will get used in people.ts in "get_user_time_preferences".

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-03-16 10:47:12 -07:00
Zixuan James Li
215f776f0e dependencies: Add @types/blueimp-md5.
This is a dependency of people.js. We include the stubs to prepare it
for a conversion to TypeScript.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-03-16 10:47:12 -07:00
Anders Kaseorg
d693b53aa6 templates: Fix &nbsp; syntax.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-15 16:34:32 -07:00
Aman Agrawal
64584557b2 streams_list: Don't zoom out user when stream list rearranges.
Fixes #23588

When a new message arrives in an inactive stream, it will lead
to stream being marked as active from inactive which leads to
stream list being rearranged which zooms out the user since the
active stream is reset momentarily. To avoid this, we delay the
stream list redraw until user zooms out and only update the topics
list.
2023-03-15 16:17:24 -07:00
Aman Agrawal
f8e093c730 left_sidebar: Highlight inactive streams when narrowed to.
Having active streams greyed out can be confusing to the user. This
is especially useful when the app is still fetching messages on
a reload and the active stream has no messages and is thus marked
as `inactive`.
2023-03-15 16:17:24 -07:00
Tim Abbott
b9d1efcd1b i18n: Update translation data from Transifex. 2023-03-15 15:57:26 -07:00
Zixuan James Li
234771d5db integrations: Add a link to GitHub webhooks documentation.
The list of supported events for filtering itself does not document what
each of the events does. Adding a link to GitHub's documentation would
be a pointer to get people started. But ideally we need to establish a
better system to document the events in general.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-03-15 15:37:42 -07:00
Alya Abbott
584124bb45 help: Improve "Deactivate your account" help page. 2023-03-15 15:32:47 -07:00
Alex Vandiver
1a65315566 puppet: Switch teleport to running under systemd, not supervisord.
There is no reason that the base node access method should be run
under supervisor, which exists primarily to give access to the `zulip`
user to restart its managed services.  This access is unnecessary for
Teleport, and also causes unwanted restarts of Teleport services when
the `supervisor` base configuration changes.  Additionally,
supervisor does not support the in-place upgrade process that Teleport
uses, as it replaces its core process with a new one.

Switch to installing a systemd configuration file (as generated by
`teleport install systemd`) for each part of Teleport, customized to
pass a `--config` path.  As such, we explicitly disable the `teleport`
service provided by the package.

The supervisor process is shut down by dint of no longer installing
the file, which purges it from the managed directory, and reloads
Supervisor to pick up the removed service.
2023-03-15 17:23:42 -04:00
Tim Abbott
d342f70440 api_docs: Clarify API changelog brevity. 2023-03-15 08:18:06 -07:00
Tim Abbott
11d3852f58 api_docs: Add missing detail in changelog entry 152. 2023-03-15 08:18:06 -07:00
Palash Baderia
bf51277226 popovers: Add confirmation modal for marking all messages as read.
This commit adds a confirmation modal with loading spinner for
marking all messages as read.

New file: confirm_mark_all_as_read.hbs
Fixes: #24624
2023-03-15 08:17:41 -07:00
Abhijeet Prasad Bodas
ba0dd70904 user_topics: Introduce visibility policy enum subclass in models.py.
This commit gives more readable code than using the `VISIBILITY_POLICY`
prefix.
This commit does not alter the database schema.
2023-03-14 17:50:45 -07:00
Abhijeet Prasad Bodas
4d5e12961a user_topics.js: Rename visibility_policy_inherit -> inherit.
This makes our frontend code less verbose, and makes this name
consistent with the names of other visibility policies (which
do not have the `VISIBILITY_POLICY` prefix).
2023-03-14 17:50:45 -07:00
Prakhar Pratyush
ae72777c77 user_settings: Automate 'Include realm name in message email subject'.
Currently, there is a checkbox setting for whether to
"Include realm name in subject of message notification emails".

This commit replaces the checkbox setting with a dropdown
having values: Automatic [default], Always, Never.

The Automatic option includes the realm name if, and only if,
there are multiple Zulip realms associated with the user's email.

Tests are added and(or) modified.

Fixes: #19905.
2023-03-14 17:48:57 -07:00
Prakhar Pratyush
ab8222c4ae custom_check: Update FILES_WITH_LEGACY_SUBJECT set.
This commit adds 'zerver/lib/email_notifications.py'
to the FILES_WITH_LEGACY_SUBJECT set.

Because the file can have 'subject' in the email sense,
it should be exempted from the 'avoid subject as a var' lint rule.
2023-03-14 17:48:57 -07:00
SameepAher
079eb6a4da keyboard_ui: Add a new keyboard shortcut '='.
Added new keyboard shortcut '=' to toggle the first emoji on the
selected message if it exists, else do nothing.

Fixes: #24256.
2023-03-14 14:17:54 -07:00
Daniil Fadeev
a80f96dde6 reactions: Prevent multiple simultaneous requests for reaction update.
Prevents multiple simultaneous requests to the API when adding or
removing reactions. This commit blocks emoji state changes until
the request is executed.

Fixes part of #21213
2023-03-14 13:53:42 -07:00
Lauryn Menard
b9dd109e93 docs: Edit pull-requests.md and reviewable-prs.md.
Fixes a few typos / errors in commit a633890d8 that updated
these documentation articles on pull requests.

Also adjusts language around screenshots to match what we use
in the pull request template on GitHub for the zulip server and
web app repository.
2023-03-14 13:24:18 -07:00
Sahil Singh
19ae2f9180 i18n: Add translation tags to loading message.
Previously, no translation tag was present for 'Loading…' message.

Fix this and also switch to using the … character instead of 3
. characters.
2023-03-14 13:23:48 -07:00
Sahil Singh
37a0c9c1b9 settings: Fix alignment of loading message.
The loading message that appears at the
top of the page when loading the Bots/
Uploaded Files/Users/Deactivated Users
page under Settings appears to be misaligned.

We fix this by changing the height of the
loading-spinner to match the line-height
of loading text.
2023-03-14 13:23:48 -07:00
Alya Abbott
b06fe89fc2 portico: Link to new "Try Zulip" page from TUM case study. 2023-03-14 13:21:09 -07:00
Alya Abbott
005ca2b033 portico: Add landing page about trying Zulip by visiting chat.zulip.org. 2023-03-14 13:21:09 -07:00
Sahil Batra
bd9d1b9158 dropdown_list_widget: Set dropdown menu wide enough to fit options.
We now set the width of dropdown menu opened for dropdown-list-widget
elements such that it is enough for all the options. For smaller
screens the dropdown menus are wide since the settings panel and
modal content can be scrolled horizontally.
This change is done only for dropdown-list-widget elements in
"Organization settings" panel and in bot-owner widget in bot edit
modal.

We don't do this change for move topic modal now as it cannot be
scrolled horizontally and appears beneath the button due to position
property.
2023-03-14 12:53:41 -07:00
Sahil Batra
7d9fe8fd23 settings: Set width of dropdown toggle same as select elements.
This commit sets width of toggle buttons for dropdown list
widget elements same as select elements in both organization
settings. We set the min-width to be 325px and max-width to
100%.
2023-03-14 12:53:41 -07:00
Sahil Batra
d8750d69ae subscriptions: Fix scrolling of stream edit panel in narrow screens.
The height of stream edit panel in stream settings panel was set
incorrectly for width less than "$md_min" so one could not scroll
to the bottom. This commit fixes the height to set it same as it
is for normal width screens since the height of elements above
the scrollable container does not change with screen width.
2023-03-14 12:53:41 -07:00
Sahil Batra
0beac2f221 settings: Make settings page horizontally scrollable.
We make settings page horizontally scrollable such that
the user can see the complete dropdown by scrolling in
case the dropdown is wider than the screen.
2023-03-14 12:53:41 -07:00
Sahil Batra
882f39443a stream_settings: Set width of dropdown list widget for long options.
This commit fixes width of dropdown-list-widget used for
can_remove_subscribers_group stream setting. The button width
is set as per the selected option with min-width being 325px.
The dropdown-menu width is set as per the longest option and
the menu becomes scrollable if the whole menu doesn't fit on
screen.

We also change the position of dropdown-menu slightly such that
its top border matches with the top border of button.
2023-03-14 12:53:41 -07:00
Sahil Batra
610bd5951d streams: Set width of select elements in stream settings page.
This commit sets width of select elements in stream settings
page to "auto" such that the width adjusts to fit the options
as required in different languages and we also keep minimum
width of 325px to maintain consistency of width across elements
in the page to not look ugly.
2023-03-14 12:53:41 -07:00
Sahil Batra
80bd425133 settings: Set width of select elements in settings page.
This commit sets width of select elements in settings page
to "auto" such that the width adjusts as required in different
languages and we also keep minimum width of 325px to maintain
consistency of width across elements in the page to not look
ugly.

We also remove the CSS for overriding width of various role
based select elements and a couple of others which was added
to adjust the widths for different languages. Since we have
now set the width to auto, the browser will automatically
adjust width to fit the options.
2023-03-14 12:53:41 -07:00
Chris Bobbe
2a6c423d35 docs: Update mobile/desktop apps' compatability threshold to 4.0, from 3.0
Zulip Server 4.0 is now 22 months old, which is more than 18 months.
Per the general policy in the "Client apps" section below, that
means it's time to drop support for older versions.

We released 5.0 near the end of 2022-03, so near the end of 2023-09
we can update this further to say 5.0.
2023-03-13 22:08:20 -07:00
Steve Gattuso
36bf49bc8d hotspots: Keep track of open state in js.
Picking up the work from where 65aa1070 left off, this commit adds a
meta state to the hotspots module. This allows us to keep track of
whether or not a hotspot's overlay is currently open from within
javascript. With this in place, is_open is then modified to look at this
new state rather than query the DOM, providing a significant performance
boost.

Fixes #24261
2023-03-13 17:14:02 -07:00
Steve Gattuso
53e947e501 hotspots: Move overlay click handler into module.
In preparation of fixing the performance issues associated with
hotspots.is_open, this commit moves the various handlers for hotspots'
overlay from click_handlers.js into the hotspots module. This will set
us up to cleanly keep track of the open state from within the module
(instead of needing to look at the DOM).
2023-03-13 17:14:02 -07:00
Joelute
682192ec3c help: Update broken link in import from slack.
Previously, the help center has a broken link that just points to
Slack's help center. With this change, we will remove and replace the
link to their OAuth scope section.
2023-03-13 16:57:02 -07:00
sbansal1999
5047f1a81d ts: Convert portico/tabbed-instructions.js to TypeScript. 2023-03-13 12:37:31 -07:00
Lauryn Menard
213d0f4990 create-user: Remove notifications sent to admin realm.
Removes the notification message that was sent if a stream named
"signups" exists in the `settings.SYSTEM_BOT_REALM`. This was a
undocumented feature that would send a notification message when
a new user registered with a Zulip organization that was hosted
by an admin realm like Zulip Cloud.

This removes two database queries when a new user is created: one
to get the system bot realm and the other to get the notification
bot in said realm.

Note that there are still notification messages sent when a new
organization is registered with the admin realm if the "signups"
stream exists.
2023-03-13 12:28:26 -07:00
sbansal1999
9e4529c48b docs: Change extensions from .js to .ts for some filenames.
Since we are migrating from JavaScript to TypeScript
some files in the documentation are still with their
old extension. This commit changes those file extensions.
2023-03-12 15:17:53 -07:00
Aman Agrawal
dbe930394f footer: Integrate newly designed footer.
This footer was designed and mostly written by @terpimost.

This adds a new design of the footer for both corporate and not
corporate enabled pages.
2023-03-10 17:34:15 -08:00
Aman Agrawal
e8cefe181a team: Don't throw error for team page in dev environment.
In dev setup, contributors list is empty so loading the page
throws an error, this is intended to fix that.
2023-03-10 17:34:15 -08:00
Anders Kaseorg
c41fa0dfd0 styles: Fix layout shifting for highlighted help sidebar link.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-10 14:43:30 -08:00
Prakhar Pratyush
1b7cbd9ef0 UserTopic: Refactor 'do_set_user_topic_visibility_policy'.
This commit refactors 'do_set_user_topic_visibility_policy'
to remove the if/else block and just have a single call to
'set_user_topic_visibility_policy_in_database'.

The branching out behaviour based on the user_topic
visibility_policy is reduced to one place, i.e.,
'set_user_topic_visibility_policy_in_database'.
2023-03-10 14:39:14 -08:00
Akarsh Jain
b0928f55e7 streams: Add stream symbol to unsubscribe confirmation modal.
This commit adds the appropriate stream symbol to the
heading of the "Unsubscribe from stream" confirmation modal.

Fixes: #23953
2023-03-10 14:37:55 -08:00
sbansal1999
5f4bdfe6bc ts: Convert css_variables.js to TypeScript. 2023-03-10 14:35:23 -08:00
Ujjawal Modi
0eca9cb319 bots: Improve bots permission banner.
Added a separate template file for banner
messages in bots panel under personal and organisation
settings.

Banners for bots panel under personal
settings are shown only when user cannot add bots.
Banners for bots panel under organisation settings are shown
only when user cannot add bots or user is administrator.

Fixes #24155
2023-03-09 17:52:31 -08:00
Alya Abbott
560ce87063 help: Tweak documentation on migrating from other chat tools.
- Add a note about the Slack-compatible webhook.
- Make page more consistent with documentation style guidelines.
2023-03-09 17:50:50 -08:00
David Rosa
b9f7b64793 help: Add instructions for viewing status.
- Adds instructions blocks for web/desktop and mobile.
2023-03-09 16:14:14 -08:00
palashb01
dee63680df docs: Update time format and Emoticon help page.
Updated the title and description in the 'enable-emoticon-translation'
file and renamed the file accordingly. Added a new bullet point for
'time format' in the 'configure-new-user-settings.md' file and updated
the sidebar index by replacing the title 'Use 24-hour time' with
'Change the time format'.
2023-03-09 16:12:45 -08:00
palashb01
f081c4abfd display_settings: Add fade to emoji-theme & user-list-style banners.
Added a 1000ms fadeout timer to the success banners for the 'Emoji'
theme and 'user-list-style' checkbox, to match the other banners in
display settings.

Fixes: #23288.
2023-03-09 16:12:45 -08:00
palashb01
189ceee8f0 display_settings: Move the 'user-list-style' out of Emoji section.
Move the 'user-list-style' checkbox from the 'Emoji' section to the
'Advanced' section, and update the 'settings_display.js' file by
replacing the 'theme-settings' classname with 'advanced-settings'
classname to display the success banner of 'user-list-style' checkbox
with the 'Advanced' title.
2023-03-09 16:12:45 -08:00
palashb01
3dd84910f4 display_settings: Rename and reorder the theme dropdown menu.
Rename 'Sync with computer' to 'Automatic (follows system settings)',
'Light Theme' to 'Light' and 'Dark Theme' to 'Dark', and rename the
color scheme label to 'Theme'.

Reorder the dropdown menu to have light theme before dark theme.
2023-03-09 16:12:45 -08:00
palashb01
af07db7971 display_settings: Rename 'Theme' section to 'Emoji'.
Rename the 'Theme' section to 'Emoji'. Since there is no 'Theme' section
anymore, replace the 'theme-settings' classname with
'emoji-display-settings' in the 'settings_display.js' file.

The existing "Theme" selector dropdown is moved from the now the
'Emoji' section to the 'General' section.
2023-03-09 16:12:45 -08:00
palashb01
2067c71a93 display_settings: Rename and update the 'language-time' section.
Rename the 'language-time' title to 'General'. As the 'language-time'
section no longer exists, replace the 'lang-time-settings' classname
with the 'general-settings' classname in the 'settings_display.js' file.

Updated the 'change-the-time-format.md' and 'change-your-language.md'
documentation files to reflect these changes.

To pass the puppeteer_test Replaced the 'lang-time-settings-status'
classname to 'general-settings-status' inside 'settings.test.ts' file.
2023-03-09 16:12:45 -08:00
David Rosa
49081b9682 help: Move "Configure how links open" to the Apps section.
- Moves page to the "Apps" section of the sidebar.
- Adds "in mobile apps" to the top-of-page title.

Follow-up to #24447.
2023-03-09 16:11:51 -08:00
Anders Kaseorg
8102556578 ci: Run generate-failure-message from the right path.
This was broken by commit 3a0620a40c
(#23719).

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-09 13:20:24 -08:00
Hardik Dharmani
570c9e260b overlays: Fix dependency cycle between popover.js and overlays.js.
This is a Prep PR for #24426.

Removes direct dependency cycle between 'popover.js'
and overlays.js by creating popover.initialize method
called from 'ui_init.js' that calls
overlays.register_pre_open_hook(hide_all) and
overlays.register_pre_close_hook(hide_all).

Created a function call_hook that loop call all
registered hooks at the start of 'open_overlay' and
'close_overlay'.
2023-03-09 10:42:27 -08:00
Anders Kaseorg
3bfbfb014a zilencer: Switch a log message back from %r to %s.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-08 22:56:55 -08:00
Anders Kaseorg
2d9b2a2a05 models: Remove type prefixes from __str__ values.
The Django convention is for __repr__ to include the type and __str__
to omit it.  In fact its default __repr__ implementation for models
automatically adds a type prefix to __str__, which has resulted in the
type being duplicated:

    >>> UserProfile.objects.first()
    <UserProfile: <UserProfile: emailgateway@zulip.com <Realm: zulipinternal 1>>>

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-08 22:56:55 -08:00
Anders Kaseorg
f66136fcc2 zulip_tools: Improve error for run subprocess killed by signal.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-08 22:10:25 -08:00
Manas Jayaswal
3e24a05e66 settings: Improve wording of "Show API key" modal.
This commit changes the "Show API key" modal to use a more intuitive
description of the user's password field, and also to put the reset password
option, which should be the less common case, at the end.

Fixes: #24506.
2023-03-08 18:48:37 -08:00
David Rosa
010b362b29 help: Add “Configure how links open” page.
- Documents "Open links with in-app browser" option.
2023-03-08 15:56:04 -08:00
Lauryn Menard
be5954270c landing-page: Add section on chat.zulip custom linkifiers.
Adds a section in the development community norms about using the
custom linkifiers in chat.zulip for the different Zulip project
repositories on GitHub.
2023-03-08 14:24:49 -08:00
Aman Agrawal
c928c87645 google_analytics: Track realm registration separately from user signup.
While the function which processes the realm registration and
signup remains the same, we use different urls and functions to
call the process so that we can separately track them. This will
help us know the conversion rate of realm registration after
receiving the confirmation link.
2023-03-08 11:34:36 -08:00
N-Shar-ma
6a4c12b41e drafts: Space draft message content from restore draft button by 5px.
When the 1st line of a draft message took up the maximum horizontal space
possible, the last character was way too close to the pencil icon. More
noticeably, when a message began with a code block, it's right edge would
touch the icon.

To space the message contents and the restore draft button, now a margin
of 5px has been added to the draft message content. This makes the message
content narrower by 5px.
2023-03-08 11:33:53 -08:00
SameepAher
7f9fccedff css: Fix search bar width in right sidebar.
Remove old broken css which incorrectly set the width of the user list
filter bar in the right sidebar, for devices whose width is lesser than
md.
2023-03-07 16:50:30 -08:00
Aman Agrawal
b0a468907b people: Add function get participants from user_ids_string.
This implements the TODO in recent_senders.
2023-03-07 15:43:03 -08:00
Aman Agrawal
e6f3ffb946 recent_senders: Fix twice sent user ids in PM to self case.
This caused double user avatar to appear in recent conversations
for when showing user PM to self.
2023-03-07 15:43:03 -08:00
Lauryn Menard
a633890d87 docs: Update documentation for tips when writing pull request comments.
Adds a 'Tips and best practices' section to the documentation on
writing reviewable pull requests.

Also, updates step 3 of the documentation on creating pull requests
to link to the new section and to not have an out-of-date screenshot
of the GitHub pull request template.
2023-03-07 15:40:04 -08:00
N-Shar-ma
ce68911ab2 hashchange: Ensure no duplicate entries in browser history.
Until now, whenever the hash was updated using the `set_hash` function,
the new url was always pushed into the browser history, even if the current
hash was same as the new hash. This lead to multiple duplicate entries in
the browser history, when using the `z` hotkey to zoom to a message
repeatedly, which is very inconvenient when navigating through history.

This is now fixed by simply returning prematurely from `set_hash` if the
new hash is same as the current one. This fix will also prevent any future
features like `z` from causing duplicate browser history entries.

Fixes: #24468.
2023-03-07 15:39:36 -08:00
evykassirer
6581276a87 search css refactor: Nest media queries. 2023-03-07 15:38:11 -08:00
evykassirer
0a7fbc7085 search css refactor: Move search-related selectors out of media queries. 2023-03-07 15:38:11 -08:00
evykassirer
1df3b4f86f search: Rename .search_button to more correct .search_close_button. 2023-03-07 15:38:11 -08:00
evykassirer
3d3d00ab8e search css refactor: Split pill searchbox code into its own section. 2023-03-07 15:38:11 -08:00
evykassirer
a030fe40ac search css refactor: Split up general media query. 2023-03-07 15:38:11 -08:00
evykassirer
f1e6f4b5dd search css refactor: Move relevant css from zulip.css. 2023-03-07 15:38:11 -08:00
evykassirer
caba06e93d global css: Convert SASS variables to CSS custom properties. 2023-03-07 15:38:11 -08:00
Hardik Dharmani
e61a092f1e stream_settings: Fix save/discard widget on narrow screens.
In narrow screens, the save/discard widget was incorrectly shown
even with no changes, due to the CSS intended to switch it from `inline-block` 
to `block display.

Fixed by adding `display: none` to `.hide` class for @media(width < 575px)
to hide buttons on screen width less than 575px.

Fixes #24589.
2023-03-07 15:37:24 -08:00
Sahil Batra
0488dfdd9e openapi: Add links to email_address_visibility help documentation. 2023-03-07 15:11:28 -08:00
Sahil Batra
a48faec887 create_user: Refactor notify_created_user function.
This commit refactors the notify_created_user function to
call format_user_row twice with different parameters instead
of modifying the person object returned by format_user_row.

This change makes the code somewhat more easy to understand
than it was before.
2023-03-07 15:11:03 -08:00
Alex Vandiver
a06a699c35 invites: The aggregate is null if there are no rows to sum. 2023-03-07 15:04:39 -08:00
Alex Vandiver
36da7783ce invites: _max_invites is currently never None.
dc1eeef30a made the column nullable, with the meaning for null of
"use the current `settings.INVITES_DEFAULT_REALM_DAILY_MAX`."
However, 8a95526ced switched to calling `do_change_plan_type` during
realm creation, which sets `realm.max_invites` based on the plan type,
thus ensuring that no new realms have their `_max_invites` set to
null.

Check `max_invites` instead of `_max_invites`.  This requires test
adjustments for the fact that `apply_invite_realm_heuristics` is now
run.
2023-03-07 15:04:39 -08:00
Alex Vandiver
75138102f4 invites: Extract new realm invitation heuristic. 2023-03-07 15:04:39 -08:00
Alya Abbott
46fd215893 help: Link to /apps from help center. 2023-03-07 15:03:49 -08:00
Alya Abbott
dbf92c4e2f help: Drop outdated "Zulip in a terminal" help page. 2023-03-07 15:03:49 -08:00
Alya Abbott
d23e48441a help: Improve Supported browsers article.
- Simplify explanations, and make them consistent with documentation
  style guide.
- Add related articles.
2023-03-07 15:03:49 -08:00
Alex Vandiver
a253c478f6 test_classes: Provide path to test-backend for ease of copy/paste. 2023-03-07 15:02:31 -08:00
Alex Vandiver
739d527b16 sentry: Enable reporting on portico and other unauth pages. 2023-03-07 15:01:27 -08:00
Alex Vandiver
b04843e2f9 sentry: Consistently use "(root)" for empty realm in user info. 2023-03-07 15:01:27 -08:00
Alex Vandiver
cd288af4d5 sentry: Better URL filtering.
Always add `webpack_public_path` to all of the URL filters, and make
it a regex.  Also adjust to respect undef realm_uri, such as when a
spectator.
2023-03-07 15:01:27 -08:00
Lauryn Menard
dfb9f74017 api_docs: Add page documenting HTTP headers in the api docs.
Adds a page to the general api documentation about HTTP headers,
so that information about the special response headers for rate
limits have a more logical location in the docs and so that other
HTTP header information can be shared, such as `User-Agent`
conventions.

Adjusts some text and linking on the rest-error-handling page and
overview page for the REST API for the addition of the HTTP headers
page.
2023-03-07 12:51:17 -08:00
Lauryn Menard
d9d17eb87e help: Add article for supported browsers.
Creates new help article for supported web browsers. Also updates
links in the `/apps` landing page as well as the unsupported-browser
template and the `set-up-your-account` article.

Fixes #14732.
2023-03-07 12:01:48 -08:00
David Rosa
1429c3cf10 help: Document "Who can unsubscribe others from this stream?" setting.
- Updates "Remove others" row in "Stream permissions" tables.
- Adds a section to "Add or remove users from a stream" describing
  how to configure the new setting.
- Documents the new setting in "Create a stream".
- Documents "Message retention period" setting in "Create a stream".

Fixes #24340.
2023-03-07 11:06:52 -08:00
Alya Abbott
2b50428ac5 help: Add context/motivation to Support the Zulip project help page. 2023-03-07 11:03:04 -08:00
Hardik Dharmani
74ff9a4beb popovers: Add disabled button CSS for light theme.
Previously, we only had disabled button CSS for the dark theme in dialog widgets.

Fixes #24567.
2023-03-07 11:01:01 -08:00
Alex Vandiver
8f8a9f6f04 sentry: Add frontend event monitoring.
Zulip already has integrations for server-side Sentry integration;
however, it has historically used the Zulip-specific `blueslip`
library for monitoring browser-side errors.  However, the latter sends
errors to email, as well optionally to an internal `#errors` stream.
While this is sufficient for low volumes of users, and useful in that
it does not rely on outside services, at higher volumes it is very
difficult to do any analysis or filtering of the errors.  Client-side
errors are exceptionally noisy, with many false positives due to
browser extensions or similar, so determining real real errors from a
stream of un-grouped emails or messages in a stream is quite
difficult.

Add a client-side Javascript sentry integration.  To provide useful
backtraces, this requires extending the pre-deploy hooks to upload the
source-maps to Sentry.  Additional keys are added to the non-public
API of `page_params` to control the DSN, realm identifier, and sample
rates.
2023-03-07 10:51:45 -08:00
Alex Vandiver
fc40d74cda hooks: Remove --project from sentry when not necessary. 2023-03-07 10:51:45 -08:00
Alex Vandiver
08251ac53b hooks: Fix typo in sentry error message. 2023-03-07 10:51:45 -08:00
Alex Vandiver
19691b170b blueslip: Report the built client version, as well as server version. 2023-03-07 10:51:45 -08:00
Alex Vandiver
a8181152b7 webpack: Build a ZULIP_VERSION global constant into the built product. 2023-03-07 10:51:45 -08:00
Alex Vandiver
73631950a5 report: Use ZULIP_VERSION rather than shelling out to git every time. 2023-03-07 10:51:45 -08:00
Alex Vandiver
90b1e0b8b9 report: Provide user information for browser-side errors.
b4dd118aa1 changed how the `user_info_str` parsed information out of
the events it received -- but only changed the server errors, not the
browser errors, though both use the same codepath.  As a result, all
browser errors since then have been incorrectly marked as being for
anonymous users.

Build and pass in the expected `user` dict into the event.
2023-03-07 10:51:45 -08:00
Kartik Srivastava
ce5d13f9b2 message_send: Handle notifications for UNMUTED topic in a muted stream.
This commit adds 'visibility_policy' as a
parameter to user_allows_notifications_in_StreamTopic
function.

This adds logic inside the user_allows_notifications_in_StreamTopic
function, to not return False when a stream is muted
but the topic is UNMUTED.

Adds a method `user_id_to_visibility_policy_dict`
to 'StreamTopicTarget' class to fetch
(user_id => visibility_policy) in single db query.

Co-authored-by: Kartik Srivastava <kaushiksri0908@gmail.com>
Co-authored-by: Prakhar Pratyush <prakhar841301@gmail.com>
2023-03-06 19:15:45 -08:00
Kartik Srivastava
e9cf2659cf user_topics: Refactor remove_topic_mute.
This commit replaces 'remove_topic_mute' with
'set_user_topic_visibility_policy_in_database' and
updates it to delete UserTopic row with any configured
visibility_policy and not just muting.
2023-03-06 19:15:45 -08:00
Kartik Srivastava
f844cb6dad user_topics: Refactor add_topic_mute.
In order to support different types of topic visibility policies,
this renames 'add_topic_mute' to
'set_user_topic_visibility_policy_in_database'
and refactors it to accept a parameter 'visibility_policy'.

Create a corresponding UserTopic row for any visibility policy,
not just muting topics.

When a UserTopic row for (user_profile, stream, topic, recipient_id)
exists already, it updates the row with the new visibility_policy.

In the event of a duplicate request, raises a JsonableError.
i.e., new_visibility_policy == existing_visibility_policy.

There is an increase in the database query count in the message-edit
code path.

Reason:
Earlier, 'add_topic_mute' used 'bulk_create' which either
creates or raises IntegrityError -- 1 query.

Now, 'set_user_topic_visibility_policy' uses get_or_create
-- 2 queries in the case of creating new row.

We can't use the previous approach, because now we have to
handle the case of updating the visibility_policy too.
Also, using bulk_* for a single row is not the correct way.

Co-authored-by: Kartik Srivastava <kaushiksri0908@gmail.com>
Co-authored-by: Prakhar Pratyush <prakhar841301@gmail.com>
2023-03-06 19:15:45 -08:00
Prakhar Pratyush
e9580f8c5a MutedTopicsTests: Remove real-time usage from tests.
This commit refactors the existing pattern (real-time usage)
used to assert 'date_muted' in tests.

A fixed value is used at the start of the test to
assert 'date_muted', replacing the timedelta or real-time usage pattern.
2023-03-06 19:15:45 -08:00
Prakhar Pratyush
826ea4162e user_topics: Refactor 'do_unmute_topic'.
Replaces 'do_unmute_topic' with 'do_set_user_topic_visibility_policy'
and associated minor changes.

This change is made to align with the plan to use a single function
'do_set_user_topic_visibility_policy' to manage
user_topic - visibility_policy changes and corresponding event
generation.
2023-03-06 19:15:45 -08:00
Prakhar Pratyush
2df2ef9f0f user_topics: Refactor 'do_mute_topic'.
This commit is a step in the direction of having a common
function to handle visibility_policy changes and event
generation instead of separate functions for each
visibility policy.

In order to support different types of topic visibility policies,
this renames 'do_topic_mute' to 'do_set_user_topic_visibility_policy'
and refactors it to accept a parameter 'visibility_policy'.
2023-03-06 19:15:45 -08:00
Prakhar Pratyush
9ecc610681 mute_topic: Update tests to not use lib functions directly.
The "add_topic_mute" and "remove_topic_mute" library functions
shouldn't be called directly from tests.
They should instead call "do_mute_topic" and "do_unmute_topic"

The reason being:
Library functions are meant to be internal interfaces
for just changing the database, and shouldn't generally be
called elsewhere.
2023-03-06 19:15:45 -08:00
Author: Tim Abbott
e161b36b21 user_topics: Delete stale do_update_message comment.
The issue this comment refers to was addressed in
bd04733.
2023-03-06 19:15:45 -08:00
Joelute
b2b86b5e6f message_feed: Hide compose banner when unsubbing from stream.
Currently, when a user marks messages as unread in a stream/topic
and unsubscribes from the stream, both subscribe button and compose
banner will remain visible. This change will hide the compose banner
when the user unsubscribes from the stream and hopes to create a
better flow and reduce confusion.
2023-03-06 18:08:41 -08:00
Alex Vandiver
dcd8947c1b tests: Set LOCAL_AVATARS_DIR / LOCAL_FILES_DIR in tests.
7ad06473b6 split out `LOCAL_AVATARS_DIR` and `LOCAL_FILES_DIR` as
derived values from `LOCAL_UPLOADS_DIR`.  However, this means that all
places which set `LOCAL_UPLOADS_DIR` need to potentially propagate
that change into the derived values if they come *after*
`computed_settings.py` is applied.  It did this successfully in
`zerver/lib/test_runner.py` and the `use_s3_backend` decorator, but
did not adjust the late-set `zproject/test_extra_settings.py`.

This causes tests to share a single common set of avatars and
attachments directories.  In puppeteer tests, this leads to assertion
failures checking `assert_is_local_storage_path`; in backend tests,
this leads to races when checking the contents of the local storage
directory when run in parallel mode.

Set `LOCAL_AVATARS_DIR` and `LOCAL_FILES_DIR` based on
`LOCAL_UPLOADS_DIR` when it is pulled from the environment during
testing.
2023-03-06 11:52:23 -08:00
Tim Abbott
c58e893cb6 linkifiers: Add missing coverage ignore.
This was incorrectly missing in the last linkifiers commit.
2023-03-06 10:57:50 -08:00
Daniil Fadeev
dcb72448d8 giphy: Fix "PG13" typo. 2023-03-06 10:52:52 -08:00
Daniil Fadeev
d606f5ba42 i18n: Add new markup for lazy translation of giphy ratings.
Also, it adds phrases such as 'rated Y' to the ignored list.
Otherwise, the linter would require to write it as 'rated y'.
2023-03-06 10:52:52 -08:00
Haridarshan Choudhary
d335cb34af message_events: Avoid full rerender when marking unread.
Previously, when you did a "mark as unread from here" operation, we triggered 
a full rerender of both the recent topics view and the message feed. This was 
needlessly expensive, on and a large server with a somewhat busy CPU from 
other applications, can cause a visible lag, even when the message feed that 
you're looking at only has like 3 messages in it.

Improve this by passing the set of modified messages to the rerender.

There's likely further improvements to be made here -- we shouldn't need to
do more than toggle the unread markers -- but this should be good enough to
eliminate the visible lag.

Fixes #24263.
2023-03-06 10:39:47 -08:00
Lauryn Menard
e9bfdd1bf2 response: Implement ignored parameters with MutableJsonResponse class.
Creates `MutableJsonResponse` as a subclass of Django's `HttpResponse`
that we can modify for ignored parameters in the response content.

Updates responses to include `ignored_parameters_unsupported` in
the response data through `has_request_variables`. Creates unit
test for this implementation in `test_decorators.py`.

The `method` parameter processed in `rest_dispatch` is not in the
`REQ` framework, so for any tests that pass that parameter, assert
for the ignored parameter with a comment.

Updates OpenAPI documentation for `ignored_parameters_unsupported`
being returned in the JSON success response for all endpoints.
Adds detailed documentation in the error handling article, and
links to that page in relevant locations throughout the API docs.

For the majority of endpoints, the documentation does not include
the array in any examples of return values, and instead links to
the error handling page. The exceptions are the three endpoints
that had previously supported this return value. The changes note
and example for these endpoints is also used in the error
handling page.
2023-03-06 10:33:13 -08:00
Lauryn Menard
0f2472ed14 tests: Update assert_json_success to check for ignored parameters.
Updates `assert_json_success` so that it checks for an array of
ignored parameters in the success response.
2023-03-06 10:33:13 -08:00
Lauryn Menard
b8197e06bc request-notes: Add is_webhook_view boolean to fields.
Adds `is_webhook_view` boolean field to the RequestNotes class so
that (when implemented) `ignored_parameters_unsupported` feature
is not something that is applied to webhooks.
2023-03-06 10:33:13 -08:00
sbansal1999
d1253043a5 ts: Convert linkifiers.js to TypeScript. 2023-03-06 10:30:00 -08:00
Lauryn Menard
b5f5ab948a puppeteer: Fix small logging copy and paste error in admin.test.ts. 2023-03-06 09:42:11 -08:00
Lauryn Menard
084dd216f0 tests: Remove ignored realm_str parameter from message send test.
In commit 8181ec4b56, we removed the `realm_str` as a parameter
for `send_message_backed`. This removes a missed test that included
this as a parameter for that endpoint/function.
2023-03-06 09:41:53 -08:00
Pranav Joglekar
2c316ce1ac gear_menu: Update 'Support Zulip' link.
Previously the 'Support Zulip' option linked to Github Sponsors.
We now link to our own https://zulip.com/help/support-zulip-project,
which describes more options for how to support the project.

Fixes #24230.
2023-03-06 08:01:56 -08:00
Anders Kaseorg
c382904638 docs: Remove bad advice about pinning versions.
Because `yarn.lock` includes transitive dependencies, it already pins
our dependencies more comprehensively than `package.json` would if we
followed this bad advice, which we don’t, as of commit
9b0401b76d (#13118).

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-05 21:26:55 -08:00
Anders Kaseorg
087660a87e requirements: Upgrade Python requirements.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-05 14:46:28 -08:00
Anders Kaseorg
11e94c4bb7 html_diff: Fix lxml import.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-05 14:46:28 -08:00
Anders Kaseorg
d3efd4c095 python: Import F, Q, QuerySet from their canonical module.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-05 14:46:28 -08:00
Anders Kaseorg
aa577a554b populate_db: Import timedelta from its canonical module.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-05 14:46:28 -08:00
Anders Kaseorg
0628c3cac8 migrations: Import BaseDatabaseSchemaEditor from its canonical module.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-05 14:46:28 -08:00
Anders Kaseorg
cca8417ad4 docs: Add missing link to outreach TOC.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-03 23:06:58 -08:00
Anders Kaseorg
7b47b6a311 docs: Move homepage link to TOC tree.
This lets us avoid maintaining a forked copy of sphinx_rtd_theme’s
sidebartitle block.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-03 23:06:17 -08:00
Anders Kaseorg
821584b8fc gitlint-rules: Rename to gitlint_rules.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-03 18:02:38 -08:00
Anders Kaseorg
43b4f10578 run-dev: Drop .py from script name.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-03 18:02:37 -08:00
Anders Kaseorg
5a79ca251b check-database-compatibility: Drop .py from script name.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-03 18:02:37 -08:00
Alex Vandiver
26eb1d7371 puppet: Also set systemd limits. 2023-03-03 16:39:47 -08:00
Alex Vandiver
1c76036c61 puppet: Increase maximum file descriptors.
The current threshold of 40k descriptors was set in 2016, chosen to be
"at least 40x our current scale."  At present, that only provides a
50% safety margin.  Increase to 1 million to provide the same 40x
buffer as previously.

The highest value currently allowed by the kernels in
production (linux 5.3.0) is 1048576.  This is set as the hard limit.

The 1 million limit is likely far above what the system can handle for
other reasons (memory, cpu, etc).  While this removes a potential
safeguard on overload due to too many connections, due to the longpoll
architecture we would generally prefer to service more connections at
lower quality (due to CPU limitations) rather than randomly reject
additional connections.

Relevant prior commits:
 - 836f313e69
 - f2f97dd335
 - ec23996538
 - 8806ec698a
 - e4fce10f46
2023-03-03 16:39:47 -08:00
Alex Vandiver
a20bb54cbb puppet: Move limits.conf to maintain more of the installation structure. 2023-03-03 16:39:47 -08:00
David Rosa
140e62d024 help: Add open link icon in "Add a custom linkifier". 2023-03-03 14:19:20 -08:00
Lauryn Menard
f1e60014fa css: Move pre code reset rules to rendered_markdown class block.
Moves and simplifies the `pre code` rules in `rendered_markdown.css`
so that they are all part of the `rendered_markdown` class block.
2023-03-03 14:10:06 -08:00
Lauryn Menard
69e224cd87 templates: Add rendered_markdown class to confirm emoji warning.
Adds a `div` wrapper with the `rendered_markdown` class to the
content in `confirm_emoji_settings_warning.hbs`, so that the
inline code element has the intended CSS rules applied.

Because the `p` element also has the `rendered_markdown` class,
the margins for this element in the modal are slightly changed
(3px on top/bottom). Previously, the margins for this element were
being set from a bootstrap rule (10px on bottom).
2023-03-03 14:08:08 -08:00
Lalit
1b7f3eeb76 ts: Convert typing_data.js to TypeScript. 2023-03-03 12:04:42 -08:00
Lalit
88c23933bb util: Change parameter type of sorted_ids to number[].
This function was mistyped; it was used in practice both accepting
string[] and number[], with the implementation taking advantage of the
fact that number.parseInt(<int>, 10) = <int>.

The only string[] callers were some overly defensive typing_data tests
that don't match the actual typing_data interface, so we remove the
string[] support and adjust the function's type, as well as those
tests.
2023-03-03 12:04:42 -08:00
Joelute
5762799d18 popovers: Remove background when hovering Github username.
When someone hovers over the Github username in the popover
with dark theme, a background will appear. These changes
ensures that the `background-color` isn't overwritten by
other CSS.
2023-03-03 11:46:30 -08:00
Joelute
e44a87b271 documentation: Reduce max-width on content.
In the documentation, text-lines felt a bit too long
in text-heavy pages. This change aims to reduce
`max-width` on the content to 700px.

[CZO discussion](https://chat.zulip.org/#narrow/stream/19-documentation/topic/line.20wrapping.20code.20blocks/near/1516561)
2023-03-03 11:36:06 -08:00
Joelute
e2346ab3ae documentation: Increase block width in help center.
After merging #24352, we want to increase the block
width in the help center to reduce the amount of
scrollbars that are shown. Thus, we decided to
remove `max-width` on all blocks.

[CZO discussion](https://chat.zulip.org/#narrow/stream/19-documentation/topic/line.20wrapping.20code.20blocks/near/1516561)
2023-03-03 11:36:06 -08:00
Sahil Batra
8a0b99cb39 streams: Align stream type icons in "Archive stream" modal.
This commit adds inline_decorated_stream_name component
which is used to show stream name along with its privacy
type icon. This component is added such that we can align
the icon and stream name properly as there are many
instances where the icon and name are not aligned in the
current UI.

This component is only used in "Archive stream" modal for
now and will be used for other UIs as well in future.
2023-03-03 11:10:45 -08:00
Ujjawal Modi
18059e132d user groups: Enabled sorting of subscribers.
The new `#groups` overlay does not allow sorting of subscribers.
This commit adds support for sorting of subscribers.
2023-03-03 11:03:12 -08:00
Lauryn Menard
bfa8a2438b templates: Revise explanatory text in code playground org settings.
Revises descriptive text and examples at the top of the code
playgrounds tab in the organization settings overlay to be shorter,
have only one example that includes the name field.

Also, adds the `rendered_markdown` class to the HTML code elements,
via an HTML span element so that the specific CSS rules for code
elements with that class will be applied to these examples.
2023-03-02 18:14:35 -08:00
Lauryn Menard
23bac34f08 templates: Revise explanatory text/example in linkifiers org settings.
Revises descriptive text and examples at the top of the linkifiers
tab in the organization settings overlay to be shorter, have only
one example and updates help center link text for capitalization.

Adds a link to the help center in the form/input area for adding
a new linkifier, which is consitent with the code playgrounds tab,
and means the link would be there if the form was converted to a
modal.

Also, adds the `rendered_markdown` class to the HTML code elements,
via an HTML span element so that the specific CSS rules for code
elements with that class will be applied to these examples.
2023-03-02 18:14:35 -08:00
Alex Vandiver
3bf3f47b49 delete_old_unclaimed_attachments: Add flag to clean up storage.
Actions like deleting realms may leave unreferenced uploads in the
attachment storage backend.

Fix these by walking the complete contents of the attachment storage
backend, and removing files which are no longer present in the
database.  This may take quite some time, as it is necessarily O(n) in
the number of files uploaded to the system.
2023-03-02 16:36:19 -08:00
Alex Vandiver
c9d1755a12 delete_realm: Optimize attachment cleanup by batching. 2023-03-02 16:36:19 -08:00
Alex Vandiver
cdda4bc089 delete_realm: Clean up attachments when deleting or scrubbing realms. 2023-03-02 16:36:19 -08:00
Alex Vandiver
b31a6dc56c upload: Reorder functions into logical groupings. 2023-03-02 16:36:19 -08:00
Alex Vandiver
880a3f95a7 tests: Split out s3 and local tests.
This mirrors the split of the code in 7c0d414aff.
2023-03-02 16:36:19 -08:00
Alex Vandiver
04e7621668 upload: Rename upload_message_image_from_request.
The table is named Attachment, and not all of them are images.
2023-03-02 16:36:19 -08:00
Alex Vandiver
bd80c048be upload: Rename delete_message_image to use word "attachment".
The table is named Attachment, and not all of them are images.
2023-03-02 16:36:19 -08:00
Alex Vandiver
567d1d54e7 upload: Rename upload_message_file to use word "attachment".
For consistency with the table, which is named Attachment.
2023-03-02 16:36:19 -08:00
Lauryn Menard
96aca49f9f integrations: Update Asana integration doc to point to Zapier.
Updates the Asana documentation, which was a detailed version
of the Zapier documentation with screenshots specifically for
Asana, to instead start with the basic incoming webhook steps
and then point to the general Zapier documentation to complete
the integration.

This will be easier to maintain moving forward in the short
term as ideally we'll migrate to a system that documents all
of the integrations with Zulip that are available via Zapier.

Also, updates the current Zapier documentation to mention
Asana as one of the apps that can be integrated with Zulip.
2023-03-02 13:51:34 -08:00
Aman Agrawal
4f8169aab5 tippy: Add comment justifying parent as appendTo default. 2023-03-02 13:51:00 -08:00
Lakshay Mittal
9be35d2447 docs: Fix outdated description of where stats views are. 2023-03-02 13:38:08 -08:00
Lauryn Menard
bb819b4928 css: Remove rules in integrations.css for code elements.
Removes the specific rules for code elements in the integrations
documentation pages.
2023-03-02 13:32:50 -08:00
Lauryn Menard
262debb72b css: Update code element styling for documentation pages.
Updates `markdown.css` to remove border styling from code
elements, and instead use background-color (as well as
font-family) to visually highlight inline code elements
as distinct from regular text.

Updates code element font-family to be the same as in
`zulip.css`.

Makes padding on the left and right the symmetrical for
inline code elements. Previously there was 4px padding on
the right, but not on the left.

Maintains anchor font-color styling for code elements that
are also links.
2023-03-02 13:32:50 -08:00
Lauryn Menard
3c63025d88 css: Remove code elements from bootstrap.css.
Updates `markdown.css` and `rendered_markdown.css` for the rules
in `bootstrap.css` that were being used to style code elements and
removes the now redundant/ignored rules from `bootstrap.css`.
2023-03-02 13:32:50 -08:00
Sahil Batra
734d1848c0 server_events_dispatch: Update bots list only if needed.
After b21f533af, we now update the organization bots
list on receiving realm_user events since non-admins
can also see bots not owned by them in the list.

But the functions to update bot list should be called
only for bot users and not for others, otherwise it
results in an error.

This can be reproduced by first opening the organization
bots list and then just updating the name of the user.
Calling `redraw_bots_list` on receiving "realm_user/add"
event for non bot users will not raise any error but
still we avoid redrawing the whole list when not required.

This commit fixes the code to call functions to update
bot list only when the event is received for a bot.
2023-03-02 13:26:20 -08:00
Anders Kaseorg
6eeeb70570 muted_topics_ui: Rename mute_topic parameter to fix shadowing bug.
This was broken by 6e6fb47e20 (#24386).

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-02 12:22:05 -08:00
Alya Abbott
157b5ada90 help: Expand introduction on /help/support-zulip-project.
Also minor tweaks to the details below.
2023-03-02 12:17:50 -08:00
Anders Kaseorg
2a70c11c5f eslint: Fix unicorn/prefer-spread.
This was initially disabled for IE/Babel-related reasons that no
longer apply.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-02 12:16:56 -08:00
Anders Kaseorg
941a9bab38 message_flags.test: Call send_read with an array.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-02 12:16:56 -08:00
Anders Kaseorg
9d514a29d1 zjquery: Make FakeElement iterable.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-02 12:16:56 -08:00
Anders Kaseorg
6b3edb8b0d search_suggestion: Rename Attacher#concat to push_many.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-03-02 12:16:56 -08:00
Ujjawal Modi
5cf98d8653 streams: Allow sorting of stream members.
Stream members table in Create stream and stream subscribers UI
can now be sorted.
Fixes #21341
2023-03-01 17:29:01 -08:00
Trident Pancake
2c042ad100 typeahead: Suggest existing custom language in Code Playground settings.
The Code Playground feature can have multiple entries per language. So
the autocomplete for settings should return existing custom languages
too.
2023-03-01 17:02:44 -08:00
Trident Pancake
51bd3c8c8b typeahead: Show Code Playground entries in composebox typeahead.
This addresses #23935.
2023-03-01 17:02:44 -08:00
Trident Pancake
f96daca32c typeahead: Handle non-pygments data in compare_language_by_popularity.
This added functionality will be used to compare pygment_language from
Code Playgrounds.

There is a choice of how to sort languages with popularity versus
without popularity. I chose to sort the Code Playground custom language
after other pygment languages based on the reasoning in the comments.
2023-03-01 17:02:44 -08:00
Trident Pancake
6f904dbec2 typeahead: Extract language popularity comparison to its own function.
In preparation for adding logic for Code Playground languages, which has
no popularity score, extracting the popularity comparison part of the
logic out to evolve it in future diffs.
2023-03-01 17:02:44 -08:00
Trident Pancake
bab2eda283 typeahead: Add unit test for typeahead_helper.compare_language().
Bringing it under test before expanding its functionality and doing
refactoring.
2023-03-01 17:02:44 -08:00
Trident Pancake
cb6c1c4f05 typeahead: Rename compare_by_popularity() for clarity.
compare_by_popularity() actually does two things:
1. compare A and B by their popularity
2. then if needed, compare alphabetically to break ties

Someone reading the function name might not be clear about that detail.

I'm renaming this function to remove the "by_popularity" wording, which
can mislead readers. I also added comments to clarify the detail.

The goal in future diffs is to break this up and make it more self
explanatory.
2023-03-01 17:02:44 -08:00
Trident Pancake
da868d7e64 typeahead: Rename get_pygments_typeahead_list() for clarity.
The `get_pygments_typeahead_list()` function is only used by
`settings_playgrounds.js`. It isn't used by the autocomplete of the
composebox.

Renaming this function to make it clear where it's meant for.
2023-03-01 17:02:44 -08:00
Sahil Batra
558e97eec1 bootstrap: Remove bootstrap CSS for ".checkbox" selector.
We use "checkbox" class for label elements. We have already
added the CSS for these elements in components.css and thus
we can remove this CSS from bootstrap.css.
2023-03-01 16:34:12 -08:00
Sahil Batra
be5ddfa629 bootstrap: Remove bootstrap CSS for checkbox type input elements.
We hide most of the native checkbox type input elements using
"clip: rect(0, 0, 0, 0)", as we instead make our custom checkbox
using span element. Native checkbox is used in emails page in
development environment for which we have already added CSS
in previous commit.

This commit removes the CSS rules set for checkbox type inputs
as part of our bootstrap removal project.
2023-03-01 16:34:12 -08:00
Sahil Batra
07f7089cf3 settings: Add bootstrap CSS to label.checkbox elements.
This commit adds min-height property added by bootstrap
to the label.checkbox elements in components.css.
We do not need to add padding-left property added by
bootstrap since we already set padding to 0.

After adding this CSS, we can safely remove the CSS from
bootstrap.css.
2023-03-01 16:34:12 -08:00
Sahil Batra
35ecf5f1e2 email_log: Add bootstrap CSS rules for checkbox element in emails_log.
This commit adds bootstrap CSS rules for checkbox element in
emails_log.html as we would remove the bootstrap CSS for checkbox
inputs in furhter commits. We add only required CSS rules.
2023-03-01 16:34:12 -08:00
Sahil Batra
f9c739ab9d modals: Update checkbox in deactivate user modal to be same as others.
This commit changes the design of checkbox in deactivate user modal
to be same as others in the app. We have added parent element with
".new-style" class for now, since we have this for all other checkbox
in the app and this seems to be the simplest solution.

In future, we plan to remove the "new-style" class and instead add
CSS based on a component for checkbox elements.
2023-03-01 16:34:12 -08:00
Sahil Batra
5d00662135 bootstrap: Remove CSS for ".checkbox.inline" selector.
There is no element which has both classes - "checkbox"
and "inline", so we can remove the CSS for this in
bootstrap.css.
2023-03-01 16:34:12 -08:00
Sahil Batra
057f6e28f6 bootstrap: Remove CSS for ".form-inline .checkbox" selector.
We do not have any checkbox inputs inside any element with
form-inline class, so we can remove the CSS in bootstrap
which is used to set rules for checkbox inputs inside
form-inline element.
2023-03-01 16:34:12 -08:00
Sahil Batra
2a366f359b dialog_widget: Remove code related to email field visibility.
The code for hiding and showing email field in the user
deactiavtion modal was added in dialog_widget.js.

This commit removes it and instead add the code to its
relevant module (settings_user.js), since the email field
is present only in one modal and not all modals.
2023-03-01 16:34:12 -08:00
Tim Abbott
c3f0a4493d tippy: Tweak comments for defaults definitions. 2023-03-01 15:57:51 -08:00
Aman Agrawal
ae0f832d67 tippy: Add more delay to compose and message control button tooltips.
750ms is long enough that it's unlikely to occur without a user
intending to hover the element, reducing distraction for relatively
commonly used elements.

Also define a couple delay constants to provide a more semantically
meaningful configuration.
2023-03-01 15:57:51 -08:00
Palash Baderia
c1009bc051 settings: Drop column from tables on narrow screen.
Drop the "last_active" column in the users section of the
organization settings, and the "Bot_type" column in the bots
section on sm_min (576px or less). Also, drop the "Date_muted"
column in the muted topics section of the personal settings
on ml_min (425px or less).

Added new className "topic_date_muted" for the date_muted
column, and "bot_type" for the bot_type column, to hide them
using display none when the viewport is small.

Fixes: #24320
2023-03-01 15:42:15 -08:00
Ganesh Pawar
5a5203144d modal: Make the modal content scrollable instead of the whole modal.
Earlier, if the content of the modal (apart from the header and footer)
overflowed, the whole modal would become scrollable which would hide
the modal header and footer on scrolling. This commit makes only
the modal content scrollable and keeps the modal header and
footer static.
2023-03-01 15:36:29 -08:00
Ganesh Pawar
6e19fe0ad1 Remove overflow: visible for move_topic_modal.
It was added in 85fc8d5472 to prevent
the dropdown list widget from being clipped off due to overflow.
This is not needed now since the `dropdown-menu` has a
`position: fixed` property which avoids it from being clipped off.
2023-03-01 15:36:29 -08:00
SameepAher
4b7a55d2c9 popovers: Close user popovers on button click.
Close the user or bot popovers in Users, Deactivated users, bots tab of
Organization settings, on clicking Edit user button, Deactivate button
or Reactivate button.
2023-03-01 15:14:16 -08:00
Sahil Batra
3950a8e19d test_helpers: Rename reset_emails_in_zulip_realm.
This commit renames reset_emails_in_zulip_realm function to
reset_email_visibility_to_everyone_in_zulip_realm which makes
it more clear to understand what the function actually does.

This commit also adds a comment explaining what this function
does.
2023-03-01 12:17:11 -08:00
Sahil Batra
4e01449cfd register: Rename creating_new_team to creating_new_realm.
This commit renames creating_new_team variable to
creating_new_realm as "realm" seems better to explain
new realm creation than "team".
2023-03-01 12:17:11 -08:00
Hardik Dharmani
ac01e3ee51 stream-settings: Fix long stream names abbreviated too early.
Make .stream-header div a flex container and adjust max-width
of .sub-stream-name to take up 100% of available space.
Add 1rem margin-left to .button-group for spacing.

Fixes: #24507
2023-03-01 11:54:31 -08:00
Alex Vandiver
43800b4c55 invites: Limit invites per day as a function of current users. 2023-03-01 11:44:25 -08:00
Lauryn Menard
16436a2f15 api-docs: Fix changelog formatting for feature level 166.
Also, updates the entry to note that the removed `realm_str`
parameter was undocumented, which is why there is no corresponding
changes note in the specific endpoint documentation.
2023-03-01 11:24:52 -08:00
Tim Abbott
6b37f9a290 puppet: Run delete-old-unclaimed-attachments in archive cron file.
After reflecting a bit on the last commit, I think it's substantially
easier to understand what's happening for these two tasks to be
defined in the same file, because we want the timing to be different
to avoid potential races.
2023-03-01 11:21:42 -08:00
Mateusz Mandera
35344f7f6b puppet: Add cronjob to run delete_old_unclaimed_attachments daily. 2023-03-01 11:16:39 -08:00
David Rosa
74e4b01580 help: Update "private message" -> "direct message" term.
Updates all help center pages to match new DM term in Zulip UI.
2023-02-28 16:55:13 -08:00
David Rosa
3a4d800ee9 help: Update "PMs, mentions, and alerts" -> "DMs, mentions, and alerts".
- Updates page content and page name in the sidebar index.
2023-02-28 16:55:13 -08:00
David Rosa
bac486d1dc help: Update "Restrict private messages" -> "Restrict direct messages".
- Updates page content and page name in the sidebar index.
2023-02-28 16:55:13 -08:00
David Rosa
3c7437b717 help: Update "Reading private messages" -> "Reading direct messages".
- Updates page content and page name in the sidebar index.
- Updates include blocks.
2023-02-28 16:55:13 -08:00
David Rosa
9c7c71f286 help: Update "Private messages" -> "Direct messages".
- Updates page content and page name in the sidebar index.
- Updates include blocks.
2023-02-28 16:55:13 -08:00
David Rosa
15fd5299af help: Update filenames "private message" -> "direct message".
Renames files, updates references, and adds URL redirects.
2023-02-28 16:55:13 -08:00
Anders Kaseorg
738667b39e templates: Convert config errors to HTML.
Markdown and Jinja don’t mix correctly, and templating is not an
appropriate use of Markdown.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-28 16:54:15 -08:00
Daniil Fadeev
ae089da9cb poll_widget: Make the poll-vote button the top layer.
Fixes #24409.
2023-02-28 16:53:49 -08:00
Aman Agrawal
30719c9057 portico: Fix portico footer broken on mobile widths.
I am not sure why I added this change in flex-direction
but right now, it doesn't seem to be correct since it force
the footer to overflow mobile width.
2023-02-28 16:52:47 -08:00
Lauryn Menard
d851662008 demo-orgs: Fix link to help center in Welcome bot message.
The inital Welcome bot message has an extra section if the user is
joining a demo organization, but the link in that section was not
being formatted correctly. Fixes the formatting so that the link
works.
2023-02-28 16:52:20 -08:00
Mateusz Mandera
f0f02d05ab send_message_backend: Remove the realm_str API param.
This already became useless in 6e11754642,
as detailed in the API changelog entry here. At this point, we should
eliminate this param and the weird code around it.

This commit also deletes the associated tests added in
6e11754642, since with realm_str removed,
they make no sense anymore (and actually fail with an OpenAPI error due
to using params not used in the API). Hypothetically they could be
translated to use the subdomain= kwarg, but that also doesn't make
sense, since at that point they'd be just testing the case of a user
making an API request on a different subdomain than their current one
and that's just redundant and already tested generally in
test_decorators.
2023-02-28 12:12:15 -08:00
Mateusz Mandera
82379c31e4 send_message_backend: Set the realm value passed down to check_message.
This leftover variable, as a result of older changes, was just always
set to None. That was fine, because when realm=None reaches
check_message further down the codepath, it just infers from
sender.realm. We want to stop passing None like that though, so let's
just set this to user_profile.realm.
2023-02-28 12:12:15 -08:00
Lauryn Menard
514e5b990e templates: Update reset_done.html page text and title.
Updates the text and title used when the password reset done page
to work for situations where the user is resetting a forgotten
password and for situation where the user is setting a password
for the first time (e.g. SSO login, demo organizations).
2023-02-28 11:45:01 -08:00
Lauryn Menard
8eaac945b2 integrations-docs: Fix indentation issues in existing documentation.
Fixes some integrations documentation so that code blocks and
images are rendered in the correct HTML list elements.
2023-02-28 11:31:12 -08:00
Lauryn Menard
839bc7f3a3 api-docs: Fix changelog formatting for feature level 165. 2023-02-28 11:28:59 -08:00
Alex Vandiver
e7fabb45f2 puppet: Pin with sha256sum verification. 2023-02-28 00:04:39 -05:00
Alya Abbott
c3bcbfb484 portico: Clarify encryption at rest information on /security. 2023-02-27 19:16:42 -08:00
Alex Vandiver
015a10637b docs: Document how to use SMTP without authentication.
This is the behaviour inherited from Django[^1].  While setting the
password to empty (`email_password = `) in
`/etc/zulip/zulip-secrets.conf` also would suffice, it's unclear what
the user would have been putting into `EMAIL_HOST_USER` in that
context.

Because we previously did not warn when `email_password` was not
present in `zulip-secrets.conf`, having the error message clarify the
correct configuration for disabling SMTP auth is important.

Fixes: #23938.

[^1]: https://docs.djangoproject.com/en/4.1/ref/settings/#std-setting-EMAIL_HOST_USER
2023-02-27 11:59:48 -08:00
Ilikepizza2
caab470656 left sidebar: Scroll to current PM conversation on narrow.
Zulip has long had the behavior that opening a stream or topic via
narrowing automatically scrolled the left sidebar to the conversation,
so that you can see it and adjacent ones readily.

When we moved private messages into the left sidebar, we didn't
implement this similar behavior; this resulted in users having to
manually scroll the sidebar in order to browser private message
conversations.

Fix this by using the standard scroll_util helpers, with some extra
care to expand the heading when going to "all private messages".

Fixes #23609.

Co-authored-by: Tim Abbott <tabbott@zulip.com>
2023-02-27 11:58:53 -08:00
Joelute
4c6f85727c documentation: Add horizontal scrollbar to code blocks in help center.
Some code blocks in the help center have lines that are too long
to fit, and wrap onto the next line. This can look awkward, and
may cause confusion. An horizontal scroll bar is added to the code
blocks to help fit everything into their own lines and clear up
confusions.

Fixes #24004.
2023-02-27 11:52:01 -08:00
Alya Abbott
a4265a0c2a docs: Clarify where GSoC/Outreachy applicants should post intros. 2023-02-27 11:49:56 -08:00
Anders Kaseorg
cdfa294b9a alertmanager: Indent a documentation code block into its list item.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-27 11:49:36 -08:00
Ganesh Pawar
537617b46d invite_user: Convert overlay to dialog_widget.
Fixes #22957.
2023-02-26 18:37:05 -08:00
Daniil Fadeev
a0d15f3029 i18n: Localize date and time displays across the app.
Implemented date localization using native Intl object.
Created special function get_localized_date_or_time_for_format
Made necessary string formatting changes in 'timerender.ts'.
Fixed tests and added some localization tests too.

Tested on my local development server, with some random languages.

Fixes #23987.
2023-02-26 17:43:47 -08:00
Alex Vandiver
fe654b76b7 data_import: Stop tar'ing up converted data.
`./manage.py import` does not take a tarball; it takes a directory.
Making a separate tarball is a waste of CPU time and disk, as it is
never used.

This was included in the commit of the initial Slack conversion code
in 5b37c5562b and propagated from there into every conversion tool.

Remove the unnecessary tarball creation.
2023-02-26 17:42:01 -08:00
Alex Vandiver
6969a6a92d docs: Update instructions for realm deletion to use management command.
This documentation was written in 9ece4c9f51, which predated the
`./manage delete_realm` command added in bff503feb4.
2023-02-26 17:11:07 -08:00
Alex Vandiver
52b8a84219 models: Drop unique index on user/message/emoji_name.
c7d0192755 added the unique constraint on
`user_profile_id,message_id,reaction_type,emoji_code`, but left the
existing constraint on `user_profile_id,message_id,emoji_name`.  As
explained in the comment added in 3cd543ee98, `emoji_name` cannot be
trusted to be unique, as it is possible to have an Unicode emoji
reaction and a custom emoji with the same name on a message.

Remove the overly-constraining unique index, now that c7d0192755 has
provided the correct one.
2023-02-26 17:10:01 -08:00
Aman Agrawal
b0d9b319e3 message_row: Allow time row to expand if it needs more width.
While setting a min-width according to the current width, we allow
the time column to expand if the translated `AM/PM` time needs
more width.
2023-02-26 17:05:01 -08:00
m-e-l-u-h-a-n
a200932dcc user groups: Send only updated attribute for user group updates.
Earlier PATCH user_groups/<int:user_group_id> required
both name and description parameters. So we had to send
them in patch requests even if just one of the attribute
was updated.

As the endpoint is now updated we send only those parameters
that are changed.
2023-02-26 16:22:24 -08:00
m-e-l-u-h-a-n
ab4e6a94c5 user groups: Make name and description optional in group update.
View that handled `PATCH user_groups/<int:user_group_id>` required
both name and description parameters to be passed. Due to this
clients had to pass values for both these parameters even if
one of them was changed.

To resolve this name description parameters to
`PATCH user_groups/<int:user_group_id>` are made optional.
2023-02-26 16:22:24 -08:00
Lalit
508ac58dc0 stream_muting: Add mark_read: false option when re-selecting message.
Added `mark_read: false` as it doesn't make sense to
read/undread a message when just muting or unmuting a stream.
It is to make sure that we never consume a unread message
when just muting/unmuting streams.
2023-02-26 16:19:28 -08:00
Lalit
1cb4886a23 stream_muting: Fix message reselect bug.
Extended else if statement responsible for reselecting messages
to include check `!recent_topic_util.is_visible()`.

Before without this check, this code was consuming 1 unread
message on muting/unmuting a stream even when we were in
"Recent Conversations" view.
2023-02-26 16:19:28 -08:00
Anders Kaseorg
3a9fb767ea ts: Convert bundles to TypeScript.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-25 15:40:31 -08:00
Anders Kaseorg
96fadb3d66 ts: Convert trivial portico modules to TypeScript.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-25 15:40:31 -08:00
sbansal1999
2fa61bcec3 ts: Convert analytics/support.js to TypeScript. 2023-02-25 11:35:01 -08:00
sbansal1999
87d6180763 ts: Convert analytics/activity.js to TypeScript. 2023-02-25 11:34:56 -08:00
Anders Kaseorg
a2ea5e8598 test-js-with-node: Fix source maps for coverage.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-24 13:54:29 -08:00
Lauryn Menard
42775219b3 private-messages: Update frontend strings to use "direct message" or "DM".
Updates frontend user-facing strings with "private message" or "PM" to
use "direct message" or "DM" respectively instead.

Note that this updates translated strings as well as a few that
are not translated like search suggestions.

Updates `tools/lib/capitalization.py` for some specific strings
that are impacted by these changes, and removes "PM" and "PMs"
from checked strings.
2023-02-24 11:47:26 -08:00
Lauryn Menard
017b05fd84 outgoing-webhook: Update Slack outgoing webhook error for private messages.
Updates the error message for the outgoing Slack webhook to use
"direct message" instead of "private message".
2023-02-24 11:47:26 -08:00
Lauryn Menard
e39c689f36 email-notifications: Update email subjects with "PM" to "DM".
Updates email notification subjects with "PM" to use "DM" instead.

Also, updates `tools/lib/capitalization.py` to include both "DM"
and "DMs".
2023-02-24 11:47:26 -08:00
Lauryn Menard
182e6c0730 push-notifications: Update strings for private messages.
Updates strings with "private message" in push notifications to
use "direct message" instead.
2023-02-24 11:47:26 -08:00
Lauryn Menard
a0fd7b2afc private-messages: Update translated backend strings use "direct message".
Updates user-facing translated strings containing "private message" on
the backend to use "direct message" instead.
2023-02-24 11:47:26 -08:00
David Rosa
d098e8275d help: Document stream notifications mobile feature.
- Documents how to set default notifications for all streams and
  single streams from within the mobile app.
2023-02-24 11:35:20 -08:00
Anders Kaseorg
a58b87893e eslint: Prohibit import cycles in TypeScript.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-24 11:33:36 -08:00
Alya Abbott
e65f48b619 help: Document modifying email visibility on sign-up. 2023-02-24 09:30:32 -08:00
Alex Vandiver
8ede54fb1b docs: Add a link to installer flag docs from backup instructions.
The documentation for restoring backups referenced that it needed to
be to the same version of PostgreSQL, but did not explain how to do
that.

Link to the relevant section of the installer documentation, and name
the flag explicitly.

Fixes: #23691
2023-02-24 12:25:48 -05:00
Sahil Batra
1ac6a9ac06 register: Allow user to change email_address_visibility during signup.
We now allow user to change email_address_visibility during user
signup and it overrides the realm-level default and also overrides
the setting if user import settings from existing account.
We do not show UI to set email_address_visibility during realm
creation.

Fixes #24310.
2023-02-24 09:23:34 -08:00
Sahil Batra
36584a3571 registration: Add code to set email_address_visibility during signup.
This commit adds backend code to set email_address_visibility when
registering a new user. The realm-level default and the value of
source profile gets overridden by the value user selected during
signup.
2023-02-24 09:23:34 -08:00
Sahil Batra
0620d2ac1b settings: Add "modal_select" to select element for custom user field.
Same template fike is used to show user custom profile fields in
both profile page in settings and in manage user modal. For select
elements in modals, the CSS is handled using modal_select class.
This commit adds modal_select class to the select element used for
custom user field, which already has settings_select class, so that
the CSS are also applied to the select element in manage user modal.
2023-02-24 09:13:09 -08:00
Sahil Batra
a862e686db modal: Do not use flex for all modal titles.
The "display: flex" property was added to ".modal__title"
element in 9e4aa19ac in #24194 to fix overlay of long
name in user profile modal (#23781).

Due to this change, the space between words in heading of
"Archive stream" modal is being removed.

This commit fixes it by adding "display: flex" only to the
title of user profile modal and not all the modals. The
heading in "Archive stream" modal is not perfect but there
is ongoing work to fix it and till then this commit changes
it to be the same as it was before adding flex property.

There is no major change in other modals, except that the
space between heading and help-link widget has increased
which was anyways the case before adding the flex property
and that can be modified later if we want to.
2023-02-24 09:13:09 -08:00
Anders Kaseorg
0ef8e88b17 webpack: Move webpack configuration to web.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-24 06:35:58 -08:00
Anders Kaseorg
23fd4f95f4 web/tests: Don’t rely on current directory.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-24 06:35:58 -08:00
Palash Baderia
d8adc6de1c personal_settings: Add deactivate organization button for organization.
Added a 'Deactivate Organization' button inside the
'Personal Settings > Account & Privacy'. This button only appears
when the organization owner is the only user present. To verify this,
I used the 'get_active_human_count' function from the 'people.js'.

To remove duplication, a function has been created inside settings_org
file to handle the click event for the two buttons present inside
personal_settings and organization_settings that perform the same
action of deactivating organization. The click handler is defined in
the click_handlers.js file, which calls the dialog for deactivating
the organization. Previously, the error used to appear at the top of
the organization_settings, but now it appears inside the dialog box
itself.

To remove the duplication of two buttons having the same IDs,changed
the Id `deactivate_realm_button` to a className.

Fixes: #24105
2023-02-23 18:17:28 -08:00
Aman Agrawal
c9f4e474a7 integrations: Increase font size of trademark disclaimer.
This is to address Google complaining that the font size is too
small to read on the integration pages.
2023-02-23 17:50:09 -08:00
N-Shar-ma
599a32bee9 hotkey: Add z shortcut to zoom to message near view.
A new hotkey, lowercase `z` (for `zoom`) has been implemented to allow
the user to go to the near view of the selected message with 1 keypress.
Documentation has been added for this both in the help center, and the
in-app `Keyboard shortcuts` menu.

The effect is identical to clicking on a message's timestamp, which
links to that message's near view.

Fixes: #24227.
2023-02-23 17:47:45 -08:00
Anders Kaseorg
377b8b22c0 puppeteer_tests: Move to web/e2e-tests.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-23 16:04:17 -08:00
Anders Kaseorg
cea1119423 node_tests: Move to web/tests.
This lets us simplify the long-ish ‘../../static/js’ paths, and will
remove the need for the ‘zrequire’ wrapper.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-23 16:04:17 -08:00
Anders Kaseorg
c1675913a2 web: Move web app to ‘web’ directory.
Ever since we started bundling the app with webpack, there’s been less
and less overlap between our ‘static’ directory (files belonging to
the frontend app) and Django’s interpretation of the ‘static’
directory (files served directly to the web).

Split the app out to its own ‘web’ directory outside of ‘static’, and
remove all the custom collectstatic --ignore rules.  This makes it
much clearer what’s actually being served to the web, and what’s being
bundled by webpack.  It also shrinks the release tarball by 3%.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-23 16:04:17 -08:00
Hemant Umre
be0098146c settings: Sort Uploaded files with newest on top.
When a user opens the [Setting > Uploaded files] initially in the
'Data Uploaded' column, files are sorted from oldest to newest.
Instead, sorting this panel from newest to oldest. Because it's
more likely that the user is interested in their recently uploaded
files, e.g. if they uploaded something by accident.

Fixes #23737.
2023-02-23 15:56:50 -08:00
David Rosa
ff865368c5 help: Add "Do not mark messages as read" section.
- Adds a section to describe why someone would want to set the
setting to never mark messages as read on mobile.
2023-02-23 15:45:52 -08:00
Sahil Batra
8316bad108 user_profile: Show icons for external account fields in full modal.
Previously, we showed the icons for "Twitter" and "Github" type
external account custom profile fields in the user-info popover.
This commit changes the code to show the icons in full profile
modal as well.
2023-02-23 15:45:26 -08:00
David Rosa
901ae068f5 help: Update formatting of mobile icon references.
- Updates icon references to follow current help center documentation
  patterns: **icon_name** (icon_image).
2023-02-23 15:04:38 -08:00
David Rosa
295b49e487 help: Document how to change the language of the mobile app. 2023-02-23 15:04:38 -08:00
Aman Agrawal
8946e9eaa5 css: Change look of date and time in message list.
Fixes #21752.
2023-02-23 14:38:33 -08:00
Aman Agrawal
659ad1544b message_edit_history: Center align date. 2023-02-23 14:30:20 -08:00
Joseph Hughes
90ace319d5 message_feed_ui: Right align date separators.
Align the date separators in the message feed with the timestamps so
that all date information is easier to read top-down.
2023-02-23 14:30:20 -08:00
Joseph Hughes
d9874b1e2d message_feed_ui: Increase contrast on msg divider elements.
Increase contrast on date dividers, msg times and sub/unsub msg.
Some text in the message feed UI has been percieved as too dimmed.
This commit aims to increase the contrast on some elements to
counter this. Remove border-top from date-divider so that the line
is of 1px.
2023-02-23 14:30:20 -08:00
Joseph Hughes
b746823e2e message_feed_ui: Remove group date dividers.
This commit removes the group date dividers from the message feed UI,
leaving only the dividers between individual messages. These are
considered unecessary as the recipient bar displays the date.

The change concerns message_list_view.js along with the templates
message_group.hbs and recipient_row.hbs.

Fixes #22966.
2023-02-23 14:30:20 -08:00
Joseph Hughes
8cf2a1df6b message_feed_ui: Remove previous date from date separators.
This commit updates the date row between messages and message
groups, removing the date of the previous message along with
the down arrow for the next message.

The goal of this commit is to declutter the message feed UI
as part of the redesign.

The change concerns the render functions in
timerender.js along with the files that reference these.

Fixes: #22967.
2023-02-23 14:30:20 -08:00
Aman Agrawal
343536d4bc css: Remove blue color, underline and transition effect from msg time.
This looks most likely a regression. Added `.messagebox-content`
to move priority of color set by us on `.messsage_time` above others.
2023-02-23 14:30:20 -08:00
Aman Agrawal
5a3d3f5303 css: Use variables for colors used to display message time.
This makes color changes easy to review and maintain in the
codebase.

This is also an attempt towards removing dark_theme.css
as we will only need to override color variables for these
elements in `body.dark-theme` in zulip.css without need of
overriding colors for any specific elements.
2023-02-23 14:30:19 -08:00
Alex Vandiver
97a5690f55 timestamp: Switch to a slightly faster datetime_to_timestamp.
This is quite a bit faster:
```
%timeit calendar.timegm(now.timetuple())
    2.91 µs ± 361 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)

%timeit int(now.timestamp())
    539 ns ± 27 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)
```

This is particularly important for the presence endpoint, which is a
tight loop of serializing datetimes.
2023-02-23 12:15:13 -08:00
David Rosa
95867e6f3e help: Document dark-theme mobile feature.
- Documents "Night mode" option.
- Adds Related articles section.
2023-02-23 11:48:59 -08:00
Alya Abbott
faa69940d7 help: Add section on privacy settings to /help/review-your-settings.
Also move "Review your settings" page to the "Account basics" section
in the left sidebar.
2023-02-23 11:48:32 -08:00
Alex Vandiver
aa032bf62c queue: Only set QOS on a newly-opened channel, once.
As written, the QOS parameters are (re)set every time ensure_queue is
called, which is every time a message is enqueued. This is wasteful --
particularly QOS parameters only apply for consumers, and setting them
takes a RTT to the server.

Switch to only setting the QOS once, when a connection
is (re)established.  In profiling, this reduces the time to call
`queue_json_publish("noop", {})` from 878µs to 150µs.
2023-02-23 11:47:43 -08:00
Anders Kaseorg
d145644f85 ruff: Fix PLE0101 Explicit return in __init__.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-23 11:47:08 -08:00
Alex Vandiver
f78c2eab2c message_send: Use stream object for name in "no subscribers" message.
In the case where a stream existed but had no subscribers, the error
message used to send to the owner always used `stream_name`, which
may have been None.

Switch to using `stream.name` rather than `stream_name` for this case.
2023-02-23 11:02:55 -08:00
Alex Vandiver
6427d85cf6 tornado: Replace dataclasses.asdict() call, as it is slow.
This code is called in the hot path when Tornado is processing events.
As such, making this code performant is important.  Profiling shows
that a significant portion of the time is spent calling asdict() to
serialize the UserMessageNotificationsData dataclass.  In this case
`asdict` does several steps which we do not need, such as attempting
to recurse into its fields, and deepcopy'ing the values of the fields.

In our use case, these add a notable amount of overhead:
```py3
from zerver.tornado.event_queue import UserMessageNotificationsData
from dataclasses import asdict
from timeit import timeit
o = UserMessageNotificationsData(1, False, False, False, False, False, False, False, False, False, False, False)
%timeit asdict(o)
%timeit {**vars(o)}
```

Replace the `asdict` call with a direct access of the fields.  We
perform a shallow copy because we do need to modify the resulting
fields.
2023-02-23 11:01:38 -08:00
Anders Kaseorg
ed069ebe0e docs: Remove spaces before commas.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-22 17:17:25 -08:00
evykassirer
541d3ffa06 compose: Replace empty message banner with red outline for compose box.
Previously, we showed an empty message banner if the user tried
to send an empty message. We only showed it for users with
"ctrl+enter to send" because we thought it might be easy for a
user to press just enter accidentally.

However, this missed the case where the user clicks on the Enter
button. We want to show the user something in this case to tell
them that they're missing message content.

To avoid more complicated logic, this PR removes the banner
completely and changes the compose box border to red if the
user tries to send an empty message (for all cases).

The red line goes away as soon as the composebox has non-whitespace
characters.
2023-02-22 17:15:18 -08:00
Tim Abbott
631ca13428 Revert "typeahead: Fix bug where typeahead showed momentarily on shift + tab."
This reverts commit 9def249af1.

This broke the '>' typeahead.
2023-02-22 17:07:06 -08:00
Sahil Batra
678d16a908 migrations: Fix extra_data of RealmAuditLog objects.
This commit adds migration to fix extra_data field
of RealmAuditLog objects created on changing
can_remove_subscribers_group setting to add "property"
field since the same event type will now be used for
other group based stream settings that will be added
in future.
2023-02-22 12:17:46 -08:00
Sahil Batra
0cf99cf5c3 streams: Refactor code to set group-based stream settings.
We add stream_permission_group_settings object which is
similar to property_types framework used for realm settings.

This commit also adds GroupPermissionSetting dataclass for
defining settings inside stream_permission_group_settings.

We add "do_change_stream_group_based_setting" function which
is called in loop to update all the group-based stream settings
and it is now used to update 'can_remove_subscribers_group'
setting instead of "do_change_can_remove_subscribers_group".

We also change the variable name for event_type field of
RealmAuditLog objects to STREAM_GROUP_BASED_SETTING_CHANGED
since this will be used for all group-based stream settings.

'property' field is also added to extra_data field to identify
the setting for which RealmAuditLog object was created.

We will add a migration in further commits which will add the
property field to existing RealmAuditLog objects created for
changing can_remove_subscribers_group setting.
2023-02-22 12:17:46 -08:00
Sahil Batra
416c7c2199 user_groups: Add require_system_group parameter.
This commit adds require_system_group parameter to
get_realm_user_groups_for_dropdown_list_widget.
We currently pass this parameter as "true" always,
but this will be needed in future when we will allow
to set groups other than system groups in settings.
2023-02-22 12:17:46 -08:00
Alya Abbott
3e7de4cc64 docs: Fix typo on Design discussions doc. 2023-02-22 12:00:24 -08:00
Hemant Umre
2e2b4f5325 stream_settings: Fix Announce stream disables unexpectedly.
While switching from a private stream in the stream editing UI to
the stream creation UI, Announce stream becomes disabled. The state
of Announce stream option should not be affected by where the create
stream UI is opened.

Made the privacy_type selector more specific since it was also
selecting the last opened stream privacy type.

Fixes: #24238.
2023-02-22 11:53:26 -08:00
Alex Vandiver
95abcffb75 log-search: Fix precedence in no-color case. 2023-02-22 11:43:13 -08:00
Lauryn Menard
0019ce639c api-docs: Fix small typos and copy/paste errors in API changelog. 2023-02-22 08:48:22 -08:00
Mateusz Mandera
52515a1560 presence: Tweak and document presence tuning values.
We're changing the ping interval from 50s to 60s, because that's what
the mobile apps have hardcoded currently, and backwards-compatibility
is more important there than the web app's previously hardcoded 50s.

For PRESENCE_PING_INTERVAL_SECS, the previous value hardcoded in both
clients was 140s, selected as "plenty of network/other latency more
than 2 x ACTIVE_PING_INTERVAL_MS". This is a pretty aggressive value;
even a single request being missed or 500ing can result in a user
appearing offline incorrectly. (There's a lag of up to one full ping
interval between when the other client checks in and when you check
in, and so we'll be at almost 2 ping intervals when you issue your
next request that might get an updated connection time from that
user).

To increase failure tolerance, we want to change the offline
threshhold from 2 x ACTIVE_PING_INTERVAL + 20s to 3 x
ACTIVE_PING_INTERVAL + 20s, aka 140s => 200s, to be more robust to
temporary failures causing us to display other users as offline.

Since the mobile apps currently have 140s and 60s hardcoded, it should
be safe to make this particular change; the mobile apps will just
remain more aggressive than the web app in marking users offline until
it uses the new API parameters.

The end result in that Zulip will be slightly less aggressive at
marking other users as offline if they go off the Internet. We will
likely be able to tune ACTIVE_PING_INTERVAL downwards once #16381 and
its follow-ups are completed, because it'll likely make these requests
much cheaper.
2023-02-21 12:10:43 -08:00
Mateusz Mandera
8ef889f392 presence: Use server-provided params in the webapp.
As of the previous commit, the server provides these parameters in
page_params. The defaults match the values hard-coded in the webapp so
far - so get rid of the hard-coded values in favor of taking them from
page_params.
2023-02-21 12:10:43 -08:00
Mateusz Mandera
a593089770 presence: Return some presence params in the /register response. 2023-02-21 12:10:43 -08:00
Mateusz Mandera
4ba4305ff9 presence: Change server-side OFFLINE_THRESHOLD_SECS to 140s.
This old 300s value was meaningfully used in 2 places:
1. In the do_change_user_settings presence_enabled codepath when turning
   a user invisible. It doesn't matter there, 140s is just since the
   point is to make clients see this user as offline. And 140s is the
   threshold used by clients (see the presence.js constant).
2. For calculating whether to set "offline" "status" in
   result["presence"]["aggregated"] in get_presence_backend. It's fine
   for this to become 140s, since clients shouldn't be looking at the
   status value anymore anyway and just do their calculation based on
   the timestamps.
2023-02-21 12:10:43 -08:00
Alex Vandiver
38b7ecff68 log-search: Add a --timeline option to show gaps and overlaps. 2023-02-21 11:10:24 -08:00
Alex Vandiver
cfd9e56d1a log-search: Do no use color codes if output is not a TTY. 2023-02-21 11:10:24 -08:00
Sahil Batra
33d06af6c2 user_profile: Deduplicate code for showing custom profile fields.
This commit deduplicates template code for showing custom profile
fields in user info popover and full profile modal by extracting
it in a new file and then using that template file to render
the fields in user info popover and full profile modal.

This commit does not change the design or behavior and they are
same as before.
2023-02-21 10:19:47 -08:00
Alex Vandiver
bd6b215cdc sentry: Fix accidental blockquote by escaping >. 2023-02-21 09:59:13 -08:00
Alex Vandiver
ab9cab51de reset: Tag "forgot password" text for translation. 2023-02-21 09:16:22 -08:00
Abhijeet Prasad Bodas
6e001d0672 user topic: Remove unnecessary check for double addition of muted topic.
This makes use of the new case insensitive UNIQUE index added in the
earlier commit. With that index present, we can now rely solely on the
database to correctly identify duplicates and throw integrity errors as
required.
2023-02-20 21:04:13 -08:00
Abhijeet Prasad Bodas
80bf6b0777 user topic: Add case insensitive UNIQUE constraint.
This will allow us to rely on the database to detect duplicate
`UserTopic`s (with the same `topic_name` with different cases)
and thus correctly throw IntegrityErrors when expected.
This is also important from a correctness point of view, since as
of now, when checking if topic is muted or requesting the backend for
muting a topic, the frontend does not check for case insensitivity.

There might exist duplicate UserTopics (in a case insensitive sense)
which need are removed before creating the new index.
The migration was tested manually using `./manage.py shell`.
2023-02-20 21:04:13 -08:00
Abhijeet Prasad Bodas
9fde88796a mute user: Remove unnecessary check for double muting.
In 141b0c4, we added code to handle races caused by duplicate muting
requests. That code can also handle the non-race condition, so we don't
require the first check.
2023-02-20 21:04:13 -08:00
Sahil Batra
ca70089842 settings: Fix disabled select elements in modal.
The background-color and opacity is same for all
select elements in modals and settings in disabled
state, but due to the background of modal being
bright enough, the select element in modals would
not look disabled.

One possible solution could have been to set
"opacity: 1" but that changes opacity for text too
and makes it darker which is not the case for other
select elements.

So instead made the background slightly darker for
select elements inside the modal using hsla property.
It might not be exact same as the other select elements,
but it is still better than the previous behavior.

For role element in bot edit form, we used to set
opacity to 1 to fix this bug, and this commit removes
it as we have fixed it for all modals in general
2023-02-20 16:28:41 -08:00
Sahil Batra
1c055f402d settings: Add bootstrap-focus-style to select elements.
The class "bootstrap-focus-style" was not added to some
select elements in modals and this commit adds those.
2023-02-20 16:28:41 -08:00
Sahil Batra
27d2ac1e37 settings: Remove some duplicate CSS.
Since we added settings_select class to select elements
in both stream settings and user or realm settings in
previous commits, we can have common CSS defined at only
one place.
2023-02-20 16:28:41 -08:00
Sahil Batra
c6ff8f0551 modals: Add modal_select class to select elements.
This commit adds modal_select class to select elements in
modals, such that we can add CSS using this class and not
using "select" as selector so that we can easily add a
select element in future with different CSS if needed.
2023-02-20 16:28:41 -08:00
Sahil Batra
6bd650bc9f stream_settings: Add settings_select class to select elements.
This commit adds settings_select class to select elements in
stream settings, such that we can add CSS using this class and
not using "select" as selector so that we can easily add a select
element in future with different CSS if needed.
2023-02-20 16:28:41 -08:00
Sahil Batra
1afc730da7 settings: Add settings_select class to select elements.
This commit adds settings_select class to select elements in
user and organization settings, such that we can add CSS
using this class and not using "select" as selector so that
we can easily add a select element in future with different
CSS if needed.
2023-02-20 16:28:41 -08:00
Sahil Singh
183f5016a1 settings: Indicate character limit on restoring long draft messages.
Currently, when restoring drafts with long
messages no character limit or the compose
banner is shown.

We fix this by adding a check for text
overflow whenever any draft is restored.
2023-02-20 16:23:08 -08:00
Aman Agrawal
845e873c44 narrow_state: Add function to check if message feed is visible.
We directly check if message feed is visible in the code instead
of indirectly checking so via recent topics. This helps read the
code clearly and would be helpful with the upcoming inbox view.
2023-02-20 13:08:42 -08:00
Aman Agrawal
cc96be2bf9 recent_conversation: Delegate profile click handling to body.
`#recent_topics_table` may not be present in the DOM when
this click handler is initialized which can cause this
it to not work, delegating it to body ensures it will always work.
2023-02-20 13:04:13 -08:00
Aman Agrawal
4debef64e7 recent_conversation: Move click handlers out to an initialize function.
We are moving in the direction of removing click_handlers library.
2023-02-20 13:04:13 -08:00
Aman Agrawal
6e6fb47e20 muted_topics_ui: Extract mute_or_unmuted_topics. 2023-02-20 13:04:13 -08:00
Lauryn Menard
06dd6f8254 message-send: Deduplicate check of settings.MAX_MESSAGE_LENGTH.
Removes the initial check in `_internal_prep_message` of the length
of the message content because the `check_message` in the try block
will call `normalize_body` on the message content string, which
does a more robust check of the message content (empty string, null
bytes, length). If the message content length exceeds the value of
`settings.MAX_MESSAGE_LENGTH`, then it is truncated based on that
value. Updates associated backend test for these changes.

The removed length check would truncate the message content with a
hard coded value instead of using the value for
`settings.MAX_MESSAGE_LENGTH`.

Also, removes an extraneous comment about removing null bytes. If
there are null bytes in the message content, then `normalize_body`
will raise an error.

Note that the previous check had intentionally reduced any message over
the 10000 character limit to 3900 characters, with the code in
question dating to 2012's 100df7e349.

The 3900 character truncating rule was implemented for incoming emails
with the email gateway, and predated other features to help with
overly long messages (better stripping of email footers via Talon,
introduced in f1f48f305e, and
condensing, introduced in c92d664b44).
While we could preserve that logic if desired, it likely is no longer
a necessary or useful variation from our usual truncation rules.
2023-02-20 12:55:15 -08:00
Alex Vandiver
93e78ea72f spectators: Save a redirect to /register/. 2023-02-20 12:21:33 -08:00
Anders Kaseorg
64f0dcecb0 install-node: Upgrade Node.js to 18.14.1 security release.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-20 12:16:28 -08:00
Anders Kaseorg
99f1d08786 styles: Hoist @keyframes to top level.
This has always been in the global namespace.  Pretending that it’s
scoped when it isn’t and giving it a short name will lead to
confusion.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-20 12:10:18 -08:00
Anders Kaseorg
f99cff0735 styles: Fix flatpickr dark theme in automatic mode.
Flatpickr had been unconditionally using the light theme in automatic
color scheme mode; this fixes it to follow the system preference like
the rest of the app.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-20 12:09:52 -08:00
Alex Vandiver
d3403dde86 rabbitmq: Add a RABBITMQ_PORT setting. 2023-02-20 12:04:25 -08:00
Lauryn Menard
0463b0df7b api-docs: Update content parameter for max_message_length.
Updates the descriptions of content parameters (optional and
required) to note that the maximum size of the message content
should be based on the `max_message_length` value returned by
the register endpoint.

Previously these descriptions had a hardcoded value of 10000
bytes as the maximum message size.

Also, updates the description of `max_message_length` to clarify
that the value represents Unicode code points.
2023-02-20 12:03:12 -08:00
Lauryn Menard
b25cba16a7 tests: Remove ignored parameter from authenticated_json_view test.
The password parameter being passed in the `_do_test` helper
function for `TestAuthenticatedJsonPostViewDecorator` tests was
being ignored, as the user needs to be logged in. Removes the
parameter from the helper function and updates the success test
to use `assert_json_success` instead of just checking the status
code.

Also adds a test case for when a user is not logged in to confirm
that it returns an UnauthorizedError.
2023-02-20 11:56:00 -08:00
Alex Vandiver
8998aa00cd Revert "create_user: Use transaction.atomic decorator for do_create_user."
This reverts commit 851d68e0fc.

That commit widened how long the transaction is open, which made it
much more likely that after the user was created in the transaction,
and the memcached caches were flushed, some other request will fill
the `get_realm_user_dicts` cache with data which did not include the
new user (because it had not been committed yet).

If a user creation request lost this race, the user would, upon first
request to `/`, get a blank page and a Javascript error:

    Unknown user_id in get_by_user_id: 12345

...where 12345 was their own user-id.  This error would persist until
the cache expired (in 7 days) or something else expunged it.

Reverting this does not prevent the race, as the post_save hook's call
to flush_user_profile is still in a transaction (and has been since
168f241ff0), and thus leaves the potential race window open.
However, it much shortens the potential window of opportunity, and is
a reasonable short-term stopgap.
2023-02-17 21:20:52 -05:00
Alex Vandiver
7feda75c5f populate_db: Temporarily remove post-delete signal on AlertWord.
The post-delete signal on AlertWord clears the realm cache; when it is
called repeatedly, this results in re-fetching the realm object O(n)
times, where n scales by number of users in the database.

Disconnect this cache-clearing signal before removing the AlertWord
entries, and reconnect it afterwards.  This is not thread-safe, but
this section is single-threaded.  It is also probably unnecessary to
re-connect the signal, as rest of `./manage.py populate_db` does not
delete AlertWord objects, but cleanliness dictates doing the
re-connection.

This drops the time to repeatedly run:
    python3 ./manage.py populate_db --num-messages=0 --extra-users=1000

...from 47 seconds to 36 seconds.
2023-02-17 13:59:11 -08:00
Anders Kaseorg
7cafbefdef ci: Reduce production suite tarball retention from 14 days to 1.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-16 10:15:11 -05:00
Anders Kaseorg
bf7d3124ab openapi: Correct “we-public” typo.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-15 15:21:54 -08:00
Alex Vandiver
0d42abe1a8 puppet: wal-g is a tarball with a single file, not a directory.
5db55c38dc switched from `ensure => present` to the more specific
`ensure => directory` on the premise that tarballs would result in
more than one file being copied out of them.  However, we only extract
a single file from the wal-g tarball, and install it at the output
path.  The new rule attempts to replace it with an empty directory
after extraction.

Switch back to `ensure => present` for the tarball codepath.
2023-02-14 18:18:36 -05:00
Alex Vandiver
f8a16fb9af model: Handle parsed user-agents longer than 30 characters.
The Client.name field is only 30 characters long, but there is no
limit to the length of parsed User-Agent value which we may attempt to
store in it.  This can cause requests with long user-agents to 500
when the creation of the Client row fails.

Truncate the name at 30 characters for the cache key, and passing
`name` to `get_or_create`.
2023-02-14 14:58:15 -08:00
Alex Vandiver
6f8ce2d00a hooks: Fix shebang line to use /usr/bin/env bash. 2023-02-14 17:28:58 -05:00
Alex Vandiver
044ccdb334 chat.zulip.org: Enable Sentry hook. 2023-02-14 17:20:35 -05:00
Alex Vandiver
63de600451 backends: Use staticfilesfor social auth logos. 2023-02-14 17:17:06 -05:00
Alex Vandiver
3559bf416d settings: Allow customization of STATIC_URL.
Some requests will still be to `/static/`, either at the realm's
domain, or at the root domain.
2023-02-14 17:17:06 -05:00
Alex Vandiver
dd21e472e7 subdomains: Extend tests for for same-host when STATIC_URL has domain. 2023-02-14 17:17:06 -05:00
Alex Vandiver
a1967a7f2d markdown: Rewrite /static/ images to use staticfiles_storage.url. 2023-02-14 17:17:06 -05:00
Alex Vandiver
ccecc8eb84 markdown: Comment why we do not hash or use STATIC_URL for :zulip:. 2023-02-14 17:17:06 -05:00
Alex Vandiver
6806bec2e9 email_notifications: Use stable, unhashed, URLs for emoji in emails. 2023-02-14 17:17:06 -05:00
Alex Vandiver
72ac38eff8 send_email: Use STATIC_URL as base for images in emails. 2023-02-14 17:17:06 -05:00
Alex Vandiver
e31767dda4 settings: Make DEFAULT_LOGO_URI/DEFAULT_AVATAR_URI use staticfiles. 2023-02-14 17:17:06 -05:00
Alex Vandiver
5d0d0ba4a9 static: Replace handlebars static images with their require'd versions. 2023-02-14 17:17:06 -05:00
Alex Vandiver
e0a7658db7 ts: Pull in static assets via import. 2023-02-14 17:17:06 -05:00
Alex Vandiver
ea2a0a7632 js: Pull in static assets via import. 2023-02-14 17:17:06 -05:00
Alex Vandiver
1f47d7793d landing-page: Stop relying on image paths. 2023-02-14 17:17:06 -05:00
Alex Vandiver
c24bd07b76 templates: Use static() helper to generate /static/ URLs. 2023-02-14 17:17:06 -05:00
Alex Vandiver
10b1e11410 styles: Remove unnecessary ../static/ in image path. 2023-02-14 17:17:06 -05:00
Alex Vandiver
ede0ae9069 unminify: Do not assume /static/ exists in the stacktrace. 2023-02-14 17:17:06 -05:00
Alex Vandiver
ab9f974f48 emoji_settings: Stop using the avatar as placeholder; it is never seen.
The design of this element was changed midway through #22504, and
despite a separate placeholder icon using used, the preview was still
reset to the default avatar -- but is always hidden when so set.
2023-02-14 17:17:06 -05:00
Alex Vandiver
25b97c2872 storage: Skip hashing markdown files. 2023-02-14 17:17:06 -05:00
Alex Vandiver
d9af7f25e8 storage: Fix extension logic to not hash other resource files. 2023-02-14 17:17:06 -05:00
Anders Kaseorg
e0e17d2391 docs: Update frontend_tests/puppeteer_lib/common.ts path.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-14 13:39:41 -08:00
Anders Kaseorg
4cd847ac44 styles: Fix horizontal SimpleBar height for SimpleBar 6.
030b89b94e

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-13 15:45:12 -08:00
Abhijeet Prasad Bodas
9bc49ea4be message_send: Extract out stream notification user-set calculation logic.
This will allow us to re-use this logic later, when we add support for
re-checking notification settings just before sending email/push
notifications to the user.

Also, since this is essentially part of the notifiability logic,
this better belongs to `notification_data.py` and this change will
hopefully reduce the reading complexity of the message-send codepath.
2023-02-10 22:47:30 -08:00
Abhijeet Prasad Bodas
167ea63c1f message_send: Add comment on wildcard_mention_user_ids optimization.
The earlier commit explained the code, and not why we have this
optimization in the first place.
2023-02-10 22:47:30 -08:00
David Rosa
2b9b0acaa4 help: Update URL references to new "Configure email visibility" page. 2023-02-10 18:15:56 -08:00
Alya Abbott
9ea3572017 help: Document new user setting for configuring email visibility.
- Adds a URL redirect from the old page to the new page.
2023-02-10 18:15:56 -08:00
Sahil Batra
9d1dc20e6e settings: Remove realm-level email_address_visibility setting.
This was replaced by the new user-level version in recent commits.

Fixes #20035.
Fixes #18149.
2023-02-10 17:40:33 -08:00
Sahil Batra
1b110552ec settings: Migrate to use user-level email_address_visibility setting. 2023-02-10 17:35:50 -08:00
Sahil Batra
f4065b587b settings: Add dropdown for email_address_visibility setting.
This commit adds dropdown for user-level and realm-level
default of email address visibility setting.
2023-02-10 17:35:50 -08:00
Sahil Batra
b84885184e settings: Use user-level email_address_visibility setting in UI.
This commit basically updates the frontend code to directly use
delivery_email field instead of functions like show_email or
email_for_user_settings at places where we want to show email.
We can do this change since we recently updated the server code
to always pass "delivery_email" code in the user objects with its
value being null if the real email is not accessible.

Showing email or "hidden" or nothing at various places in UI like
in users list, subscriber list, user profile popover and modal is
same as before.

Major points -

- Removed show_email and email_for_user_settings functions since we
directly use delivery_email field now as explained above.

- While sorting by emails in the users list, users with real emails
hidden are always shown in last when sorting alphabetically and at
the top when sorting reverse alphabetically. Also, those users with
real emails hidden, are sorted by name among themselves. As we did
before, we do not allow sorting by email when all emails are hidden.

- There is no change in typeahead behavior at this point. We either
hide the email completely or show the real or fake email based on
user level setting.

- Added code to handle delivery_email events and appropriately add/remove
delivery_email field from person objects.
2023-02-10 17:35:50 -08:00
Sahil Batra
0ed5f76063 settings: Add backend code for using user email_address_visibility setting.
This commits update the code to use user-level email_address_visibility
setting instead of realm-level to set or update the value of UserProfile.email
field and to send the emails to clients.

Major changes are -

- UserProfile.email field is set while creating the user according to
RealmUserDefault.email_address_visbility.

- UserProfile.email field is updated according to change in the setting.

- 'email_address_visibility' is added to person objects in user add event
and in avatar change event.

- client_gravatar can be different for different users when computing
avatar_url for messages and user objects since email available to clients
is dependent on user-level setting.

- For bots, email_address_visibility is set to EVERYONE while creating
them irrespective of realm-default value.

- Test changes are basically setting user-level setting instead of realm
setting and modifying the checks accordingly.
2023-02-10 17:35:49 -08:00
Sahil Batra
ea0b2286e0 settings: Add email_address_visbility user setting. 2023-02-10 17:35:49 -08:00
Sahil Batra
2396e6858f users: Always pass "delivery_email" field in user objects.
Previously, user objects contained delivery_email field
only when user had access to real email. Also, delivery_email
was not present if visibility setting is set to "everyone"
as email field was itself set to real email.

This commit changes the code to pass "delivery_email" field
always in the user objects with its value being "None" if
user does not have access to real email and real email otherwise.
The "delivery_email" field value is None for logged-out users.
For bots, the "delivery_email" is always set to real email
irrespective of email_address_visibility setting.

Also, since user has access to real email if visibility is set
to "everyone", "delivery_email" field is passed in that case
too.

There is no change in email field and it is same as before.

This commit also adds code to send event to update delivery_email
field when email_address_visibility setting changes to all the
users whose access to emails changes and also changes the code to
send event on changing delivery_email to users who have access
to email.
2023-02-10 17:35:49 -08:00
Ujjawal Modi
a2bcf3a77c css: Use span rather than div for status_emoji elements.
These being possibly `display: block` in some settings resulted in
them taking up visible space oddly if the asset failed to load.

tabbott could not reproduce the original bug, perhaps because changes
in the emoji CSS do `display: inline-block` on div.emoji, but the
logical intent for this component suggests it should be a span in any
case.

Fixes #23516.
2023-02-10 17:29:24 -08:00
Tim Abbott
29c6b4b9f2 recent topics: Fix exception displaying PMs with 5+ senders.
The previous logic incorrectly tried to map elements of the list of
user IDs beyond 4 senders to their `.id` fields, which were undefined;
the correct thing to do is just use the list of user IDs that we
already have.
2023-02-10 17:16:20 -08:00
Aman Agrawal
39255a5ed0 portico_signin: Fix content wrapping too much.
Due to `max-width: min-content` being used and `min-width: max-content`
not being applied since it is not present outside of development
environment, the text wrapped after every word.

The intention of this CSS was to restrict the max-width of the
`white-box` and I think 800px is a good max-width after which
content should wrap.
2023-02-10 15:58:04 -08:00
David Rosa
8c047275a4 help: Update URLs to match "Restrict moving messages" title.
Updates all references to the new URL and adds a URL redirect.

Follow up to #24329.
2023-02-10 15:56:16 -08:00
David Rosa
3254023fa3 help: Update URLs to match "Restrict message editing and deletion" title.
Updates all references to the new URL and adds a URL redirect.

Follow up to #24329.
2023-02-10 15:56:16 -08:00
Alex Vandiver
3109d40b21 puppet: Add a sentry release class.
This installs the Sentry CLI, and uses it to send API events to Sentry
when a release is started and completed.
2023-02-10 15:53:10 -08:00
Alex Vandiver
bcd190ecf2 docs: Document backend Sentry error logging. 2023-02-10 15:53:10 -08:00
Alex Vandiver
5db55c38dc puppet: Add a sha256_file_to. 2023-02-10 15:53:10 -08:00
Alex Vandiver
af0ba0b58f puppet: sha256_tarball_to is only ever called with one from/to. 2023-02-10 15:53:10 -08:00
Alex Vandiver
840884ec89 upgrade-zulip: Provide directories to run hooks before/after upgrade.
These hooks are run immediately around the critical section of the
upgrade.  If the upgrade fails for preparatory reasons, the pre-deploy
hook may not be run; if it fails during the upgrade, the post-deploy
hook will not be run.  Hooks are called from the CWD of the new
deploy, with arguments of the old version and the new version.  If
they exit with non-0 exit code, the deploy aborts.
2023-02-10 15:53:10 -08:00
Alex Vandiver
74067f071f upgrade-zulip: Print the old and new versions during upgrades.
Fixes: #23620
2023-02-10 15:53:10 -08:00
Alex Vandiver
418e51cc5b zulip_tools: Shell out to python to get true ZULIP_VERSION.
Parsing veryion.py will not get extended version information from git.
2023-02-10 15:53:10 -08:00
Anders Kaseorg
41aadc8c63 message_send: Convert RecipientInfoResult from TypedDict to dataclass.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-10 15:51:22 -08:00
Tim Abbott
387f178ef1 lint: Fix import sort order. 2023-02-10 15:47:32 -08:00
Abhijeet Prasad Bodas
7d02b20bdb user topics: Rename test file.
This makes the file name in line with the model name and other files,
for better discoverability.

This probably should have been a part of
48883f1580.
2023-02-10 15:39:57 -08:00
Abhijeet Prasad Bodas
9d1c131dc6 muted users: Make file naming consistent.
This makes the names of the relevant files consistant with the database
model name as well as the frontend JS files.
2023-02-10 15:39:57 -08:00
Lauryn Menard
81d1be011d node-tests: Remove unnecessary mock in compose_actions node test.
In commit 0d373e574b, the use of `common.status_classes` was
removed from `compose_actions.js`, so there is no longer a need
to mock it in the related node test.
2023-02-10 10:39:22 -08:00
Lauryn Menard
1ddc27d91b pm-list-data: Remove unused is_all_privates function.
In commit 6f9e97921, the last use of `pm_list_data.is_all_privates`
was removed when we restructured how private messages are shown
in the left sidebar. Removes the function since it is now no longer
relevant.
2023-02-10 10:38:55 -08:00
Anders Kaseorg
0a1904a6a7 markdown: Rewrite YouTube URL parser without regex spaghetti.
This also adds support for the new YouTube Shorts URLs.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-09 22:34:51 -08:00
Zixuan James Li
53aa3f6c71 typeahead: Add typescript type definitions for typeahead.
This allows us to import typeahead from people.ts with types. This is
possible since #22586 was merged.

And since "sort_emojis" is always supposed to be called with valid emoji
objects that have "reaction_type" with an optional "emoji_code", we add
a check before we see if the emoji is popular to avoid poking
popular_set with an undefined value.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-02-09 16:51:40 -08:00
Zixuan James Li
9808bdf1d3 typeahead: Ensure presence of is_realm_emoji.
The implementation of the emoji sorter relies on the presence of the
"is_realm_emoji" property. We want to be consistent with this
assumption.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-02-09 16:51:40 -08:00
Zixuan James Li
6e9079f876 typeahead: Remove is_unicode_emoji.
This avoids the type narrowing problem when we call "is_unicode_emoji"
on an emoji object and access "emoji.emoji_code", which might be
"undefined".

In places where these helpers are accessed, we expect that
"reaction_type" is always present so that we can later correctly type
narrow Emoji into UnicodeEmoji. This updates the test cases to
respect that.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-02-09 16:51:40 -08:00
Zixuan James Li
45fdfcd6d4 typeahead: Remove default value for triage.
"get_item"'s default value is not type-safe as we require its return
value to always be a "string". Note that since the mobile app does not
rely on this function directly, it is sufficient to only refactor the web
app for this transition.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-02-09 16:51:40 -08:00
Anders Kaseorg
ec58b6790d install-node: Upgrade Node.js to 18.14.0; manage Yarn with Corepack.
Corepack manages multiple per-project version of Yarn and PNPM, which
means we have to maintain less installation code, and could help us
switch away from Yarn 1 without making the system unusable for
development of other Yarn 1 projects.

https://nodejs.org/api/corepack.html

The Unicode spaces in the timerender test resulted from an ICU
upgrade: https://github.com/nodejs/node/pull/45068.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-09 15:50:47 -08:00
Anders Kaseorg
70ac144d57 markdown: Replace custom cache decorator with functools.lru_cache.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-09 15:46:11 -08:00
evykassirer
d91d3146ce compose banners: Lighten banner text in dark mode. 2023-02-09 15:45:10 -08:00
Anders Kaseorg
7eb2cffcb4 templates: Update comments referencing Mustache to Handlebars.
(We switched to Handlebars very early in commit
4793cee888431b41f0aaf5341e2d8c77a155e8b8.)

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-09 14:12:54 -08:00
Alex Vandiver
02a73af386 deferred_work: Log at start of the work.
This is helpful for debugging -- generally these tasks are in a worker
queue because they take a long time to run, so knowing what long task
is about to start before it does, rather than just after, is useful.
2023-02-09 12:06:38 -08:00
Alex Vandiver
7ab4fdf250 memcached: Allow overriding the max-item-size.
This is necessary for organizations with extremely large numbers of
members (20k+).
2023-02-09 12:04:29 -08:00
Sahil Singh
4c4491cdcf design: Remove misaligned loading text on smaller devices.
The loading message that occurs at the top of the narrow when first
loading the Zulip app (posted to the right of the centered Z spinner)
looked misaligned on smaller screen devices.

We fix this by just removing the 'Loading...' message, since the text
was unnecessary to communicate the idea that we're loading content.

(The text was also missing translation tags).
2023-02-09 10:13:19 -08:00
Anders Kaseorg
f90a41bab0 upload: Replace deprecated PIL.PngImagePlugin.APNG_DISPOSE_OP_NONE.
https://pillow.readthedocs.io/en/stable/deprecations.html#constants

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-09 10:06:25 -08:00
Aman Agrawal
7dacbc934f recipient_bar: Add box shadow at top.
We add a box shadow at top of the recipient bar to hide message
text that are partially visible above the recipient bar. At 100%
zoom, this issue is not visible but it has been reported by a user
at 150% zoom.

Following this change we don't need to do change any of our JS
calculations since `y` position of header remains the same
and when determining if a header `is_sticky` that is the only
thing we verify.
2023-02-09 10:05:42 -08:00
Anders Kaseorg
201debc1ea upload: Replace deprecated PIL.Image.ANTIALIAS with LANCZOS.
https://pillow.readthedocs.io/en/stable/deprecations.html#constants

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-08 17:53:45 -08:00
Anders Kaseorg
9efbfa22f2 dependencies: Upgrade JavaScript dependencies.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-08 17:05:58 -08:00
Alya Abbott
66919ffa90 help: Update documentation on editing and moving messages.
- Updates reflect recent settings changes.
- Also update links from other help pages.
2023-02-08 16:44:26 -08:00
Anders Kaseorg
6992d3297a ruff: Fix PIE810 Call startswith once with a tuple.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-08 16:40:35 -08:00
Tim Abbott
b9fc5da350 tooltips: Fix hotkey-hint CSS class reuse.
The "hotkey-hint" class name used internally in
d66f2d900f conflicted with the
preexisting class name for hotkey hints into popovers, introduced in
80ff3d8da5.

Given that the new class is for a styling of hotkey hints designed for
use in tooltips, it was a bad name anyway, so just rename it to
tooltip-hotkey-hint. We rename the related cluster of variable names
to match this.
2023-02-08 13:13:35 -08:00
N-Shar-ma
d2ea65da10 compose: Clean code to fix up hotkey to edit previous message.
This is a follow up to 875ad8e implementing a better approach. We call
`cursor_at_start_of_whitespace_in_compose` from `focus_in_empty_compose`
itself if and when needed.
2023-02-08 12:51:38 -08:00
Sahil Batra
34fa712220 settings: Clarify message-delete-time-limit setting rule.
This commit adds note to the message-delete-time-limit
setting label that the time limit does not apply to
administrators.
2023-02-08 12:46:05 -08:00
Sahil Batra
2fcaf88305 message_edit: Add code to live-update inline-topic edit icon.
This commit adds code to live-update the inline-topic edit
icon on changing move_messages_within_stream_limit_seconds
or edit_topic_policy. We simply rerender the message list
as it becomes difficult to check for each recipient row
and update it because topic edit permission depends on
when the message was sent.

This also live-updates the resolve topic icon as it depends
on topic edit permission only.
2023-02-08 12:46:05 -08:00
Sahil Batra
2eb204f699 settings: Add move_messages_between_streams_limit_seconds element in UI.
This commit adds dropdown for move_messages_between_streams_limit_seconds
setting which is used to control for how long the user is allowed to
edit stream.
2023-02-08 12:46:05 -08:00
Sahil Batra
4378b1639d settings: Add move_messages_within_stream_limit_seconds element in UI.
This commit adds dropdown for move_messages_within_stream_limit_seconds
setting which is used to control for how long the user is allowed to
edit topic.
2023-02-08 12:46:05 -08:00
Sahil Batra
03df1c16f1 message_edit: Use move_messages_between_streams_limit_seconds in webapp.
This commit adds code to check time limit as per recently added
move_messages_between_streams_limit_seconds setting when moving
messages between streams in webapp. There is no time limit for
admins and moderators.

We add a new function "is_stream_editable" (similar to already
existing is_topic_editable function) to check whether user is
allowed to move message between streams.
2023-02-08 12:46:05 -08:00
Sahil Batra
891f83601d message_edit: Use move_messages_between_streams_limit_seconds setting.
This commit adds time restriction on moving messages between streams
using the move_messages_between_streams_limit_seconds setting in the
backend. There is no time limit for admins and moderators.
2023-02-08 12:46:05 -08:00
Sahil Batra
d514f2455f message_edit: Use move_messages_within_stream_limit_seconds in webapp.
We now use realm_move_messages_within_stream_limit_seconds setting in
webapp to check topic edit permission replacing the 3-day limit.
As was the case previously, there is no limit for admins and
moderators.
2023-02-08 12:46:05 -08:00
Sahil Batra
2c4e076fef message_edit: Use move_messages_within_stream_limit_seconds setting.
We now use the newly added move_messages_within_stream_limit_seconds
setting to check for how long the user can edit the topic replacing
the previously used 3-day limit. As it was previously, there is no
time limit for admins and moderators.
2023-02-08 12:46:05 -08:00
Sahil Batra
b919dfd489 realm: Add time limit setting for moving messages between streams.
This commit adds "move_messages_between_streams_limit_seconds"
setting which would be used to set a time limit to move messages
between streams.
2023-02-08 12:46:05 -08:00
Sahil Batra
73f0eae394 realm: Add time limit setting for moving message within stream.
This commit adds "move_messages_within_streams_limit_seconds"
setting which would be used to set a time limit to move messages
within stream.
2023-02-08 12:46:05 -08:00
Sahil Batra
5b1f6a696e message: Refactor code for parsing message time limit settings.
This commit renames parse_message_content_edit_or_delete_limit
to parse_message_time_limit_setting and also renames
MESSAGE_CONTENT_EDIT_OR_DELETE_LIMIT_SPECIAL_VALUES_MAP to
MESSAGE_TIME_LIMIT_SETTING_SPECIAL_VALUES_MAP.

We do this change since this function and object will also be
used for message move limit and it makes sense to have a more
generic name.
2023-02-08 10:59:28 -08:00
Sahil Batra
1a656d2e23 realm: Deduplicate code for parsing message edit and delete limit settings.
This commit extracts a function to parse message time limit type settings
and to set it if the new setting value is None.

This function is currently used for message_content_edit_limit_seconds and
message_content_delete_limit_seconds settings and will be used for
message_move_limit_seconds setting to be added in further commits.
2023-02-08 10:59:28 -08:00
Sahil Batra
ebafe541dc settings: Add live-update code for move_messages_between_streams_policy.
This commit adds code to update move_messages_between_streams_policy
in page_params dict and also call sync_realm_settings which updates
the setting element in UI.
2023-02-08 10:59:28 -08:00
Sahil Batra
e53b09fb12 events: Remove code for settings which are included in property_types.
These lines in fetch_initial_state_data are redundant now since these
settings are already included in property_types after 04693b6ac1.
2023-02-08 10:59:28 -08:00
Mateusz Mandera
89a72c92ea stripe: Change realm.plan_type when upgrading a realm to Plus plan. 2023-02-08 10:28:13 -08:00
Aman Agrawal
4dfe3d36e0 floating_recipient_bar: Replace with sticky header. 2023-02-07 16:25:39 -08:00
Aman Agrawal
00be770d38 css: Use variables for changed header height in smaller widths.
In addition to the benefit of using variables, this change makes
it more noticeable that the header has a different height on smaller
widths.
2023-02-07 16:25:39 -08:00
Aman Agrawal
b7ea924876 css: Combine box-shadows for selected message.
There are no visual changes since we are replacing 4 single borders
with a single box.
2023-02-07 16:25:39 -08:00
Aman Agrawal
2be3cbc00e message_list_view: Remove wrong $ prefix in message_viewport variable.
Since `message_viewport` library is not jQuery object, it should
not have `$` prefix before it.
2023-02-07 16:25:39 -08:00
David Rosa
e3c75ee0a9 help: Cross-link Do Not Disturb with other Notifications pages.
Fixes part of #24169.
2023-02-07 16:00:46 -08:00
David Rosa
6567a45488 help: Document Do Not Disturb feature in Desktop app.
Documents the Do Not Disturb option with a dedicated page in
the Notifications section.

The capitalization is not our standard style because the desktop app
doesn't follow that style convention.

Fixes #24169.
2023-02-07 16:00:46 -08:00
Pranav2612000
c58f38dae3 compose: Show resolve topic banner only once per narrow.
Previously, when sending a message to a resolved topic, if you disissed
the 'You are sending a message to a resolved topic' banner, it would
reappear as soon as the user enters another character.

Fix this by showing the banner at most once per narrow. It does not
reappear if the user closes the banner and continues typing.  It will
only be shown again if the user closes compose, changes stream/topic,
sends a message or otherwise clears the compose box state.

We also remove the existing check for whether this banner is already
visible; this is essentially a more precise version of the same logic.

Fixes #24245.
2023-02-07 15:53:25 -08:00
N-Shar-ma
0e55b2aed9 unread: Show unread count for only 1:1 human PMs for right sidebar icon.
Uptil now, the right sidebar user list unread count included bot and group
PMs which sometimes resulted in the confusing state of the user list icon
indicating unread messages but on expanding the user list, no username
had a counter beside it, since the list only has individual human users.

Now this right sidebar unread count too excludes bots and groups, so the
unread count and the user list are consistent, without any ghost counts.
2023-02-07 15:38:32 -08:00
SameepAher
8efa3965fd css: Fix long name overflow in user profile modal.
Set width of the heading tag displaying user profile name heading, which
doesn't let the edit button get pushed off the user profile modal.

Ellipsis property is applied to user profile name on text overflow.

Fixes: #23781.
2023-02-07 15:36:51 -08:00
Palash Baderia
0ca5d11670 settings: Improve column widths in settings > uploaded files.
Changed the width of the file column to show the names properly,
while making sure that the table UI remains consistent in different
languages too (checked the same for Russian language).

Drop the file size column if the viewport is less than 992px (lg_min)
to ensure that the size word doesn't break when there are no uploaded files.
Discussed on CZO thread.

Changed the position of the Date uploaded arrow to stay visible
in all view ports and added word-break to prevent spill over of Mentioned-in
and date uploaded.

Fixes: #23738
2023-02-07 15:15:40 -08:00
m-e-l-u-h-a-n
8f29f81539 user groups: Fix incorrect checking for open groups overlay.
Overlays.js incorrectly checked for whether `#groups` overlay
was open, so it re-assigned the global `open_overlay_name`
variable. As a consequence unwanted bluslip errors were thrown
when closing the groups overlay after any group event was
received while the `#groups` overlay was open.
2023-02-07 15:12:56 -08:00
m-e-l-u-h-a-n
9d6cc8142b user groups: Add support for add_member and remove member events. 2023-02-07 15:12:56 -08:00
m-e-l-u-h-a-n
1f03042a48 user groups: Add support for removing user groups.
The new `#groups` overlay had no way for user groups to be deleted.
This commit adds UI support for removing user groups along with
adding support for live update of `#groups` overlay on remove
event for user groups.
2023-02-07 15:12:56 -08:00
m-e-l-u-h-a-n
c0cd6f7f04 user groups: Add support for user group update event. 2023-02-07 15:12:56 -08:00
m-e-l-u-h-a-n
6147f2bd7a user groups: Add live update support for user_group add event.
We add live update support for user group events as part of
https://github.com/zulip/zulip/issues/19526.
This however has a few TODOs:
1. Deciding on how we want to sort the group list on left of
   #groups overlay.
2. How we highlight the newly created groups after it is added
   to the list.
These will be covered as we add support for more groups events.
2023-02-07 15:12:56 -08:00
Purushottam Tiwari
fdd9f018ad user groups: Add + button to navigate to create user group. 2023-02-07 15:12:56 -08:00
Purushottam Tiwari
637bbf638e user groups: Enable remove button for user creating the user group. 2023-02-07 15:12:56 -08:00
Purushottam Tiwari
4a91bf8f5b user groups: Add margins to user group create alert info.
Since we do not currently have live update on newly
created ui for user group management, alert shown
after successful creation of user group apeared across
full width of right panel of #groups overlay. Which
made it look a bit awkward, so we add margins to that
alert info.
2023-02-07 15:12:56 -08:00
Aman Agrawal
7a8ddf90cd css: Remove focus outline on simplebar wrapper elements.
This removes the focus outline on `simplebar-content-wrapper` in
the left sidebar and other places in the app when focused since
it doesn't look visually nice.
2023-02-07 11:06:13 -08:00
Sahil Batra
db4bae8050 portico: Fix cursor set to pointer incorrectly for input elements.
This commit fixes the code which incorrectly set the cursor
property to "pointer" for input and textarea elements where
only select elements should have it. The code causing this bug
was added in d708bc338.
2023-02-07 11:05:06 -08:00
Alex Vandiver
e3c976fed9 missed_messages: Include messages from topic which differ by case.
In Zulip, message topics are case-insensitive but case-preserving.
The `get_context_for_message` function erroneously did a
case-sensitive search, and thus only messages whose topic matched
exactly were pulled in as context.

Make the missed-message pipeline aware that message topics are not
case-sensitive.  This means that, when collapsing adjacent messages,
we merge messages with topic headers which are "different"; create a
separate explicit "grouping" to know which to collapse.
2023-02-07 11:04:21 -08:00
Alex Vandiver
23894fc9a3 uploads: Set Content-Type and -Disposition from Django for local files.
Similar to the previous commit, Django was responsible for setting the
Content-Disposition based on the filename, whereas the Content-Type
was set by nginx based on the filename.  This difference is not
exploitable, as even if they somehow disagreed with Django's expected
Content-Type, nginx will only ever respond with Content-Types found in
`uploads.types` -- none of which are unsafe for user-supplied content.

However, for consistency, have Django provide both Content-Type and
Content-Disposition headers.
2023-02-07 17:12:02 +00:00
Alex Vandiver
2f6c5a883e CVE-2023-22735: Provide the Content-Disposition header from S3.
The Content-Type of user-provided uploads was provided by the browser
at initial upload time, and stored in S3; however, 04cf68b45e
switched to determining the Content-Disposition merely from the
filename.  This makes uploads vulnerable to a stored XSS, wherein a
file uploaded with a content-type of `text/html` and an extension of
`.png` would be served to browsers as `Content-Disposition: inline`,
which is unsafe.

The `Content-Security-Policy` headers in the previous commit mitigate
this, but only for browsers which support them.

Revert parts of 04cf68b45e, specifically by allowing S3 to provide
the Content-Disposition header, and using the
`ResponseContentDisposition` argument when necessary to override it to
`attachment`.  Because we expect S3 responses to vary based on this
argument, we include it in the cache key; since the query parameter
has dashes in it, we can't use use the helper `$arg_` variables, and
must parse it from the query parameters manually.

Adding the disposition may decrease the cache hit rate somewhat, but
downloads are infrequent enough that it is unlikely to have a
noticeable effect.  We take care to not adjust the cache key for
requests which do not specify the disposition.
2023-02-07 17:09:52 +00:00
Alex Vandiver
36e97f8121 CVE-2023-22735: Set a Content-Security-Policy header on proxied S3 data.
This was missed in 04cf68b45ebb5c03247a0d6453e35ffc175d55da; as this
content is fundamentally untrusted, it must be served with
`Content-Security-Policy` headers in order to be safe.  These headers
were not provided previously for S3 content because it was served from
the S3 domain.

This mitigates content served from Zulip which could be a stored XSS,
but only in browsers which support Content-Security-Policy headers;
see subsequent commit for the complete solution.
2023-02-07 17:09:52 +00:00
Alex Vandiver
d41a00b83b uploads: Extra-escape internal S3 paths.
In nginx, `location` blocks operate on the _decoded_ URI[^1]:

> The matching is performed against a normalized URI, after decoding
> the text encoded in the “%XX” form

This means that if a user-uploaded file contains characters that are
not URI-safe, the browser encodes them in UTF-8 and then URI-encodes
them -- and nginx decodes them and reassembles the original character
before running the `location ~ ^/...` match.  This means that the `$2`
_is not URI-encoded_ and _may contain non-ASCII characters.

When `proxy_pass` is passed a value containing one or more variables,
it does no encoding on that expanded value, assuming that the bytes
are exactly as they should be passed to the upstream.  This means that
directly calling `proxy_pass https://$1/$2` would result in sending
high-bit characters to the S3 upstream, which would rightly balk.

However, a longstanding bug in nginx's `set` directive[^2] means that
the following line:

```nginx
set $download_url https://$1/$2;
```

...results in nginx accidentally URI-encoding $1 and $2 when they are
inserted, resulting in a `$download_url` which is suitable to pass to
`proxy_pass`.  This bug is only present with numeric capture
variables, not named captures; this is particularly relevant because
numeric captures are easily overridden by additional regexes
elsewhere, as subsequent commits will add.

Fixing this is complicated; nginx does not supply any way to escape
values[^3], besides a third-party module[^4] which is an undue
complication to begin using.  The only variable which nginx exposes
which is _not_ un-escaped already is `$request_uri`, which contains
the very original URL sent by the browser -- and thus can't respect
any work done in Django to generate the `X-Accel-Redirect` (e.g., for
`/user_uploads/temporary/` URLs).  We also cannot pass these URLs to
nginx via query-parameters, since `$arg_foo` values are not
URI-decoded by nginx, there is no function to do so[^3], and the
values must be URI-encoded because they themselves are URLs with query
parameters.

Extra-URI-encode the path that we pass to the `X-Accel-Redirect`
location, for S3 redirects.  We rely on the `location` block
un-escaping that layer, leaving `$s3_hostname` and `$s3_path` as they
were intended in Django.

This works around the nginx bug, with no behaviour change.

[^1]: http://nginx.org/en/docs/http/ngx_http_core_module.html#location
[^2]: https://trac.nginx.org/nginx/ticket/348
[^3]: https://trac.nginx.org/nginx/ticket/52
[^4]: https://github.com/openresty/set-misc-nginx-module#set_escape_uri
2023-02-07 17:09:52 +00:00
Alex Vandiver
a955f52904 uploads: Stop putting API headers on local-file upload responses.
These only need the usual response headers, not the
Access-Control-Origin headers that API endpoints need.
2023-02-07 17:09:52 +00:00
sayamsamal
059f64dcd9 tooltips: Fix tooltip content alignment for message inline images.
This commit fixes the issue where the "Click to view or download" comes
to the right of the image title. We add a parent division in this commit
that leads to the break tag being applied successfully, shifting the
secondary tooltip content ("Click to view or download") to next line.
2023-02-06 18:41:31 -08:00
sayamsamal
e9d53b6bb4 tooltips: Fix line height for non-English characters.
Some non-English characters overflow when the line height is reduced
for the tooltip text. This commit increases the line height of the
tooltips to accommodate these non-English characters and fixes the
hotkey hint margins for the same.
2023-02-06 18:41:31 -08:00
sayamsamal
c15c2157f7 tooltips: Set font-feature-settings to "ss01" for stylistic variant of "I".
This commit enables the stylistic set "ss01" in Source Sans 3
font family which contains stylistic variant of the upper-case
character "I", which contains two bars, one each on the top and
bottom of the letter. This provides a uniform look across all
the characters when used in the hotkey hints of the tooltips.
2023-02-06 18:41:31 -08:00
sayamsamal
9b1d4ca81e tooltips: Add italics styling to description of multi-line tooltips.
The second line of a multi-line tooltip generally desctribes the
additional information which helps the major text, i.e. the first
line of the multi-line tooltip, hence it would be a good idea to
add italics styling, to differentiate it from the main title. We
describe a simple ".italic" class for the same.

We also add a shorter line height to this description using the
".tooltip-inner-content" class.
2023-02-06 18:41:31 -08:00
sayamsamal
0f213f13ff tooltips: Add support for modifier key conversion for mac-syle keyboards.
We scan a tooltip for any required windows-to-mac hotkey conversions
from the list of attributes supplied to the hotkey_hints helper.

If we find any, we add/modify the hotkyes in the hotkey hints list to
match the mac-style key combinations and then return back the modified
list of hotkey hints to be displayed in the tooltip.

We also rename the "adjust_mac_shortcuts" function, used for the
keyboard shortcuts menu and help center documnets, to
"adjust_mac_kbd_tags" to avoid any ambiguity with the
adjust_mac_tooltip_keys funtion which is used for tooltip hotkeys.
2023-02-06 18:41:31 -08:00
sayamsamal
df04063bf4 tooltips: Add hotkey hints support to filter streams in sidebar. 2023-02-06 18:41:31 -08:00
sayamsamal
78ae5e9526 tooltips: Add hotkey hints support to search people filter in sidebar. 2023-02-06 18:41:31 -08:00
sayamsamal
59bc9715e3 tooltips: Add hotkey hints support to keyboard shortcuts button.
This commits adds hotkey hints to the keyboard shortcuts button
located in the right sidebar, bellow the user list view.
2023-02-06 18:41:31 -08:00
sayamsamal
26fc108e16 tooltips: Add hotkey hints support to compose related buttons.
This commit adds the hotkey hints support to "Cancel compose",
"Cancel compose and save draft", "Scroll to bottom" and "Drafts"
button.
2023-02-06 18:41:31 -08:00
sayamsamal
4a7ad5325a tooltips: Add hotkey hints support to narrow to compose option. 2023-02-06 18:41:31 -08:00
sayamsamal
fc6b4775be tooltips: Add hotkey hints support to recipient row. 2023-02-06 18:41:31 -08:00
sayamsamal
4bf16ca9cc tooltips: Add hotkey hints support to message controls. 2023-02-06 18:41:31 -08:00
sayamsamal
d66f2d900f tooltips: Add hotkey hints support for tooltips.
We add the support for hotkey hints for the tippyjs tooltips through
the hotkey_hints handlebar helper.

The hotkey_hints helper takes space seperated string arguments and
returns a span containing all the hotkeys with the required classes
for styling.

We also add a simple node test for the hotkey_hints handlebar helper.

Part of #21753
2023-02-06 18:41:31 -08:00
sayamsamal
8e1d537430 tooltips: Change tooltips arrow size to small.
We scale the tippy arrows to the same size as used by the tippyjs
documentation for the small arrow size example.

Part of #21753
2023-02-06 18:41:31 -08:00
sayamsamal
7d5d151b99 tooltips: Change tooltips styling to incorporate the redesign.
We use hsla(0, 0%, 20%, 1) for the light theme background color and
hsla(0, 0%, 0%, 1) for the dark theme. The text inside the tooltips
should be white in color, 14px in size and have a line height of 15px.

With one line of text, we want the height of the tooltips to be 25px,
i.e, line height (15px) + padding (5px + 5px = 10px).

Part of #21753
2023-02-06 18:41:31 -08:00
sayamsamal
a93b95f158 tooltips: Move tooltips styling to a dedicated .css file.
We want to seperate the tooltips styling into a dedicated .css file for
general readability and decluttering of the zulip.css file.
2023-02-06 18:41:31 -08:00
evykassirer
0d373e574b compose: Remove remaining instances of compose-send-status.
All banners that used to be rendered here are now in #compose_banners.
2023-02-06 16:01:51 -08:00
Mateusz Mandera
d23b0a1f08 docs: Document how LDAP email address changes work (manually).
We will hopefully be able to just this in #16208 to document what
users need to configure in order to do this manually, but the content
here will be useful for anyone who hasn't set that up regardless.
2023-02-06 15:57:44 -08:00
Alya Abbott
c78218d88b docs: Update project ideas list for GSoC 2023.
Co-authored-by: Tim Abbott <tabbott@zulip.com>
2023-02-06 15:12:14 -08:00
David Rosa
2b8dfbfe1f help: Improve relative settings links for documentation on bots.
Fixes the documentation generated from the Markdown macros
{settings_tab|your-bots} and {settings_tab|bot-list-admin} to
match the text labels in the Zulip UI and improves the text of
relative links to explicitly say if we are referring to the Bots
tab of the Personal or Organization settings menu.

Follow-up to #23256.
2023-02-06 15:06:15 -08:00
David Rosa
df7e409cd9 help_settings_links: Refactor handleMatch function.
This code needs to be more flexible to improve the documentation
of items in the Personal and Organization settings menu when
using the `{settings_tab|[setting-name]}` Markdownm macro that
provides relative links or step-by-step instructions.

This commit moves the Markdown formatting code to a new function that
receives tuples from `link_mapping` as input. This is a preliminary
step to offer more flexibility than the current approach.
2023-02-06 15:06:15 -08:00
Ujjawal Modi
836b9e483e settings: Improve permissions banners on Invitations panel.
Fixes #24158
2023-02-06 15:04:56 -08:00
Aman Agrawal
e0f9332280 recent_topics_ui: Adjust filter classes once they are displayed.
Updating filters before rendering recent conversations leads to
bugs if the filters changed or recent topics was not the first
view that was loaded.
2023-02-06 14:57:18 -08:00
Aman Agrawal
a9befc207b recent_conversations: Only load filters during page load.
Instead of using localstorage to set the filters every time we
render recent topics, we only do it during initial page load and
then use the locally present `filters` variable to set the
filters.

This avoids multiple Zulip tabs of having a live impact on the
filters used in recent conversations.
2023-02-06 14:50:16 -08:00
Prakhar Pratyush
906ff9243a user_mutes: Rename 'muting.py' to 'user_mutes.py'.
Rename 'muting.py' to 'user_mutes.py' because it, now
, contains only user-mute related functions.

Includes minor refactoring needed after renaming the file.
2023-02-07 00:23:47 +05:30
Prakhar Pratyush
49577bbdcd user_topics: Move topic muting functions to user_topics.py.
This commit moves topic related stuff i.e. topic muting functions
to a separate file 'views/user_topics.py'.

'views/muting.py' contains functions related to user-mutes only.
2023-02-07 00:23:47 +05:30
Kartik Srivastava
48883f1580 tests: Rename test_muting_topics to test_topic_visibility_policies.
As we'll be adding support for more visibility policies for topics,
this renamed file will contain the necessary tests.
2023-02-07 00:23:47 +05:30
Tim Abbott
b36b04e385 user profile: Use stream_data.can_unsubscribe_others.
This is necessary to offer the "Unsubscribe" button in full user
profiles when the current user has the necessary permissions for a
given stream.

We remove settings_data.user_can_unsubscribe_other_users, since we've
changed its only caller and it is no longer a useful abstraction.
2023-02-05 14:46:36 -08:00
Sahil Batra
89f39a8aed stream: Add UI to set can_remove_subscribers_group when creating stream.
This commit adds dropdown-list-widget element in create stream UI
to set can_remove_subscribers_group setting when creating stream.
For now only role-based system groups are shown as options.
2023-02-05 14:46:36 -08:00
Sahil Batra
255dc759b1 stream_settings: Add live update code for can-remove-subscribers-group.
This commit adds code to live update the UI element for
can_remove_subscribers_group setting.
2023-02-05 14:46:36 -08:00
Sahil Batra
b9801073bd stream_settings: Add UI element for can-remove-subscribers-group setting.
This commit adds dropdown-list-widget element in "General" section of
stream settings for can-remove-subscribers-group setting. For now we
only show role-based system groups as the options.
2023-02-05 14:46:36 -08:00
Sahil Batra
37964b1ccc user_groups: Add helper functions to get options for group-based setting.
This commit adds get_realm_user_groups_for_dropdown_list_widget function
which returns the list of objects containing the display name and id
of system user groups and adds tests for this function.
2023-02-05 14:46:36 -08:00
Sahil Batra
73a378d23f stream_settings: Use can_remove_subscribers_group setting in webapp.
This commit updates the frontend to show or hide the "Unsubscribe"
button in subscribers list in stream settings as per the
can_remove_subscribers_group setting for the stream.
2023-02-05 14:46:36 -08:00
Sahil Batra
73f11853ec streams: Allow setting can_remove_subscribers_group_id while creating streams.
This commit adds API support to set can_remove_subscribers_group setting
when creating streams.
2023-02-05 14:46:36 -08:00
Sahil Batra
c3759814be streams: Allow changing can_remove_subscribers_group through API.
This commit adds API support to change can_remove_subscribers_group
setting for a stream.
2023-02-05 14:46:36 -08:00
Tim Abbott
6fa0a83d6b user profile: Fix height issues with remove-subscription-button.
Previously, subscription rows with a remove-subscription-button were
much taller than those without. This will be problematic when the new
permissions setting makes it possible for the current user to have
permission to unsubscribe the target user from some streams but not
others.

Fix this by both making the button a bit less tall and setting a
minimum height for the rows. Probably a nicer CSS solution is
possible, but this is enough to unblock merging a much larger project.
2023-02-05 14:46:36 -08:00
Tim Abbott
8bd881c83f message_list: Reorder and document properties of key classes.
This should help considerably in the readability of this part of the
codebase; meanwhile, I also took the opportunity to note various TODOs
where we might have something simple we can do to simplify these data
structures or improve their interfaces.
2023-02-05 10:58:07 -08:00
Aman Agrawal
9965ad2ea3 registration: Track create organization page in GA.
This will help us track if users actually clicked on the
email confirmation link while creating a new organization.

Replaced all the `reder` calls in `accounts_register` with
`TemplateResponse` to comply with `add_google_analytics`
decorator.
2023-02-05 10:24:32 -08:00
Tim Abbott
0f155b597f Revert "click_handlers: Don't treat dropdown menuitem clicks the same as links."
This reverts commit 202c04988f.

See https://github.com/zulip/zulip/pull/24133#issuecomment-1416921919.
2023-02-05 10:03:38 -08:00
evykassirer
9881760796 upload: Rename upload.js get_item keys to reflect upload banner.
Previously the banner was displayed through send_status, but
that is no longer an accurate name for identifying parts of
the upload HTML.
2023-02-04 19:50:52 -08:00
evykassirer
97d355fa72 compose: Migrate upload banner to new banner styling.
Fixes #22524.

This affects both the banner in the main compose box and the banner
in the message edit compose box. The use of ProgressBar has been
replaced with a more simple CSS (with light Javascript) solution.

The classnames are changing because the upload banner is now a
template rendered and remove()-ed from a banner container
(#compose_banners in the composebox, and a new div for banners in the
message edit view). It used to be in the send_status container so
there are a lot of class renames across the codebase.
2023-02-04 19:50:52 -08:00
evykassirer
b01ac3623f upload: Remove and reduce timeouts for closing upload bar.
This timeout was introduced in this commit: 02c3223985

The UI should close immediately when the user clicks cancel,
and the rest of the canceling code can run behind the scenes.

We want to keep a short timeout for upload completion
so that the user sees the 100% complete upload bar.
2023-02-04 19:50:52 -08:00
evykassirer
beef7611da upload tests: Move compose_ui out of mock_esm. 2023-02-04 19:50:52 -08:00
evykassirer
d54618fb4b node tests: Exclude zjquery_element.js and upload.js.
CZO discussion
[here](https://chat.zulip.org/#narrow/stream/6-frontend/topic/code.20coverage/near/1487773).

This allows `zjquery_element.js` to have test utils that aren't always being used.
`upload.js` is mostly UI focused and has upcoming commits that are hard
to write unit tests for (and for which unit tests wouldn't make much sense).
2023-02-04 19:50:52 -08:00
evykassirer
202c04988f click_handlers: Don't treat dropdown menuitem clicks the same as links.
This is a prep commit for adding a new dropdown for stream selection.
2023-02-04 19:08:13 -08:00
evykassirer
5f59ea0036 compose banner: Consolidate two functions that clear success banners.
Previously notifications.clear_compose_notifications was used accross
the codebase. Since introducing the new
compose_banner.clear_message_sent_banners function, the two functions
are similar enough that we can just use clear_message_sent_banners
everywhere. This commit also moves scroll_to_message_banner_message_id
to compose_banner.
2023-02-04 18:53:35 -08:00
evykassirer
ea9c4682a8 compose: Migrate out-of-view-notification to new banner style. 2023-02-04 18:53:35 -08:00
evykassirer
d9723a3dd4 compose tests: Move notifications out of mock_esm. 2023-02-04 18:53:35 -08:00
evykassirer
3a264c37b5 compose: Rename message_sent_banner template variables.
This is a prep commit for redesigning this banner. The
change from `note` to `banner_text` is more consistent
with `compose_banner`. `link_class` is renamed to classname
and will be used for the banner a whole and not the link
class anymore, which is why the check for displaying a link
now looks to see if `link_text` is defined instead.
2023-02-04 18:53:35 -08:00
Joelute
2c94d2b22f popovers: Fix missing top border for avatar in user profile.
The top border on the avatar wasn't showing up since there wasn't
enough space provided. Added top margin to fix the issue.

Fixes #24210.
2023-02-04 17:44:37 -08:00
Anders Kaseorg
b91788b945 markdown: Replace deprecated UnescapePostprocessor.
See https://github.com/Python-Markdown/markdown/pull/1272.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-04 16:36:47 -08:00
Anders Kaseorg
5aaa36b8fc ruff: Enable logging format rules.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-04 16:36:20 -08:00
Anders Kaseorg
b08c81b312 ruff: Fix G201 Logging .error(..., exc_info=True).exception(...).
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-04 16:36:20 -08:00
Anders Kaseorg
59eca10a43 ruff: Fix G004 Logging statement uses f-string.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-04 16:36:20 -08:00
Anders Kaseorg
61f672c652 ruff: Enable raise rules.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-04 16:34:55 -08:00
Anders Kaseorg
da3cf5ea7a ruff: Fix RSE102 Unnecessary parentheses on raised exception.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-04 16:34:55 -08:00
Tim Abbott
3099487bc3 stream_popover: Remove useless old_topic_name check.
This has been present since this modal was first introduced in
b9098a42d4, but as far as I can tell, it
has never been correct. We know `old_topic_name` is not
null/undefined, since we do a check with it trimmed earlier in the
function, and there is no product reason why we would would to
silently fail to move a topic because its name was the empty string.
2023-02-03 18:20:39 -08:00
Prakhar Pratyush
9997131df3 message_edit: Fix resolve topic notifications.
When 'resolve|unresolve' and 'move stream' actions occurs in
the same api call, 'This topic was marked as resolved|unresolved'
notification is not sent.

Both 'topic moved' and 'topic resolved' notification should be generated.

This commit updates the logic of when and where to send
'topic resolve|unresolve' notification. Unlike previous logic, notification
may be sent even in the case 'new_stream' is not None.

In general, 'topic resolved|unresolved' notification is sent to
'stream_being_edited'. In this particular case ('new_stream' is not None),
notification is sent to the 'new_stream' after check.

Test case is included.

Fixes: #22973
2023-02-03 18:20:39 -08:00
Prakhar Pratyush
62437e6930 topic_edit: Fix resolve topic notification.
When 'resolve|unresolve' and 'change topic' actions occurs in
the same api call using 'topic sidebar icon', only 'topic_moved'
notification is sent.

Both 'topic moved' and 'topic resolved' notification should be generated.

Currently, 'select_stream_id' is not set to 'undefined',
even if we only change 'topic name' and/or 'resolve|unresolve' topic.
Resulting in no 'resolved_topic' notification.

This commit sets 'select_stream_id' to 'undefined' to fix the issue.
2023-02-03 18:20:39 -08:00
Prakhar Pratyush
01961b4282 stream_popover: Fix confirm button not disabled bug.
On updating the stream from the dropdown menu in the move-messages popover,
the confirm button is enabled. On changing the stream back to the initial
value, doesn't disable the confirm button. It can result in the
creation of infinite notifications.

On stream update, 'update_submit_button_disabled_state()' doesn't receive
'stream_id' as a parameter, resulting in 'undefined' stream_id,
'button.disabled' is always set to false after the first update.
2023-02-03 18:20:39 -08:00
Anders Kaseorg
8dc3e086c9 semgrep: Remove typing.Text rule superseded by Ruff UP019.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-03 17:37:31 -08:00
Anders Kaseorg
81a7c7502f requirements: Upgrade Python requirements.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-03 16:36:54 -08:00
Anders Kaseorg
5b7c4206d7 ruff: Fix SIM300 Yoda conditions are discouraged.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-03 16:36:54 -08:00
Anders Kaseorg
b85cb1e700 exceptions: Accept lazy translation as JsonableError argument.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-03 16:36:54 -08:00
Anders Kaseorg
b4ee94e758 readthedocs: Add a configuration file.
This overrides the settings in the web interface, and enables much
more flexible configuration of the build environment (which previously
defaulted to Python 3.7).

https://docs.readthedocs.io/en/stable/config-file/v2.html

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-03 16:36:54 -08:00
Tim Abbott
a8ce7df649 notifications: Avoid misleading href on scroll to bottom notice. 2023-02-03 15:45:06 -08:00
evykassirer
dd95f79ab7 notifications: Hide out-of-view notification once user scrolls to message.
The banner telling the user to scroll down to the message previously
didn't disappear when the user scrolled past it manually, which is
not ideal.

Keep track of which message is associated with this notification,
and clear the banner when the message scrolls above the bottom of
the viewport.
2023-02-03 15:45:06 -08:00
evykassirer
e789e7aa4f compose: Leave scroll-to-message banner open until explicitly closed.
Previously the message would disappear after 300ms, but it can be
annoying for a useful link to disappear so quickly like that.

This commit removes that logic. Now the banner is closed only when
the user explicitly closes it or clicks on the link.

Note that the banner doesn't go away if the user manually scrolls
down. I still think this change is overall better, but if there's
an easy way to add that as well we should do it!

Fixes part of #19857.
2023-02-03 15:45:06 -08:00
evykassirer
fbad0b273b compose: Add url to 'scroll down' sent banner.
This notification ("scroll down to view your message" with a link
for the user to click to scroll down) was added in e2c388c and
removed in 657e1f1 in a commit almost immediately afterwards.

Later the notification was added again, but there was notably no
link to scroll, just the message to scroll down. 372cb20

The link to scroll down was "added" in 1a63c2d when it was fixing
a similar link in another notification. But the implementation
didn't actually use the link (because there was no classname passed
through).

This commit adds a classname so that the link is clickable by
the user.

Fixes part of #19857.
2023-02-03 15:45:06 -08:00
Alessandro Toppi
ff89590558 auth: Add JWT-based user API key fetch.
This adds a new endpoint /jwt/fetch_api_key that accepts a JWT and can
be used to fetch API keys for a certain user. The target realm is
inferred from the request and the user email is part of the JWT.

A JSON containing an user API key, delivery email and (optionally)
raw user profile data is returned in response.
The profile data in the response is optional and can be retrieved by
setting the POST param "include_profile" to "true" (default=false).

Co-authored-by: Mateusz Mandera <mateusz.mandera@zulip.com>
2023-02-03 15:23:35 -08:00
Tim Abbott
7c7ca61e9f auth: Remove now unnecessary return_data parameter. 2023-02-03 15:23:35 -08:00
Mateusz Mandera
75b44337a8 auth: Extract get_api_key_fetch_authenticate_failure. 2023-02-03 15:23:35 -08:00
Mateusz Mandera
3a1d974cee auth: Extract process_api_key_fetch_authenticate_result function.
This will be useful for re-use in the implementation of another JWT
endpoint in the upcoming commits.
2023-02-03 15:23:35 -08:00
Mateusz Mandera
100f4a7152 auth: Add @require_post to remote_user_jwt. 2023-02-03 15:23:35 -08:00
Mateusz Mandera
d466da1064 auth: Use REQ for getting token value and rename param in jwt paths.
This makes us use REQ properly instead of fetching from request.POST
manually - also renaming the param to "token" which is more standard.
2023-02-03 15:23:35 -08:00
Mateusz Mandera
c9c255b3a8 auth: Improve JsonableError in get_..._jwt_authentication_request. 2023-02-03 15:23:35 -08:00
Mateusz Mandera
6c638a1057 auth: Extract token-check logic of remote_user_jwt.
This will be useful for re-use for implementation of an endpoint for
obtaining the API by submitting a JWT in the next commits.

It's not a pure refactor, as it requires some tweaks to remote_user_jwt
behavior:
1. The expected format of the request is changed a bit. It used to
   expect "user" and "realm" keys, from which the intended email was
   just generated by joining with @. Now it just expects "email"
   straight-up. The prior design was a bt strange to begin with, so this
   might be an improvement actually.
2. In the case of the codepath of new user signup, this will no longer
   pre-populate the Full Name in the registration form with the value
   from the "user" key. This should be a very minor lost of
   functionality, because the "user" value was not going to be a proper
   Full Name anyway. This functionality can be restored in a future
   commit if desired.

This is an API change, but this endpoint is nearly unused as far as
we're aware.
2023-02-03 15:23:35 -08:00
Sahil Singh
dd85e8b4f5 settings: Fix emoji image preview with wide images.
The image preview in the 'upload_widget' would scale images that are
wider than the intended square shape for custom emoji; this resulted
in a misleading preview, because the server will instead crop such
images to take their leftmost square.

Fix this using 'object-fit: cover', to have the browser do something
similar.
2023-02-03 11:47:19 -08:00
Sahil Singh
0870ad5d14 settings: Preview bot avatar in bot editing/creation forms.
Previews of the current bot avatar and the uploaded bot avatar were not
displayed during bot creation or editing.

We address this by extending The 'upload_widget' component with with
'preview_text' and 'preview_image' parameters to provide a preview of
the image that will be used as the bot's avatar during bot creation or
editing.

Fixes #23023.
2023-02-03 11:47:19 -08:00
Tim Abbott
8d27d14354 models: Improve documentation for FOLLOWED UserTopics. 2023-02-03 11:25:05 -08:00
Aman Agrawal
c3f0d5898a index: Remove Loading... text from the app loading overlay.
The new loading spinner animation conveys the message well
that the app is loading and this text is no longer required.
2023-02-03 10:51:39 -08:00
Brijmohan Siyag
6b0265a239 index: Load Zulip logo for loading indicator as inline svg.
Fetching an external SVG doesn't work, since the whole point of this
screen is to be displayed while we're waiting for external resources to load.
2023-02-03 10:48:00 -08:00
Lauryn Menard
dbacc00f0f api-docs: Move markdown files to top level directory.
- Updates `.prettierignore` for the new directory.
- Updates any reference to the API documentation directory for
  markdown files to be `api_docs/` instead of `zerver/api/`.
- Removes a reference link from `docs/documentation/api.md` that
  hasn't referenced anything in the text since commit 0542c60.
- Update rendering of API documentation for new directory.
2023-02-02 17:25:40 -08:00
Lauryn Menard
fc54ffd778 documentation: Move check for api-doc-template.md.
Moves the check for calling the `api-doc-template.md` directly,
so that we don't return a 500 error from the server, to happen
earlier with other checks for returning a 404 / missing page.

Also adds a specific test to `zerver/tests/test_urls` for this
template.

Prep commit for moving API documentation directory to be a top
level directory.
2023-02-02 17:23:31 -08:00
evykassirer
aaa8b90271 compose: Increase click target area around banner close button.
Using padding instead of margin allows a wider area around
the button where the user can click from to still functionally
click the button.
2023-02-02 17:21:24 -08:00
Alya Abbott
27b703f617 emails: Improve followup_day1 (registration confirmation) email.
- Clean up the language.
- Add a prominent "Go to organization" button.
- Link to guides for new users and admins.
- Fix duplication bug in text email version.

Co-authored-by: Mateusz Mandera <mateusz.mandera@zulip.com>
2023-02-02 17:16:43 -08:00
Alex Vandiver
a8d0908893 tail-ses: Support noreply address of Real Name <noreply@example.com>. 2023-02-02 11:33:40 -08:00
Alex Vandiver
98711b0e45 tail-ses: Set AWS region based on S3_REGION value. 2023-02-02 11:33:40 -08:00
Ganesh Pawar
b7335d0dec custom_emoji: Convert inline form to modal.
Fixes part of #21298.
2023-02-02 10:59:57 -08:00
Anders Kaseorg
df001db1a9 black: Reformat with Black 23.
Black 23 enforces some slightly more specific rules about empty line
counts and redundant parenthesis removal, but the result is still
compatible with Black 22.

(This does not actually upgrade our Python environment to Black 23
yet.)

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-02-02 10:40:13 -08:00
SameepAher
bbf5b3d6ce popovers: Link subscribed users to user cards.
This links users or bots in Stream settings -> Subscribed users, to
their respective user profile card.

Also, changes were made to close any active overlay, on clicking any of
the PM buttons in the user profile card. This help us avoid writing
separate conditions for multiple overlays, like settings overlay or
stream settings overlay.

Fixes part of #18880.
2023-02-01 16:07:03 -08:00
N-Shar-ma
db7d2169b3 left_sidebar: Space PM / topic / stream names from icons on right by 3px.
Due to some quirks of CSS specificity, a rule for 0 `right-padding` was
overriding a rule for 2px `right-padding` for topic names.

This is now corrected, and the padding increased to 3px for a less
cramped look, for PMs, topics and streams. Repetition of CSS has also
been removed.
2023-02-01 16:04:33 -08:00
Sahil Batra
4ea64cfede settings: Remove 'bootstrap-focus-style' from div element.
This commit fixes the code to add 'bootstrap-focus-style'
class to select element instead of div.

This was introduced in af36e9f823.
2023-02-01 14:50:30 -08:00
Prashant Vithani
a791c817c7 css: Fix erroneous bootstrap-focus-style ID.
The commit af36e9f added a bug that breaks new user invite.
The CSS class ` bootstrap-focus-style` was added to `id`,
hence breaking the value extraction.

Fixes: #24249
2023-02-01 14:49:55 -08:00
Sahil Batra
a2315422e7 settings: Override bottom margin for inputs.
We override the bottom margin added by bootstrap for
url type custom profile input in user profile page
and all the inputs in edit-user form. Previously, this
was handled by form-horizontal class which was removed
in #24057.

For most of the other text-type inputs, it is overridden
in app_components.css and for checkbox-type inputs, it is
overridden by other bootstrap CSS itself. But that only
handles text-type and checkbox-type inputs inside
".new-style" element and not url type inputs.
Some other inputs already have specific CSS to override the
bootstrap CSS.

For the same reason, there is no need to override bottom
margin for inputs in organization profile as there is no
url type inputs in that page and this commit removes the
CSS for it.
2023-02-01 14:48:48 -08:00
Lauryn Menard
e6bfdc7d34 settings: Create shared class for tooltips on disabled settings.
Creates a shared `disabled_setting_tooltip` class that can be
reused in cases where a personal or organization setting button
or input is disabled and a tooltip is added to give information
about why the user cannot change/access the setting.
2023-02-01 14:46:02 -08:00
Lauryn Menard
d8b8b34ecd profile-settings: Change name-input class to a more specific id.
Changes `name-input` class, that was only being used in a div
wrapper for the input element for changing a user's full name,
to be a more specific id name: `full_name_input_container`.

This id is used to set or remove the disabled setting tooltip
when name changes are disabled by the organization.

There are no CSS rules set with this class/id.
2023-02-01 14:46:02 -08:00
Lauryn Menard
264a34d543 settings-css: Combine rules for disabled button pointer-events. 2023-02-01 14:46:02 -08:00
Alex Vandiver
26696aaa53 upgrade-postgresql: Also upgrade postgresql-client.
The `pg_upgrade` tool uses `pg_dump` as an internal step, and verifies
that the version of `pg_upgrade` is the same exactly the same as the
version of the PostgreSQL server it is upgrading to.  A mismatch (even
in packaging versions) leads to it aborting:

```
/usr/lib/postgresql/14/bin/pg_upgrade -b /usr/lib/postgresql/13/bin -B /usr/lib/postgresql/14/bin -p 5432 -P 5435 -d /etc/postgresql/13/main -D /etc/postgresql/14/main --link
Finding the real data directory for the source cluster      ok
Finding the real data directory for the target cluster      ok

check for "/usr/lib/postgresql/14/bin/pg_dump" failed: incorrect version: found "pg_dump (PostgreSQL) 14.6 (Ubuntu 14.6-0ubuntu0.22.04.1)", expected "pg_dump (PostgreSQL) 14.6 (Ubuntu 14.6-1.pgdg22.04+1)"
Failure, exiting
```

Explicitly upgrade `postgresql-client` at the same time we upgrade
`postgresql` itself, so their versions match.

Fixes: #24192
2023-02-01 14:44:34 -08:00
Aman Agrawal
c64c00d916 portico_signin: Wrap long email names to next line.
Along with wrapping long emails to next line, set the max-width of
the email confirmation box to the alert box.
2023-02-01 13:14:08 -08:00
Lauryn Menard
b64d8e8a52 templates: Remove base_path argument from api_arguments_table_generator.
Removes `base_path` argument when making the markdown extension for
parameters in documentation for API endpoints.

This seems to have been originally included for API parameters that
were documented in JSON files, which is no longer in use. Now all
API endpoints in the documentation are documented in
`zerver/openapi/zulip.yaml`.
2023-02-01 13:12:53 -08:00
Lauryn Menard
f38d5a6a26 templates: Remove base_path argument from api_return_values_generator.
Removes `base_path` argument when making the markdown extension for
return values in documentation for API endpoints.

This seems to have been a copy and paste error in commit d2ee99a2fd
when `zerver/lib/markdown/api_return_values_generator.py` was created.
2023-02-01 13:12:53 -08:00
Lauryn Menard
20fb9af974 help: Add redirect for help/configure-default-view.
Adds URL redirect that was missed in commit 73710e1cf0 when
`change-default-view.md` was renamed to `configure-default-view.md`.
2023-02-01 06:10:14 -08:00
Lalit
4ab824dc4c emoji: Disallow . in custom emoji names.
Until now, custom emojis with "periods" in their name were allowed, even though
they don't really fit the pattern of how we name them, and in fact the Markdown
processor would not render such custom emoji. Fix this by just disallowing the
character.

Also update the error strings accordingly.

Note that this does not include a migration to eliminate any existing custom emoji with this 
character in their name.

Fixes #24066.
2023-01-31 17:28:33 -08:00
Tim Abbott
875ad8ed5b compose: Fix using Up when editing messages.
This fixes a very noticable regression in
92788a52bb, where using Up/PageUp/Home
when focus was in anything other than the compose box would
incorrectly be treated as message feed navigation.

Fix this by adding a new check, but this now has some fairly
duplicated code that queries the DOM for the same thing 3 times in a
row; added a TODO comment explaining a likely better approach.
2023-01-31 17:24:50 -08:00
Alex Vandiver
92c8c17190 import: Add the UTF-8 flag on file entries in zipfiles from Slack.
Fixes: #22533.
2023-01-31 16:07:48 -08:00
N-Shar-ma
282bf680f2 emoji: Replace built-in with default in emoji overriding API error. 2023-01-31 15:52:33 -08:00
N-Shar-ma
431cd8b10a typeahead: Don't show default emojis if overridden by a realm emoji.
When a realm emoji overrides a default emoji, `:emoji_name:` now renders
as the realm emoji. Still, the typeahead menu would misleadingly show
the now overridden default emoji for the same name. Selecting it would
render as the realm emoji, which is very confusing user experience.

Now when selecting the emojis to suggest in the typeahead, the overridden
default emojis are excluded.

Fixes part of #24120.
2023-01-31 15:52:08 -08:00
N-Shar-ma
8a5b71fdbd emoji_settings: Only allow admins to override default emoji.
Uptil now, any user could add a custom emoji with the same name as a
default emoji, thus overriding it (with a confirmation after warning).

To create more friction for this action, now only admins are allowed to
add custom emojis that override default ones. All users can still add
custom emojis with other names.

Fixes part of #24120.
2023-01-31 15:50:13 -08:00
N-Shar-ma
a4e477bf02 emoji_settings: Reword modal to confirm overriding default emoji.
Better explain what exact effects overriding a default emoji name has.
2023-01-31 15:46:13 -08:00
N-Shar-ma
c519c31bda emoji: Fix checks for whether custom emoji may override default. 2023-01-31 15:46:04 -08:00
Tim Abbott
970071e3bd Revert "message_row: Allow time row to expand if it needs more width."
This reverts commit 2bf47c7d4b.

This appears to have resulted in the message controls being misplaced.
2023-01-31 15:39:52 -08:00
Aman Agrawal
b8f91b6513 message_body: Keep the sender name padding as a different element.
This helps us align the tooltip on sender name at the center of it
while still having a tooltip in the gap between avatar and sender
name.
2023-01-31 15:35:46 -08:00
Aman Agrawal
dbef64426b message: Convert view user card to a tippy tooltip. 2023-01-31 15:35:46 -08:00
Aman Agrawal
65f9dbc5f3 tippy: Directly use content property to set content. 2023-01-31 15:35:46 -08:00
Aman Agrawal
00752f8059 message: Keep user card tooltip limited to user name and avatar.
We accidentally added tooltip to open user card to a much larger
area than intended as a regression from moving the message to
use grid.

In this, we keep it limited to user name and avatar by adding
the tooltip directly to them.
2023-01-31 15:35:45 -08:00
Zixuan James Li
b21f533af3 settings_users: Show all bots in organization settings.
We intended to show all the bots in the bots organization settings for
non-admin users as well. This switches from bot_data.all_user_ids() to
people.get_bot_ids() to get a full set of ids for all the bots in the
organization.

Because the source of data changes, "realm_user" instead of "realm_bot"
triggers the update of the bots list.

The code example (example4) is updated since we incorporate a side
effect into "realm_user"'s "add" op.

Note that while "realm_user" does not have a "delete" op, we still stop
redrawing bots on "relam_bot"'s "delete" op, because "delete" was only
triggered when the bot owner changes, the bot does not disappear from
the list of all bots.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-01-31 15:16:48 -08:00
Zixuan James Li
5ecd0cecf4 people: Implement get_bot_ids.
This provides a way to access all the bot users, no matter if they are
owned or admined by the current user or not.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-01-31 15:16:48 -08:00
Zixuan James Li
c274865a3a node_tests: Remove unused get_args.
Added in 76ae8e23e2 probably as a typo, as
we usually further check the return value with an assertion.

Signed-off-by: Zixuan James Li <p359101898@gmail.com>
2023-01-31 15:16:48 -08:00
Aman Agrawal
2bf47c7d4b message_row: Allow time row to expand if it needs more width.
While setting a min-width according to the current width, we allow
the time column to expand if the translated `AM/PM` time needs
more width.
2023-01-31 14:47:40 -08:00
Alex Vandiver
68f4071873 puppet: Allow choice of timesync tool. 2023-01-31 14:20:41 -08:00
Alex Vandiver
20841d9b65 upgrade-zulip-stage-2: Abort upgrade if puppet will not run cleanly. 2023-01-31 14:20:00 -08:00
Alex Vandiver
fd47f6296e zulip-puppet-apply: Exit status code 2 on puppet failure.
This allows us, when run with `--noop -f`, to differentiate between
"there are unapplied changes" and "there were puppet errors."
2023-01-31 14:20:00 -08:00
Tim Abbott
22712f634d fix_unreads: Remove dead duplicate build_topic_unmute_checker.
The only caller for this function, which is part of a very old
migration, was removed in b77da6b834.
2023-01-31 11:18:44 -08:00
Palash Baderia
92f085c571 recent_topics: Clear search box on show.
Fixes: #20956.

Recent topics and all messages have empty search query, so it is
important to clear the search query when switching to them, otherwise
search text from previous query is displayed.
2023-01-30 16:49:08 -08:00
N-Shar-ma
9def249af1 typeahead: Fix bug where typeahead showed momentarily on shift + tab.
Break on `keyup` for case of `shift` key, instead of letting it trigger
the typeahead.

Fixes: #24152.
2023-01-30 14:38:25 -08:00
Dhruv Gupta
03c70cbed5 docs: Spell out ./tools/run-dev.py in setup instructions.
This location in the documentation, in particular, is one where it's likely
to be helpful to spell the full path to the command when explaining it.
2023-01-30 14:32:53 -08:00
N-Shar-ma
e2e39acbc4 widgets: Make the todo and poll widgets look consistent / similar.
Earlier the todo and poll widgets' UI differed a lot, especially in the
font size and weight, and the color and shape of the checkbox and vote
count box.

Now the font weights and sizes are consistent in both the widgets and
the todo widget's checkboxes and poll widget's vote count boxes are
styled similarly.

This is the rebased and cleaned version of #21006, and is visually near
identical.

Fixes: #20283.
2023-01-30 11:51:33 -08:00
N-Shar-ma
abb3881bdb refactor: Convert any instances of pt to px in widgets.css. 2023-01-30 11:51:33 -08:00
N-Shar-ma
92788a52bb compose: Handle hotkey triggers depending on whitespace in composebox.
The `focus_in_empty_compose` function used for hotkeys, now checks if
the compose box is truly empty by considering it's untrimmed value. If
there are just spaces in the focused compose box, `focus_in_empty_compose`
returns false now.

This fixes the bug where using the left key among just spaces did not move
back the cursor as expected, and may unexpectedly trigger edit state for
the last sent message.

For `up` hotkeys, message navigation is also triggered if the cursor is
at the start of the composebox with just whitespace. A new helper
function is added for this check.
2023-01-30 11:32:37 -08:00
David Rosa
a6abf959bb contributor docs: Improve the first sentence in "Upgrade Zulip". 2023-01-27 12:41:56 -08:00
David Rosa
538801c651 contributor docs: Rename "Customize Zulip" -> "Server configuration".
- Renames "Customize Zulip" to "Server configuration".
- Cross-links "Server configuration" with "System and deployment
configuration".

Fixes part of #23984.
2023-01-27 12:41:56 -08:00
David Rosa
08e9686cd2 contributor docs: Rename "Upgrade or modify Zulip" -> "Upgrade Zulip".
Fixes part of #23984.
2023-01-27 12:41:56 -08:00
David Rosa
af39a1a554 contributor docs: Migrate "Modify Zulip" to its own page.
Splits /production/upgrade-or-modify.md to improve the organization
of production documentation.

Fixes #23984.
2023-01-27 12:41:56 -08:00
Lauryn Menard
6b2d531dfd notification-bot: Update message for approved full sponsorship.
Updates the message sent by the notification bot when an
organization is approved for full sponsorship on Zulip
Cloud Standard to include a request to list and link to
Zulip on any acknowledgement or sponsorship pages.
2023-01-27 12:40:22 -08:00
Tran Sang
3bea65b39c puppet: Set /etc/mailname based on postfix.mailname configuration.
The `postfix.mailname` setting in `/etc/zulip.conf` was previously
only used for incoming mail, to identify in Postfix configuration
which messages were "local."

Also set `/etc/mailname`, which is used by Postfix to set how it
identifies to other hosts when sending outgoing email.

Co-authored-by: Alex Vandiver <alexmv@zulip.com>
2023-01-27 15:08:22 -05:00
Alex Vandiver
e8123dfeea puppet: Match the x bits on directories to what puppet actually does.
Puppet _always_ sets the `+x` bit on directories if they have the `r`
bit set for that slot[^1]:

> When specifying numeric permissions for directories, Puppet sets the
> search permission wherever the read permission is set.

As such, for instance, `0640` is actually applied as `0750`.

Fix what we "want" to match what puppet is applying, by adding the `x`
bit.  In none of these cases did we actually intend the directory to
not be executable.

[1] https://www.puppet.com/docs/puppet/5.5/types/file.html#file-attribute-mode
2023-01-26 15:06:01 -08:00
Alex Vandiver
372bba4a8e puppet: Stop creating a /home/zulip/logs.
This was last really used in d7a3570c7e, in 2013, when it was
`/home/humbug/logs`.

Repoint the one obscure piece of tooling that writes there, and remove
the places that created it.
2023-01-26 15:06:01 -08:00
Alex Vandiver
7f2514b316 puppet: Collapse identical blocks. 2023-01-26 15:06:01 -08:00
Alya Abbott
ac63c791eb help: Link to https://zulip.com/values/ from supporting-zulip-motivation.md. 2023-01-26 14:46:57 -08:00
Alya Abbott
4749e9acb0 help: Tweak Support the Zulip project page. 2023-01-26 14:46:57 -08:00
Sahil Batra
6b7e588a68 css: Remove some unnecessary CSS.
This commit removes the margin-bottom CSS added for
select elements to override the margin added by bootstrap.
Since we have removed the bootstrap CSS rules for
select elements in previous commits, we can remove
the overridden CSS in this commit.

This commit also removes margin-bottom CSS for input
element in one case, because CSS in app_components.css
already overrides the current bootstrap CSS for input
element.
2023-01-26 12:36:31 -08:00
Sahil Batra
03668a4272 subscriptions: Remove unused CSS.
Since, we have removed bootstrap CSS rules for select elements
in previous commit, we do not need to set this rule since
default value of margin is 0.
2023-01-26 12:36:31 -08:00
Sahil Batra
0cf169be71 bootstrap: Remove CSS rules for select elements from bootstrap.css.
This commit removes the bootstrap CSS rules for select elements in
bootstrap.css. The requried rules are already added to specific
elements in previous commits to keep the existing design.

Fixes part of #23635.
2023-01-26 12:36:31 -08:00
Sahil Batra
af36e9f823 css: Add "bootstrap-focus-style" class to select elements.
This commit adds "bootstrap-focus-style" class to the select
elements such that we can add CSS rule for focusing a select
element at single place only using this class.
2023-01-26 12:36:31 -08:00
Sahil Batra
0d4839d900 modal: Add bootstrap CSS rules for select elements in modal.
This commit adds bootstrap CSS rules used for select elements
used in different modals in modal.css.

This change is done so we can safely remove select CSS
rules from bootstrap.css as a part of our process to
remove bootstrap.

This commit also changes the CSS for propagate mode select
element in "Move messages" modal to use ID as selector
instead of class such that the width property can be
overridden correctly.
2023-01-26 12:36:31 -08:00
Sahil Batra
45fcd9ee45 settings: Add bootstrap CSS rules for select elements.
This commit adds bootstrap CSS rules used for select
elements in settings page in settings.css.

This change is done so we can safely remove select CSS
rules from bootstrap.css as a part of our process to
remove bootstrap.

Due to this change, a couple of settings have lesser
margin at the bottom than before, but they look fine
with lesser margins and anyways had unnecessarily
larger margin before.

We also update the selector used to set width of
desktop-icon-count-display setting such that the
default of 220px is correctly overridden by the
specific CSS for this element.
2023-01-26 12:36:31 -08:00
Sahil Batra
a3a3f7796a stream_settings: Add bootstrap rules for select elements.
This commit adds bootstrap CSS rules used for select
elements in stream settings to existing CSS in
subscriptions.css.

This change is done so we can safely remove select CSS
rules from bootstrap.css as a part of our process to
remove bootstrap.
2023-01-26 12:36:31 -08:00
Sahil Batra
bbcca49a5e invite: Add bootstrap CSS rules for select elements in invite modal.
This commit adds bootstrap CSS rules used for select elements in
invite UI in zulip.css.

This change is done so we can safely remove select CSS rules from
bootstrap.css as a part of our process to remove bootstrap.

This commit also adds class to a couple of select elements in invite
UI such that we can use those class to write CSS as using IDs would
lead to the dark-theme background not being applied correctly.
2023-01-26 12:36:31 -08:00
Sahil Batra
275da6b300 activity: Add bootstrap CSS rules for select elements in support page.
This commit adds bootstrap CSS rules used for select elements in
activity support page in activity.css.

This change is done so we can safely remove select CSS rules from
bootstrap.css as a part of our process to remove bootstrap.
2023-01-26 12:36:31 -08:00
Sahil Batra
4be60fa1ba upgrade: Add bootstrap CSS rules for org type select element.
This commit adds bootstrap CSS rules used for org type select
element in sponsorship page in billing.css.

This change is done so we can safely remove select CSS rules
from bootstrap.css as a part of our process to remove bootstrap.

We also remove inline style for this element and instead add
it with other CSS in billing.css.
2023-01-26 12:36:31 -08:00
Sahil Batra
6de03c415c integrations_dev_panel: Add bootstrap CSS rules for select elements.
This commit adds bootstrap CSS rules used for select elements in
devtools integrations panel in integerations_dev_panel.css.

This change is done so we can safely remove select CSS rules from
bootstrap.css as a part of our process to remove bootstrap.
2023-01-26 12:36:31 -08:00
Sahil Batra
d708bc338c register: Add bootstrap CSS rules for select elements.
This commit adds bootstrap CSS rules used for select
elements in realm creation form to the existing CSS
in portico_signin.css.

This change is done so we can safely remove select CSS
rules from bootstrap.css as a part of our process to
remove bootstrap.
2023-01-26 12:36:31 -08:00
Sahil Batra
72b528e22b development: Add bootstrap CSS rules for select in dev login form.
This commit adds bootstrap CSS rules used for select element
in dev login form in portico_signin.css.

This change is done so we can safely remove select CSS rules
from bootstrap.css as a part of our process to remove bootstrap.
2023-01-26 12:36:31 -08:00
Sahil Batra
e14b1f03fa register: Refactor template for new account registration.
This commit refactors the template code for source-realm
select element to have same structure as other inputs
and select element in the page. Thus this change also
makes the styling of source-realm select element consistent
with other select element in the page.
2023-01-26 12:36:31 -08:00
Sahil Batra
9c39ccbeab upgrade: Remove required attribute from org-type select element.
We do not need "required" attribute in the org-type select element
in sponsorship form, since we select a value by default and there
is no way to not have any value for the select element.

Also, the "required" attribute was added twice somehow.
2023-01-26 12:36:31 -08:00
Alya Abbott
f552465c2d help center: Document supporting Zulip and linking to the Zulip website. 2023-01-26 10:59:23 -08:00
Sahil Batra
851d68e0fc create_user: Use transaction.atomic decorator for do_create_user.
We change the do_create_user function to use transaction.atomic
decorator instead of using with block. Due to this change, all
send_event calls are made inside transaction.on_commit.

Some other changes -
- Remove transaction.atomic decorator from send_inital_realm_messages
since it is now called inside a transaction.
- Made changes in tests which tests message events and notifications
to make sure on_commit callbacks are executed.
2023-01-26 10:49:19 -08:00
Sahil Batra
6cc468f6d4 create_user: Use transaction.atomic as decorator with do_reactivate_user.
This commit changes the do_reactivate_user such that the complete function
is called inside an atomic transaction and events are called after the
transaction is commited using on_commit helper. This is a prep commit
for unsubscribing the bots of unaccessible private streams when reactivating
them.
2023-01-26 10:49:19 -08:00
Sahil Batra
5635881664 realm_export: Add transaction.atomic to export_realm. 2023-01-26 10:49:19 -08:00
David Rosa
0030c8d115 help: Document "Mute/Unmute stream" mobile app feature.
Fixes #22196.
2023-01-26 10:32:47 -08:00
David Rosa
776a05c4c2 help center: Update "Mute a stream" and "Pin a stream" pages.
Update pages to follow our current help center documentation patterns.
2023-01-26 10:32:47 -08:00
Sahil Batra
970d692d69 settings: Fix upgrade-banner for narrow width screens.
The upgrade banner was being clipped for narrow width screens
and was only partially visible. This commit changes it to instead
wrap the content such that complete content is visible on the
screen.

We also decrease the right margin for icon in the banner such
that the text of the banner fits in one line for at least normal
screen size and zoom in stream settings overlay.
2023-01-26 10:31:07 -08:00
Alex Vandiver
09bb0e6fd0 puppet: Upgrade Grafana. 2023-01-26 10:24:24 -08:00
SameepAher
3fe6d0def1 streams: Use singular in feedback for a single added subscriber.
The message displayed after successfully adding users to a stream previously
used a plural even if only a single user was added.
2023-01-26 10:22:35 -08:00
David Rosa
99b3c1c9d4 help: Move "Admins only" banner in "Deactivate/reactivate a bot".
Moves the "Admins only" banner from the top of the page to the
"Via organization settings" instruction tabs.
2023-01-26 10:18:25 -08:00
David Rosa
8d1db6482f help center: Update relative gear menu macro for organization settings.
Renames "Manage organization" to "Organization settings" to reflect
changes in the previous commit.
2023-01-26 10:17:45 -08:00
David Rosa
b79daa9fa3 gear menu: Drop special naming for organization settings menu item.
Removes the special naming of the organization settings gear menu
item for admins so that it lines up with how we refer to the
"Organization settings" UI itself in the help center documentation.
2023-01-26 10:17:45 -08:00
Anders Kaseorg
cb8c7f2a17 ruff: Fix UP032 Use f-string instead of format call.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-26 10:16:30 -08:00
Anders Kaseorg
d9182775c3 ruff: Fix S701 Consider using autoescape=True.
Django already provides this default, but be explicit to silence a
Ruff warning.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-26 10:16:30 -08:00
Anders Kaseorg
4eda29bd86 ruff: Fix RUF005 Consider spread instead of concatenation.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-26 10:16:30 -08:00
Anders Kaseorg
91b22cb1af ruff: Fix EXE001 Shebang is present but file is not executable.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-26 10:16:30 -08:00
Anders Kaseorg
7e3a681f80 ruff: Fix S108 Probable insecure usage of temporary file.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-26 10:14:56 -08:00
Sahil Singh
d05f672132 compose: Delete drafts with attachments.
Draft messages containing attachments, polls, or other items that cannot be locally 
echoed would not be deleted after sending the message. 

The explanation is simple: We only cleared the draft associated with a message in the 
`reify_message_id` local echo code path.

Fixes #24063.
2023-01-25 14:17:51 -08:00
Lauryn Menard
dedea23745 help-docs: Move help center documentation to top level directory.
These files are not Jinja2 templates, so there's no reason that they needed
to be inside `templates/zerver`. Moving them to the top level reflects their
importance and also makes it feel nicer to work on editing the help center content, 
without it being unnecessary buried deep in the codebase.
2023-01-25 14:08:29 -08:00
Alex Vandiver
6cf1d9fa20 css: Remove a hardcoded reference to chat.zulip.org. 2023-01-24 17:34:26 -05:00
Alex Vandiver
ad8041253c release: Add tests for spelling and links in changelog. 2023-01-24 13:30:04 -08:00
Alex Vandiver
23f4cde91c email_mirror: Ensure that attachments get space to be included.
The content of a message is truncated to `MAX_MESSAGE_LENGTH`, which
is 1000 characters.  Since the email gateway places attachments at the
very end of the extracted body, that means that they are the first
thing to get truncated off.

That is, if an incoming email message contains 1000 `a`s and an image
attachment, the link that attaches the attachment to the message will
get truncated off, leaving it dangling in the database.

Truncate the message body content separately from the attachment links
which are included at the end of the body.
2023-01-24 13:22:13 -08:00
Lauryn Menard
019fa7e122 organization-profile: Update deactivate organization section.
Removes the info icon with the tooltip information and replaces
it with a question help link icon to the help center article on
deactivating an organization.

Also, when the button is disabled, adds a tooltip on hover that
explains only organization owners can deactivate an organization.

If the current user's owner role is changed, then the button and
tooltip are live updated.

Part of #22892.
2023-01-24 13:09:53 -08:00
Alex Vandiver
d0de66b273 puppet: Remove "ensure => absent" rules which have all been applied. 2023-01-24 13:05:24 -08:00
Lauryn Menard
e7cecc989f documentation: Clean up MarkdownDirectoryView.get_context_data.
Changes the check for whether the documentation page is a policy
center page to be the `self.policies_view` boolean instead of the
`path_template` value as it reads much more clearly.

Moves a comment in the code to be contextually relevant.
2023-01-24 13:04:04 -08:00
Lauryn Menard
8859da911b documentation: Rename article_path variable when getting context.
Because of the overlap with the `DocumentationArticle` dataclass
field `article_path`, we rename the `article_path` variable used
in `MarkdownDirectoryView.get_context_data` for the absolute path
to be `article_absolute_path`.
2023-01-24 13:04:04 -08:00
Lauryn Menard
f7d5cd5690 documentation: Remove "not_index_page" from context.
In commit bbecd41, we added "not_index_page" to the context for
some documentation articles, but use of that context key/value was
removed when the help documentation was removed in commit 1cf7ee9.

Changes `not_index_page` to be a boolean value that's used to set
the page title, but is not then passed on as a context key/value.

Also removes an irrelevant comment about disabling "Back to home"
on the homepage.
2023-01-24 13:04:04 -08:00
Aman Agrawal
37431cf0b5 urls: Provide email as a GET parameter.
Since we want to use `accounts/new/send_confirm` to know how many
users actually register after visiting the register page, we
added it to Google Tag Manager, but GTM tracks every user
registration separately due <email> in the URL
making it harder to track.

To solve this, we want to pass <email> as a GET parameter which
can be easily filtered inside GTM using a RegEx and all the
registrations can be tracked as one.
2023-01-24 11:29:50 -08:00
Aman Agrawal
a51bf96c70 accounts_send_confirm: Show email to which the link was sent.
This can be useful for the user in case user is worried if they
typed the correct email.
2023-01-24 11:29:50 -08:00
Prakhar Pratyush
1a400b21e7 notifications: Fix missed message email notifications of welcome bot.
A missed message email notification, where the message is the welcome
message sent by the welcome bot on account creation, get sent when
the user somehow not focuses the browser tab during account creation.

No missed message email or push notifications should be sent for the
messages generated by the welcome bot.

'internal_send_private_message' accepts a parameter
'disable_external_notifications' and is set to 'True' when the sender
is 'welcome bot'.

A check is introduced in `trivially_should_not_notify`, not to notify
if `disable_external_notifications` is true.

TestCases are updated to include the `disable_external_notifications`
check in the early (False) return patterns of `is_push_notifiable` and
`is_email_notifiable`.

One query reduced for both `test_create_user_with_multiple_streams`
and `test_register`.
Reason: When welcome bot sends message after user creation
`do_send_messages` calls `get_active_presence_idle_user_ids`,
`user_ids` in `get_active_presence_idle_user_ids` remains empty if
`disable_external_notifications` is true because `is_notifiable` returns
false.
`get_active_presence_idle_user_ids` calls `filter_presence_idle_user_ids`
and since the `user_ids` is empty, the query inside the function doesn't
get executed.

MissedMessageHookTest updated.

Fixes: #22884
2023-01-24 11:16:21 -08:00
Prakhar Pratyush
b40bbd6ca8 message_send: Refactor internal_send_*, internal_prep_* & _internal_prep_*.
This commit makes all the parameters after 'content' in
'internal_send_*', 'internal_prep_*' and '_internal_prep_*'
a mandatory keyword argument to increase code readability.
2023-01-24 11:16:21 -08:00
Prakhar Pratyush
4595b5d132 notifications: Add separate function for is_notifiable trivial checks.
A separate function named `trivially_should_not_notify` is added which
extracts the common checks from `get_push_notification_trigger` and
`get_email_notification_trigger` which are users' notification settings
independent and thus don't depend on what type of notification (email/push)
it is.
2023-01-24 11:16:14 -08:00
brijsiyag
cb35e5c6fc css: Add spinning animation for pre-CSS app loading page.
Fixes #22265.
2023-01-24 11:05:36 -08:00
Alex Vandiver
994806c505 migrations: Fix ownership, and re-attach, mis-owned email attachments.
608c787c52 fixed a bug where messages sent by the email gateway "as"
a user failed to properly attribute ownership of their attachments,
leaving the attachments orphaned and thus with nobody with permissions
to view them.

These orphaned attachments only remain longer than a few weeks if the
`delete_unclaimed_attachments` script has not been run reliably.
Since there is currently no shipped cron job for this, that is most
likely all deployments.

Add a migration to find such orphaned attachments, and re-attach them
to their original message.  While theoretically the attachments
could have been later referenced in other messages -- which would be
very difficult to find and determine if they had access to the
attachment -- we only fix the original message.

In order to make this somewhat performant, we assume that the Message
rows associated with an Attachment made by the email gateway happened
within 5 minutes, since they must have been made during one HTTP
request.

This is complicated by the message potentially having been deleted; in
this case, the Attachment is moved into ArchivedAttachment, so it can
relate to the ArchivedMessage.  The many-to-many
`zerver_archivedattachment_messages` relationship table cannot use its
own `id` sequence for the value, since the `id` is re-used when the
row is inserted into the `zerver_attachment_messages` table -- we
instead consume a value from the `id` sequence of the
`zerver_attachment_messages` table.
2023-01-24 10:49:46 -08:00
Mateusz Mandera
9aacf76f0d do: Install pynacl in the oneclick job.
This is now a required dependency.
2023-01-24 10:33:41 -08:00
Alex Vandiver
1eb31f4f54 upload-release: Update SHA256SUM for existing files if changed.
In the very infrequent case that we re-upload a file, the logic for
upload-release would have the existing SHA256SUM take precedence over
the new one -- despite uploading the new file.

Skip existing filenames (i.e. from the new file) when gathering
SHA256SUM metadata used to assemble `SHA256SUMS.txt`.
2023-01-23 17:41:29 -08:00
Aman Agrawal
f4e9bf269c css: Fix positioning of text elements in message row without sender.
When I changed the padding for message content in the PR which
converted the message row to a grid, I forgot to adjust
the position of edited and time elements.
2023-01-23 16:41:03 -08:00
brijsiyag
f314d819aa settings: Remove unused class.
Removed class is not used for any CSS.
Also heading is not for the message retention setting.
2023-01-23 15:09:21 -08:00
brijsiyag
02450b7aa6 settings: Fix info icon in header row outside header.
This info icon was smaller than similar ones sitting in heading rows,
because the icon element was outside the `<h3>` element for the row.

Fixes #23801
2023-01-23 15:08:42 -08:00
Akarsh Jain
caeeddd975 typeahead: Fix suggestion box positioning on window resize.
The suggestion box was not being repositioned correctly when the window
was resized. This commit adds a resizeHandler() function to handle
window resizing properly and reposition the suggestion box to its
current position.

Fixes: #23681.
2023-01-23 15:05:14 -08:00
David Rosa
256e9651b6 help center: Add section links in "Using Zulip for a class".
Converts the bullets at the top of the page into section links.
2023-01-23 14:23:16 -08:00
Alex Vandiver
50e9df448d puppet: Do not start the "puppet" service.
Zulip runs puppet manually, using the command-line tool; it does not
make use of the `puppet` service which, by default, attempts to
contact a host named `puppet` every two minutes to get a manifest to
apply.  These attempts can generate log spam and user confusion.

Disable and stop the `puppet` service via puppet.
2023-01-23 13:02:09 -08:00
Alex Vandiver
25c9fcdb4e changelog: Tweak wording to clarify impact to Safari. 2023-01-23 15:07:02 -05:00
evykassirer
56c9b4f8c1 puppeteer: Check compose form contents in a new distinct function.
This is a prep commit for a future where we check the stream name
from a different field that isn't in the form, so that we only
have to change code in this single place.
2023-01-23 11:31:47 -08:00
Anders Kaseorg
d3164016f5 ruff: Fix UP032 Use f-string instead of format call.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-23 11:18:36 -08:00
Anders Kaseorg
e5d671bf2b ruff: Fix SIM210 Use bool(…) instead of True if … else False.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-23 11:18:36 -08:00
Anders Kaseorg
7a7513f6e0 ruff: Fix SIM201 Use … != … instead of not … == ….
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-23 11:18:36 -08:00
Anders Kaseorg
25346bde98 ruff: Fix SIM118 Use k in d instead of k in d.keys().
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-23 11:18:36 -08:00
Anders Kaseorg
6303ebfc2f ruff: Fix SIM115 Use context handler for opening files.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-23 11:18:36 -08:00
Anders Kaseorg
c6b6004432 ruff: Fix SIM111 Use return all(…) instead of for loop.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-23 11:18:36 -08:00
Anders Kaseorg
b8b29dc3ad ruff: Fix SIM110 Use return any(…) instead of for loop.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-23 11:18:36 -08:00
Anders Kaseorg
ff1971f5ad ruff: Fix SIM105 Use contextlib.suppress instead of try-except-pass.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-23 11:18:36 -08:00
Anders Kaseorg
b0e569f07c ruff: Fix SIM102 nested if statements.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-23 11:18:36 -08:00
David Rosa
50cf9bc4b8 contributor docs: Document bold formatting for help center inline icons.
Updates "Icons" section of the "Writing help center articles" page
to be consistent with current help center documentation patterns.
2023-01-23 11:15:51 -08:00
David Rosa
f1f381dc2c help center: Consistently use bold formatting for icon names.
Fixes formatting of icon names to follow current help center
documentation patterns.
2023-01-23 11:15:51 -08:00
Alex Vandiver
d38b3ad09c changelog: Fix the link from .html# to .md#. 2023-01-23 18:58:26 +00:00
Alex Vandiver
4226026dbc version: Update version and changelog after 6.1 release. 2023-01-23 18:52:47 +00:00
m-e-l-u-h-a-n
fbb475b16a streams: Fix hash redirect for deleted/invalid stream ids.
The logic for hash redirects for stream settings did not check
for deleted or non-existent streams. Thus a hash of the form
`/#streams/{invalid_stream_id}/*` gave gave a blueslip error.

This change fixes that logic to treat such hashes equivalent to
streams whose settings cannot be accessed by that user and
redirects such invalid hashes to `/#streams/subscribed/`.
2023-01-20 15:07:00 -08:00
N-Shar-ma
fb81e5504c typeahead: Remove misleading comment regarding favouring popular emojis. 2023-01-20 14:41:21 -08:00
N-Shar-ma
aa72b51bca emojis: Prioritise custom / realm emojis when sorting.
Fixes: #18135.
2023-01-20 14:41:21 -08:00
N-Shar-ma
249f482b06 emojis: Filter out unicode emojis with same codes from typeahead menu.
Since emojis can have multiple aliases, an emoji was often suggested
under multiple names (like `smiling devil` / `smiling imp`), crowding
typeahead suggestions redundantly, and taking up the place of other
potentially relevant emoji suggestions.

Now such duplicates are removed post the sorting of suggested emojis,
and only the most relevantly named (highest sorted) copy is retained.
2023-01-20 14:41:21 -08:00
N-Shar-ma
c64726ea9a compose: Retain compose state across narrows if recipient was edited.
Uptil now, the compose box's state was retained across narrows only if
the compose box had any content in it. Else it was reset to match the
current narrow.

To not lose any changes made to the recipient fields only, the compose
box will now retain its state also if the recipient (stream, topic or
PMs) has been manually edited.

This is achieved by having a variable in `compose_state` track if the
recipient fields were changed, and checking it before resetting the
compose box on narrowing. This variable is reset when the compose box's
context is changed by clicking on a message, or when a message is sent.

Fixes: #23064.
2023-01-20 12:56:37 -08:00
Sahil Batra
3cb69b138e settings: Disable save button when value is out of range.
This commit adds code to disable save button when the value
in custom input box is too large for an integer. Note that
since the value for message edit, message delete and email
notification batching settings are in minutes in the custom
input but are sent to API in seconds, we make sure that the
seconds value should be inside the range.
2023-01-20 12:45:53 -08:00
Sahil Batra
82aacb4996 settings: Fix custom input handling of message retention setting.
This commit adds code to convert $custom_input.val() to Number
in get_message_retention_setting_value such that values like
"48aa" are treated as NaN and we correctly show save-discard
widget with save button disabled. If we not convert it to Number,
Number.parseInt will just convert "48aa" to 48.

This commit is similar to 711536f53a.
2023-01-20 12:45:53 -08:00
Sahil Batra
235bd3fb1b settings: Disable "Save changes" button for invalid values.
This commit disables the "Save changes" button when there is
an invalid value in custom input of message retention setting.

This commit includes changes for both realm and stream message
retention setting.
2023-01-20 12:45:53 -08:00
Sahil Batra
ba1188db05 settings: Rename admin-realm-time-limit-input class.
This commit renames admin-realm-time-limit-input class to
time-limit-custom-input such that there is no confusion
when it is used for stream settings also.
2023-01-20 12:45:53 -08:00
Sahil Batra
565d133985 settings: Refactor code for waiting period setting.
This commit refactors code for realm waiting period setting
to be similar to other time-based inputs. We also add the
code to disable the save button when custom inputs have
invalid values.
2023-01-20 12:45:53 -08:00
Sahil Batra
bc5f0e881e settings: Rename IDs of waiting-period-threshold setting elements. 2023-01-20 12:45:53 -08:00
Sahil Batra
4dd1676e96 settings_config: Add waiting_period_threshold_dropdown_values.
This list will be used in further commits in settings_org.js
code for waiting period threshold setting.
2023-01-20 12:45:53 -08:00
Sahil Batra
43898be138 settings_org: Rename custom_days option to custom_period.
This commit renames custom_days option for realm waiting
threshold setting dropdown to custom_period such that we
can reuse existing code for similar time-limit settings.
2023-01-20 12:45:53 -08:00
Tim Abbott
235768ae4c setting: Remove now unused dependant-inline-block class. 2023-01-20 12:39:28 -08:00
Ningxi Zhang
69d8101c6a settings: Move the retention days input below the dropdown.
Moved the "Retention period (days):" under the dropdown "Custom".

This is consistent with similar date window inputs elsewhere, and
conveniently just requires changing a single class.

Fixes: #23532
2023-01-20 12:38:04 -08:00
Ningxi Zhang
e6cf074929 settings: Improve wording of retention period options.
Replaced the "Retain for N days after posting" option with "Custom".
Only show the spot for entering the time if that option is selected.
Labeled the custom time like we do for message editing:
"Retention period (days): [ ]".

This is now consistent with similar settings.

Fixes part of #23532.
2023-01-20 12:37:42 -08:00
Alex Vandiver
e19d4e5e0a docs: Mention probably needing to allow port 22 for SSH access. 2023-01-19 17:31:13 -08:00
Sahil Batra
ca845a6f76 bootstrap: Remove form-horizontal CSS from bootstrap.css.
This commit removes all CSS rules for form-horizontal class
from bootstrap.css. We have already removed instance of
this class in previous commits.
2023-01-19 17:26:58 -08:00
Sahil Batra
802deb1761 settings: Remove form-horizontal class from modal templates.
This commit removes form-horizontal class from various modal
templates. We add CSS for margin-bottom property for select
and input elements to keep the design same as before. Most
of the added CSS can be removed once we remove bootstrap
CSS completely for these elements.

We can safely remove this class since vertical-align property
is already present due to other bootstrap CSS. And
margin-bottom property for checkbox inputs are added by
bootstrap and for text inputs inside ".new-style" element it
is handled in app_components.css. For other inputs, this commit
adds CSS as mentioned above.

The display property for inputs other than checkbox and select
elements is set to inline-block by other bootstrap CSS.
For checkbox-type inputs browser sets display property to
inline-block but it is eventually computed to "block" as the
float property is set to left and so it is not required to
set display property for checkbox type inputs.
2023-01-19 17:26:58 -08:00
Sahil Batra
8b7a911b0e settings: Remove form-horizontal class from settings template.
This commit removes form-horizontal class from form elements
in user profile, org profile, org settings and org permission
pages. We also add margin-bottom property for select elements
in this page.

We can safely remove this class since vertical-align property
is already present due to other bootstrap CSS.
And margin-bottom property for checkbox inputs are added by
bootstrap and for text inputs it is handled in
app_components.css.

The display property for inputs other than checkbox and select
elements is set to inline-block by other bootstrap CSS.
For checkbox-type inputs browser sets display property to
inline-block but it is eventually computed to "block" as the
float property is set to left and so it is not required to
set display property for checkbox type inputs.

We have added CSS for select elements in settings.css which can
be removed later once we remove bootstrap for select elements
completely.
2023-01-19 17:26:56 -08:00
Sahil Batra
a144166e12 settings: Remove form-horizontal class from notification settings.
This commit removes form-horizontal class from time-limit-setting
div in notfication_settings.hbs. We can safely remove this class
since display and vertical-align properties are applied for select
and input elements by other bootstrap CSS, the margin-bottom
property for custom input is applied by existing CSS in
app_components.css and this commit adds margin-bottom property for
select elements.

The CSS added in this commit will probably be removed once we
remove bootstrap CSS rules for select elements completely.
2023-01-19 17:26:11 -08:00
Sahil Batra
aa7329e18b settings: Remove form-horizontal class in org settings pages.
This commit removes form-horizontal class from form elements
in custom-emoji, linkifiers, playgrounds, default-streams,
default-user-settings, auth-methods and user privacy settings
templates.

We can safely remove this class because vertical-align property
for input elements is set by other bootstrap CSS and margin
property for text inputs is set in app_components.css and for
checkbox inputs it is set by bootstrap itself.

The display property for inputs other than checkbox and select
elements is set to inline-block by other bootstrap CSS.
For checkbox-type inputs browser sets display property to
inline-block but it is eventually computed to "block" as the
float property is set to left.
2023-01-19 17:24:49 -08:00
Sahil Batra
1a0e8af4a9 settings: Remove unnecessary form-horizontal class.
This commit removes form-horizontal class from form
elements in alert-words, realm-exports and user-privacy
pages.

We can safely remove this class since there is no select,
input, help-inline or input-append child elements for these
and thus this class is not used for applying any CSS rules.
2023-01-19 17:24:49 -08:00
Sahil Batra
da9cfa206a topic_edit_form: Remove form-horizontal class.
This commit removes form-horizontal class from form element
of inline topic edit form. We can safely remove this class,
since all properties applied by bootstrap using this class
are already overridden by specific CSS for the input element
in zulip.css.
2023-01-19 17:24:49 -08:00
Sahil Batra
48dec70099 invite: Remove form-horizontal class from invite modal.
This commit removes form-horizontal class from invite_user
template. We can safely remove this class as vertical-align
property is already handled for input and select elements
by other bootstrap CSS.

For checkbox type inputs, the display property is already
set to inline-block by browser for all input elements but
it is eventually computed to "block" since float property
for this element is set to left. So, setting display
property is not necessary for checkbox input.

We add margin-bottom property CSS for now and that can
eventually be removed when we remove bootstrap CSS for
these elements completely.
2023-01-19 17:24:48 -08:00
Sahil Batra
a05b0b8d23 portico: Remove form-horizontal class from some portico pages.
This commit removes form-horizontal class from password reset
pages (page in which user enters the email and the page where
user sets the new password) and user register page.

We can safely remove the form-horizontal class, since the
vertical-align property is already applied by other CSS
in bootstrap and margin is overridden by CSS in
portico_signin.css.

For checkbox type inputs, the display property is already set
to inline-block by browser for all input elements but it is
eventually computed to "block" since float property for this
element is set to left. So, setting display property is not
necessary for checkbox input.

For the help-inline elements, the display and margin properties
are overridden in portico_signin.css and vertical-align property
is handled by CSS for "help-inline" class in bootstrap.css.
2023-01-19 17:24:14 -08:00
Sahil Batra
3920a73b20 social_auth_select_email: Remove form-horizontal class.
This commit removes form-horizontal class from form elements
in social_auth_select_email.html. There is no visible input
element in the form element so the bootstrap CSS using
"form-horizontal" class does not apply to any of the elments
in the page, so removing this class does not have any affect.

The "form-horizontal" class is used in portico-signin.css for
adding hover behavior, so we add a new class "select-email-form"
and use it to add the hover behavior.
2023-01-19 17:24:14 -08:00
Sahil Batra
90dbc50c8c tos: Remove form-horizontal class from account_accept_terms template.
This commit removes form-horizontal class from account_accept_terms
template. We can safely remove this class because vertical-align
property is already handled for input element by other bootstrap CSS
and margin is overridden by CSS in portico.css. The display property
is already set to inline-block by browser for all input elements
but it is eventually computed to "block" since float property for
this element is set to left.

For the "p" element used to display errors, the display and margin
properties are overridden in portico_signin.css and vertical-align
property is handled by CSS for "help-inline" class in bootstrap.css.
2023-01-19 17:24:14 -08:00
Sahil Batra
8024766b27 support: Remove form-horizontal from form element in support request page.
We can safely remove the form-horizontal class from form element in
support request page, since the display and vertical-align are already
applied by other CSS in bootstrap and margin is overridden by CSS in
portico_signin.css.
2023-01-19 17:24:14 -08:00
Lalit
112df91fbd provision: Do not require that no other yarn precedes us in $PATH.
`check_version` in `install-yarn` had the rather careful check that
the yarn it installed into `/usr/bin/yarn` was the yarn which was
first in the user's `$PATH`.  This caused problems when the user had a
pre-existing `/usr/local/bin/yarn`; however, those problems are
limited to the `install-yarn` script itself, since the nearly all
calls to yarn from Zulip's code already hardcode the `/srv/zulip-yarn`
location, and do not depend on what is in `$PATH`.

Remove the checks in `install-yarn` that depend on the local `$PATH`,
and stop installing our `yarn` into it.  We also adjust the two
callsites which did not specify the full path to `yarn`, so use
`/srv/zulip-yarn`.

Fixes: #23993

Co-authored-by: Alex Vandiver <alexmv@zulip.com>
2023-01-19 17:51:52 -05:00
Tim Abbott
4811443b3d apps: The Ferdi project died and was replaced by Ferdium. 2023-01-19 11:47:07 -08:00
Tim Abbott
38060e1c0a help: Fix broken link on updated SCIM page.
This was introduced in 0bd3f1dce2.
2023-01-19 11:43:14 -08:00
David Rosa
f70b321773 help center: Document bot name in org settings link to bot's user card.
Documents link to the bot's user card from the bot's name in
Organization settings > Bots, and information in the bot's user card.

Fixes part of #23970.
2023-01-19 11:13:33 -08:00
Palash Baderia
4901a0d19b settings: Link organization settings users to user cards.
This makes it easier to browse details on users and bots when
interacting with them in the settings interface.

While the original issue was about just the bots panel, this is
clearly useful for all users.

Fixes: #23970.
2023-01-19 11:13:33 -08:00
David Rosa
0bd3f1dce2 help center: Update "SCIM provisioning" page.
Updates page to match help center documentation patterns,
and to use the newly added macros.

Fixes: #22890.
2023-01-19 11:09:15 -08:00
David Rosa
e747fa893d help center: Update "Import from Gitter".
Updates the help center article to match the style and formatting
of "Import from Slack" and replaces existing content with its
corresponding Markdown macro.
2023-01-19 10:58:17 -08:00
Aman Agrawal
a31df1d58b css: Don't render message failed buttons.
We used to make message failed button (retry / cancel) invisible
when the message is successfully send instead of not rendering them.
This resulted in them being accessible via keyboard when they are not
visible. I couldn't find a reason for retry and cancel buttons to
use `visibility` to be hidden instead of just being not rendered via
`display: none`.
2023-01-19 10:57:14 -08:00
Praveen Kumar
5b89f34f48 message_failed: Hide focus rectangle while animating.
The focus rectangle would spin along with the arrows, which looked bad.

We do want to allow focus rectangles on this element for keyboard interaction,
so we just disable the focus rectangle during the animation.

Fixes #24110.
2023-01-19 10:40:27 -08:00
Evy Kassirer
cc35e2f9b2 navbar: Remove stale .rightside-userlist CSS class.
Since fbe9a9e539, the top_navbar element
unconditionally has the rightside_userlist class. There's some CSS
associated with this class NOT being present, which can be deleted as having
no effect, and then we can remove the class as having no effect as well,
2023-01-19 10:37:38 -08:00
Aman Agrawal
863ec70955 message_body: Structure hidden message similar to a normal message.
Messages sent by muted users are hidden. To make sure they are
displayed properly, we provide them a HTML structure similar to
that of a normal message so that any CSS applied to a normal
message also applied to it.

This fixes message controls being misaligned in hidden message.
2023-01-19 09:04:37 -08:00
Akarsh Jain
82aa15cb38 subscribers: Add warning when last user unsubscribes from private stream.
This commit adds a warning to the confirmation modal displayed when
the last user of a private stream attempts to unsubscribe. The warning
explains that, as the only subscriber, unsubscribing will result in the
stream being automatically archived. This change helps ensure that users
are aware of the consequences of their actions and can make informed
decisions.

Fixes: #23954
2023-01-18 16:12:07 -08:00
Alya Abbott
f26260c52a contributor docs: Refer to How we communicate in Design discussions. 2023-01-18 16:07:49 -08:00
Alya Abbott
1e3fb6a149 contributor docs: Add How we communicate page. 2023-01-18 16:07:49 -08:00
Alya Abbott
039d0032a9 help center: Document Participants column in Recent conversations. 2023-01-18 16:06:07 -08:00
Aman Agrawal
a13058223d compose: Don't allow same message to be sent twice.
It is possible to send the message twice by clicking send button
very quickly twice or by pressing enter and send button simultaneously.

This can be easily reproduced for large messages sent in a stream
narrow. Hard to reproduce for small messages or in PM narrows.

I was not able to reproduce locally, but was able to reproduce on
chat.zulip.org. So, this is an untested bug fix.

Fixes #22562
2023-01-18 16:04:58 -08:00
David Rosa
5fd4d3f053 help center: Update "Import from Rocket.Chat".
Updates the help center article to match the style and formatting
of "Import from Slack" and replaces existing content with its
corresponding Markdown macro.
2023-01-18 16:01:45 -08:00
Duncan
e582055d2a help center: Add mobile instructions to "Mute a topic".
Fixes #22146.
2023-01-18 16:00:12 -08:00
Duncan
52d6cf1050 help center: Consolidate "Mute a topic" instructions into one list.
The message recipient bar instructions are now contained in a tip
block, as suggested in #22178.
Refines wording for unmuting topics on desktop/web.

This will allow adding mobile instructions to the article.
2023-01-18 16:00:12 -08:00
David Rosa
81a4b8c477 help center: Document quote-and-reply mobile feature.
Updates Quote and reply help center article to add instructions
for how to use this feature on mobile.

Fixes: #23752.
2023-01-18 15:53:27 -08:00
N-Shar-ma
963e1412b5 typeahead: Add message view context to PM recipient suggestions.
Uptil now when composing PMs, only for @-mentions was the stream / topic
being viewed taken into consideration. The PM recipient suggestions were
unaffected by the current view.

Now this context has been added to the PM recipient suggestions as well,
ensuring consistent sorting of options across both typeahead menus, with
subscribers and recent posters to that stream / view getting priority.

When the view is not narrowed to a stream / topic, the PM suggestions
are sorted the same as before.

This PR has the same code changes discussed and made in #22630, with an
added test suite.

Fixes: #21645.
2023-01-18 15:50:04 -08:00
David Rosa
e23ab721a6 help center: Document sizing for organization logo and profile picture.
Fixes part of #22121.
2023-01-18 15:43:54 -08:00
Alex Vandiver
608c787c52 email_mirror: Create attachments as the message sender.
When the email mirror gateway is sending messages "as" a user (as
triggered by having access to the missed-message email address),
attachments were still created as the Email Gateway bot.  Since the
sender (the end-user) was not the owner of those attachments (the
gateway bot), nor were they referenced yet anywhere, this resulted in
the attachments being "orphaned" and not allowed to be accessed by
anyone -- despite the attachment links being embedded in the message.
This was accompanied by the error:

```
WARN [] User 12345 tried to share upload 123/3LkSA4OcoG6OpAknS2I0SFAQ/example.jpf in message 123456, but lacks permission
INFO [zerver.lib.email_mirror] Successfully processed email from user 12345 to example-stream
```

We solve this by creating attachment objects as the users the message
will be sent from.
2023-01-18 15:42:40 -08:00
Anders Kaseorg
8f7a7877fe python: Clean up janky URL matching code with urlsplit.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-18 17:25:46 -05:00
Lauryn Menard
1e96c6e9a2 settings-profile: Move tooltip for name change disabled to field.
Moves the tooltip when name changes are disabled to be shown on
hovering over the full name input field. Removes the question icon
that previously showed the tooltip on hover.
2023-01-18 13:39:16 -08:00
Lauryn Menard
578af48632 settings-modal: Only update display if overlay loaded in DOM.
If the personal / organization settings overlay has not been
loaded to the DOM in the user's session, then there's no need
to update the overlay display for changes to the user's
permissions to update their name, email or avatar.

So we check for the relevant element ids before updating the
overlay display when the user's role or these organization
settings change, and return early if they are not present in
the DOM.
2023-01-18 13:38:09 -08:00
Anders Kaseorg
9a7f33ab98 migrations: Fix ‘continue’ logic error in 0037.
The intention was to continue the outer ‘for’ loop, not the inner one
(but Python doesn’t have labelled ‘continue’).

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-18 13:34:52 -08:00
Greg Price
f38b5c41da shared: Bump version to 0.0.18 2023-01-18 13:25:44 -08:00
Anders Kaseorg
a5fefa5932 shared: Remove js source from distributed package.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2023-01-18 13:25:08 -08:00
2742 changed files with 126808 additions and 93300 deletions

View File

@@ -21,3 +21,7 @@ vise
falsy
ro
derails
forin
uper
slac
couldn

View File

@@ -4,11 +4,12 @@
/docs/_build
/static/generated
/static/third
/static/webpack-bundles
/var/*
!/var/puppeteer
/var/puppeteer/*
!/var/puppeteer/test_credentials.d.ts
/web/generated
/web/third
/zulip-current-venv
/zulip-py3-venv

View File

@@ -15,6 +15,7 @@
],
"parser": "@babel/eslint-parser",
"parserOptions": {
"requireConfigFile": false,
"warnOnUnsupportedTypeScriptVersion": false,
"sourceType": "unambiguous"
},
@@ -50,6 +51,7 @@
"import/first": "error",
"import/newline-after-import": "error",
"import/no-self-import": "error",
"import/no-unresolved": ["error", {"ignore": ["^date-fns-tz$|^js-cookie$|^katex$"]}],
"import/no-useless-path-segments": "error",
"import/order": ["error", {"alphabetize": {"order": "asc"}, "newlines-between": "always"}],
"import/unambiguous": "error",
@@ -115,7 +117,6 @@
"unicorn/numeric-separators-style": "off",
"unicorn/prefer-module": "off",
"unicorn/prefer-node-protocol": "off",
"unicorn/prefer-spread": "off",
"unicorn/prefer-ternary": "off",
"unicorn/prefer-top-level-await": "off",
"unicorn/prevent-abbreviations": "off",
@@ -125,19 +126,19 @@
},
"overrides": [
{
"files": ["frontend_tests/node_tests/**", "frontend_tests/zjsunit/**"],
"files": ["web/tests/**"],
"rules": {
"no-jquery/no-selector-prop": "off"
}
},
{
"files": ["frontend_tests/puppeteer_lib/**", "frontend_tests/puppeteer_tests/**"],
"files": ["web/e2e-tests/**"],
"globals": {
"zulip_test": false
}
},
{
"files": ["static/js/**"],
"files": ["web/src/**"],
"globals": {
"StripeCheckout": false
}
@@ -145,7 +146,9 @@
{
"files": ["**/*.ts"],
"extends": [
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking",
"plugin:@typescript-eslint/strict",
"plugin:import/typescript"
],
"parserOptions": {
@@ -164,12 +167,9 @@
"rules": {
// Disable base rule to avoid conflict
"no-duplicate-imports": "off",
"no-unused-vars": "off",
"no-useless-constructor": "off",
"no-use-before-define": "off",
"@typescript-eslint/array-type": "error",
"@typescript-eslint/consistent-type-assertions": "error",
"@typescript-eslint/consistent-type-definitions": ["error", "type"],
"@typescript-eslint/consistent-type-imports": "error",
"@typescript-eslint/explicit-function-return-type": [
"error",
@@ -177,8 +177,9 @@
],
"@typescript-eslint/member-ordering": "error",
"@typescript-eslint/no-duplicate-imports": "error",
"@typescript-eslint/no-extraneous-class": "error",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-parameter-properties": "error",
"@typescript-eslint/no-unnecessary-condition": "off",
"@typescript-eslint/no-unnecessary-qualifier": "error",
"@typescript-eslint/no-unsafe-argument": "off",
"@typescript-eslint/no-unsafe-assignment": "off",
@@ -186,12 +187,9 @@
"@typescript-eslint/no-unsafe-member-access": "off",
"@typescript-eslint/no-unsafe-return": "off",
"@typescript-eslint/no-unused-vars": ["error", {"ignoreRestSiblings": true}],
"@typescript-eslint/no-use-before-define": "error",
"@typescript-eslint/no-useless-constructor": "error",
"@typescript-eslint/prefer-includes": "error",
"@typescript-eslint/prefer-string-starts-ends-with": "error",
"@typescript-eslint/no-use-before-define": ["error", {"functions": false}],
"@typescript-eslint/promise-function-async": "error",
"@typescript-eslint/unified-signatures": "error",
"import/no-cycle": "error",
"no-undef": "error"
}
},
@@ -202,7 +200,7 @@
}
},
{
"files": ["frontend_tests/**"],
"files": ["web/e2e-tests/**", "web/tests/**"],
"globals": {
"CSS": false,
"document": false,
@@ -217,7 +215,7 @@
}
},
{
"files": ["tools/debug-require.js"],
"files": ["web/debug-require.js"],
"env": {
"browser": true,
"es2020": false
@@ -231,20 +229,27 @@
}
},
{
"files": ["static/**"],
"files": ["web/shared/**", "web/src/**", "web/third/**"],
"env": {
"browser": true,
"node": false
},
"globals": {
"ZULIP_VERSION": false
},
"rules": {
"no-console": "error"
},
"settings": {
"import/resolver": "webpack"
"import/resolver": {
"webpack": {
"config": "./web/webpack.config.ts"
}
}
}
},
{
"files": ["static/shared/**"],
"files": ["web/shared/**"],
"env": {
"browser": false,
"shared-node-browser": true
@@ -255,9 +260,9 @@
{
"zones": [
{
"target": "./static/shared",
"target": "./web/shared",
"from": ".",
"except": ["./node_modules", "./static/shared"]
"except": ["./node_modules", "./web/shared"]
}
]
}

View File

@@ -8,17 +8,16 @@ on:
paths:
- .github/workflows/production-suite.yml
- "**/migrations/**"
- babel.config.js
- manage.py
- postcss.config.js
- pnpm-lock.yaml
- puppet/**
- requirements/**
- scripts/**
- static/assets/**
- static/third/**
- tools/**
- webpack.config.ts
- yarn.lock
- web/babel.config.js
- web/postcss.config.js
- web/third/**
- web/webpack.config.ts
- zerver/worker/queue_processors.py
- zerver/lib/push_notifications.py
- zerver/decorator.py
@@ -69,16 +68,15 @@ jobs:
- name: Create cache directories
run: |
dirs=(/srv/zulip-{npm,venv,emoji}-cache)
dirs=(/srv/zulip-{venv,emoji}-cache)
sudo mkdir -p "${dirs[@]}"
sudo chown -R github "${dirs[@]}"
- name: Restore node_modules cache
- name: Restore pnpm store
uses: actions/cache@v3
with:
path: /srv/zulip-npm-cache
key: v1-yarn-deps-focal-${{ hashFiles('package.json') }}-${{ hashFiles('yarn.lock') }}
restore-keys: v1-yarn-deps-focal
path: ~/.local/share/pnpm/store
key: v1-pnpm-store-focal-${{ hashFiles('pnpm-lock.yaml') }}
- name: Restore python cache
uses: actions/cache@v3
@@ -102,7 +100,7 @@ jobs:
with:
name: production-tarball
path: /tmp/production-build
retention-days: 14
retention-days: 1
- name: Generate failure report string
id: failure_report_string
@@ -176,16 +174,15 @@ jobs:
- name: Create cache directories
run: |
dirs=(/srv/zulip-{npm,venv,emoji}-cache)
dirs=(/srv/zulip-{venv,emoji}-cache)
sudo mkdir -p "${dirs[@]}"
sudo chown -R github "${dirs[@]}"
- name: Restore node_modules cache
- name: Restore pnpm store
uses: actions/cache@v3
with:
path: /srv/zulip-npm-cache
key: v1-yarn-deps-${{ matrix.os }}-${{ hashFiles('/tmp/package.json') }}-${{ hashFiles('/tmp/yarn.lock') }}
restore-keys: v1-yarn-deps-${{ matrix.os }}
path: ~/.local/share/pnpm/store
key: v1-pnpm-store-${{ matrix.os }}-${{ hashFiles('/tmp/pnpm-lock.yaml') }}
- name: Install production
run: sudo /tmp/production-install ${{ matrix.extra-args }}
@@ -212,7 +209,7 @@ jobs:
- name: Generate failure report string
id: failure_report_string
if: ${{ failure() && github.repository == 'zulip/zulip' && github.event_name == 'push' }}
run: tools/ci/generate-failure-message >> $GITHUB_OUTPUT
run: /tmp/generate-failure-message >> $GITHUB_OUTPUT
- name: Report status to CZO
if: ${{ failure() && github.repository == 'zulip/zulip' && github.event_name == 'push' }}
@@ -281,7 +278,7 @@ jobs:
- name: Create cache directories
run: |
dirs=(/srv/zulip-{npm,venv,emoji}-cache)
dirs=(/srv/zulip-{venv,emoji}-cache)
sudo mkdir -p "${dirs[@]}"
sudo chown -R github "${dirs[@]}"
@@ -297,7 +294,7 @@ jobs:
- name: Generate failure report string
id: failure_report_string
if: ${{ failure() && github.repository == 'zulip/zulip' && github.event_name == 'push' }}
run: tools/ci/generate-failure-message >> $GITHUB_OUTPUT
run: /tmp/generate-failure-message >> $GITHUB_OUTPUT
- name: Report status to CZO
if: ${{ failure() && github.repository == 'zulip/zulip' && github.event_name == 'push' }}

View File

@@ -22,6 +22,6 @@ jobs:
run: |
export PATH="$HOME/.local/bin:$PATH"
git clone https://github.com/zulip/marketplace-partners
pip3 install python-digitalocean zulip fab-classic
pip3 install python-digitalocean zulip fab-classic PyNaCl
echo $PATH
python3 tools/oneclickapps/prepare_digital_ocean_one_click_app_release.py

View File

@@ -64,16 +64,15 @@ jobs:
- name: Create cache directories
run: |
dirs=(/srv/zulip-{npm,venv,emoji}-cache)
dirs=(/srv/zulip-{venv,emoji}-cache)
sudo mkdir -p "${dirs[@]}"
sudo chown -R github "${dirs[@]}"
- name: Restore node_modules cache
- name: Restore pnpm store
uses: actions/cache@v3
with:
path: /srv/zulip-npm-cache
key: v1-yarn-deps-${{ matrix.os }}-${{ hashFiles('package.json', 'yarn.lock') }}
restore-keys: v1-yarn-deps-${{ matrix.os }}
path: ~/.local/share/pnpm/store
key: v1-pnpm-store-${{ matrix.os }}-${{ hashFiles('pnpm-lock.yaml') }}
- name: Restore python cache
uses: actions/cache@v3
@@ -123,7 +122,7 @@ jobs:
- name: Run backend tests
run: |
source tools/ci/activate-venv
./tools/test-backend --coverage --include-webhooks --no-cov-cleanup --ban-console-output
./tools/test-backend --coverage --xml-report --no-html-report --include-webhooks --no-cov-cleanup --ban-console-output
- name: Run mypy
run: |
@@ -152,12 +151,12 @@ jobs:
./tools/setup/generate_integration_bots_avatars.py --check-missing
./tools/ci/check-executables
# Ban check-database-compatibility.py from transitively
# Ban check-database-compatibility from transitively
# relying on static/generated, because it might not be
# up-to-date at that point in upgrade-zulip-stage-2.
chmod 000 static/generated
./scripts/lib/check-database-compatibility.py
chmod 755 static/generated
chmod 000 static/generated web/generated
./scripts/lib/check-database-compatibility
chmod 755 static/generated web/generated
- name: Run documentation and api tests
if: ${{ matrix.include_documentation_tests }}
@@ -196,6 +195,10 @@ jobs:
source tools/ci/activate-venv
./tools/test-js-with-puppeteer
- name: Check pnpm dedupe
if: ${{ matrix.include_frontend_tests }}
run: pnpm dedupe --check
- name: Check for untracked files
run: |
source tools/ci/activate-venv

2
.gitignore vendored
View File

@@ -44,11 +44,11 @@ package-lock.json
# Static build
*.mo
npm-debug.log
/.pnpm-store
/node_modules
/prod-static
/staticfiles.json
/webpack-stats-production.json
/yarn-error.log
zulip-git-version
# Test / analysis tools

View File

@@ -1,13 +1,13 @@
[general]
ignore=title-trailing-punctuation, body-min-length, body-is-missing
extra-path=tools/lib/gitlint-rules.py
extra-path=tools/lib/gitlint_rules.py
[title-match-regex]
regex=^(.+:\ )?[A-Z].+\.$
[title-max-length]
line-length=76
line-length=72
[body-max-line-length]
line-length=76

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
ignore-dep-scripts=true

View File

@@ -1,8 +1,11 @@
pnpm-lock.yaml
/api_docs/**/*.md
/corporate/tests/stripe_fixtures
/help/**/*.md
/locale
/static/third
/templates/**/*.md
/tools/setup/emoji/emoji_map.json
/web/third
/zerver/tests/fixtures
/zerver/webhooks/*/doc.md
/zerver/webhooks/*/fixtures

15
.readthedocs.yaml Normal file
View File

@@ -0,0 +1,15 @@
# https://docs.readthedocs.io/en/stable/config-file/v2.html
version: 2
build:
os: ubuntu-22.04
tools:
python: "3.10"
sphinx:
configuration: docs/conf.py
fail_on_warning: true
python:
install:
- requirements: requirements/docs.txt

View File

@@ -1 +0,0 @@
ignore-scripts true

View File

@@ -17,7 +17,7 @@ Come find us on the [development community chat](https://zulip.com/development-c
[![GitHub Actions build status](https://github.com/zulip/zulip/actions/workflows/zulip-ci.yml/badge.svg)](https://github.com/zulip/zulip/actions/workflows/zulip-ci.yml?query=branch%3Amain)
[![coverage status](https://img.shields.io/codecov/c/github/zulip/zulip/main.svg)](https://codecov.io/gh/zulip/zulip)
[![Mypy coverage](https://img.shields.io/badge/mypy-100%25-green.svg)][mypy-coverage]
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v0.json)](https://github.com/charliermarsh/ruff)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v1.json)](https://github.com/charliermarsh/ruff)
[![code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
[![GitHub release](https://img.shields.io/github/release/zulip/zulip.svg)](https://github.com/zulip/zulip/releases/latest)

View File

@@ -62,7 +62,7 @@ class CountStat:
else:
self.interval = self.time_increment
def __str__(self) -> str:
def __repr__(self) -> str:
return f"<CountStat: {self.property}>"
def last_successful_fill(self) -> Optional[datetime]:
@@ -288,6 +288,7 @@ def do_aggregate_to_summary_table(
## Utility functions called from outside counts.py ##
# called from zerver.actions; should not throw any errors
def do_increment_logging_stat(
zerver_object: Union[Realm, UserProfile, Stream],

View File

@@ -23,7 +23,7 @@ from zerver.lib.create_user import create_user
from zerver.lib.storage import static_path
from zerver.lib.stream_color import STREAM_ASSIGNMENT_COLORS
from zerver.lib.timestamp import floor_to_day
from zerver.lib.upload import upload_message_image_from_request
from zerver.lib.upload import upload_message_attachment_from_request
from zerver.models import Client, Realm, Recipient, Stream, Subscription, UserGroup, UserProfile
@@ -132,7 +132,7 @@ class Command(BaseCommand):
file_info = os.stat(IMAGE_FILE_PATH)
file_size = file_info.st_size
with open(IMAGE_FILE_PATH, "rb") as fp:
upload_message_image_from_request(UploadedFile(fp), shylock, file_size)
upload_message_attachment_from_request(UploadedFile(fp), shylock, file_size)
FixtureData = Mapping[Union[str, int, None], List[int]]

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("zerver", "0030_realm_org_type"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),

View File

@@ -2,7 +2,6 @@ from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("analytics", "0001_initial"),
]

View File

@@ -2,7 +2,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("analytics", "0002_remove_huddlecount"),
]

View File

@@ -2,7 +2,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("analytics", "0003_fillstate"),
]

View File

@@ -2,7 +2,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("analytics", "0004_add_subgroup"),
]

View File

@@ -2,7 +2,6 @@ from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("analytics", "0005_alter_field_size"),
]

View File

@@ -3,7 +3,6 @@ from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("analytics", "0006_add_subgroup_to_unique_constraints"),
]

View File

@@ -3,7 +3,6 @@ from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("zerver", "0050_userprofile_avatar_version"),
("analytics", "0007_remove_interval"),

View File

@@ -1,5 +1,5 @@
from django.db import migrations
from django.db.backends.postgresql.schema import BaseDatabaseSchemaEditor
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
from django.db.migrations.state import StateApps
@@ -21,7 +21,6 @@ def delete_messages_sent_to_stream_stat(
class Migration(migrations.Migration):
dependencies = [
("analytics", "0008_add_count_indexes"),
]

View File

@@ -1,5 +1,5 @@
from django.db import migrations
from django.db.backends.postgresql.schema import BaseDatabaseSchemaEditor
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
from django.db.migrations.state import StateApps
@@ -21,7 +21,6 @@ def clear_message_sent_by_message_type_values(
class Migration(migrations.Migration):
dependencies = [("analytics", "0009_remove_messages_to_stream_stat")]
operations = [

View File

@@ -1,5 +1,5 @@
from django.db import migrations
from django.db.backends.postgresql.schema import BaseDatabaseSchemaEditor
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
from django.db.migrations.state import StateApps
@@ -18,7 +18,6 @@ def clear_analytics_tables(apps: StateApps, schema_editor: BaseDatabaseSchemaEdi
class Migration(migrations.Migration):
dependencies = [
("analytics", "0010_clear_messages_sent_values"),
]

View File

@@ -5,7 +5,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("analytics", "0011_clear_analytics_tables"),
]

View File

@@ -4,7 +4,6 @@ from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("analytics", "0012_add_on_delete"),
]

View File

@@ -4,7 +4,6 @@ from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("analytics", "0013_remove_anomaly"),
]

View File

@@ -1,5 +1,5 @@
from django.db import migrations
from django.db.backends.postgresql.schema import BaseDatabaseSchemaEditor
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
from django.db.migrations.state import StateApps
from django.db.models import Count, Sum
@@ -55,7 +55,6 @@ def clear_duplicate_counts(apps: StateApps, schema_editor: BaseDatabaseSchemaEdi
class Migration(migrations.Migration):
dependencies = [
("analytics", "0014_remove_fillstate_last_modified"),
]

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("analytics", "0015_clear_duplicate_counts"),
]

View File

@@ -17,7 +17,7 @@ class FillState(models.Model):
state = models.PositiveSmallIntegerField()
def __str__(self) -> str:
return f"<FillState: {self.property} {self.end_time} {self.state}>"
return f"{self.property} {self.end_time} {self.state}"
# The earliest/starting end_time in FillState
@@ -59,7 +59,7 @@ class InstallationCount(BaseCount):
]
def __str__(self) -> str:
return f"<InstallationCount: {self.property} {self.subgroup} {self.value}>"
return f"{self.property} {self.subgroup} {self.value}"
class RealmCount(BaseCount):
@@ -82,7 +82,7 @@ class RealmCount(BaseCount):
index_together = ["property", "end_time"]
def __str__(self) -> str:
return f"<RealmCount: {self.realm} {self.property} {self.subgroup} {self.value}>"
return f"{self.realm!r} {self.property} {self.subgroup} {self.value}"
class UserCount(BaseCount):
@@ -108,7 +108,7 @@ class UserCount(BaseCount):
index_together = ["property", "realm", "end_time"]
def __str__(self) -> str:
return f"<UserCount: {self.user} {self.property} {self.subgroup} {self.value}>"
return f"{self.user!r} {self.property} {self.subgroup} {self.value}"
class StreamCount(BaseCount):
@@ -134,6 +134,4 @@ class StreamCount(BaseCount):
index_together = ["property", "realm", "end_time"]
def __str__(self) -> str:
return (
f"<StreamCount: {self.stream} {self.property} {self.subgroup} {self.value} {self.id}>"
)
return f"{self.stream!r} {self.property} {self.subgroup} {self.value} {self.id}"

View File

@@ -227,14 +227,13 @@ class AnalyticsTestCase(ZulipTestCase):
kwargs[arg_keys[i]] = values[i]
for key, value in defaults.items():
kwargs[key] = kwargs.get(key, value)
if table is not InstallationCount:
if "realm" not in kwargs:
if "user" in kwargs:
kwargs["realm"] = kwargs["user"].realm
elif "stream" in kwargs:
kwargs["realm"] = kwargs["stream"].realm
else:
kwargs["realm"] = self.default_realm
if table is not InstallationCount and "realm" not in kwargs:
if "user" in kwargs:
kwargs["realm"] = kwargs["user"].realm
elif "stream" in kwargs:
kwargs["realm"] = kwargs["stream"].realm
else:
kwargs["realm"] = self.default_realm
self.assertEqual(table.objects.filter(**kwargs).count(), 1)
self.assert_length(arg_values, table.objects.count())
@@ -1383,46 +1382,48 @@ class TestLoggingCountStats(AnalyticsTestCase):
stream, _ = self.create_stream_with_recipient()
invite_expires_in_minutes = 2 * 24 * 60
do_invite_users(
user,
["user1@domain.tld", "user2@domain.tld"],
[stream],
invite_expires_in_minutes=invite_expires_in_minutes,
)
with mock.patch("zerver.actions.invites.too_many_recent_realm_invites", return_value=False):
do_invite_users(
user,
["user1@domain.tld", "user2@domain.tld"],
[stream],
invite_expires_in_minutes=invite_expires_in_minutes,
)
assertInviteCountEquals(2)
# We currently send emails when re-inviting users that haven't
# turned into accounts, so count them towards the total
do_invite_users(
user,
["user1@domain.tld", "user2@domain.tld"],
[stream],
invite_expires_in_minutes=invite_expires_in_minutes,
)
with mock.patch("zerver.actions.invites.too_many_recent_realm_invites", return_value=False):
do_invite_users(
user,
["user1@domain.tld", "user2@domain.tld"],
[stream],
invite_expires_in_minutes=invite_expires_in_minutes,
)
assertInviteCountEquals(4)
# Test mix of good and malformed invite emails
try:
with self.assertRaises(InvitationError), mock.patch(
"zerver.actions.invites.too_many_recent_realm_invites", return_value=False
):
do_invite_users(
user,
["user3@domain.tld", "malformed"],
[stream],
invite_expires_in_minutes=invite_expires_in_minutes,
)
except InvitationError:
pass
assertInviteCountEquals(4)
# Test inviting existing users
try:
with self.assertRaises(InvitationError), mock.patch(
"zerver.actions.invites.too_many_recent_realm_invites", return_value=False
):
do_invite_users(
user,
["first@domain.tld", "user4@domain.tld"],
[stream],
invite_expires_in_minutes=invite_expires_in_minutes,
)
except InvitationError:
pass
assertInviteCountEquals(5)
# Revoking invite should not give you credit
@@ -1432,7 +1433,8 @@ class TestLoggingCountStats(AnalyticsTestCase):
assertInviteCountEquals(5)
# Resending invite should cost you
do_resend_user_invite_email(assert_is_not_none(PreregistrationUser.objects.first()))
with mock.patch("zerver.actions.invites.too_many_recent_realm_invites", return_value=False):
do_resend_user_invite_email(assert_is_not_none(PreregistrationUser.objects.first()))
assertInviteCountEquals(6)
def test_messages_read_hour(self) -> None:

View File

@@ -179,20 +179,20 @@ class TestGetChartData(ZulipTestCase):
"everyone": {
"Public streams": self.data(100),
"Private streams": self.data(0),
"Private messages": self.data(101),
"Group private messages": self.data(0),
"Direct messages": self.data(101),
"Group direct messages": self.data(0),
},
"user": {
"Public streams": self.data(200),
"Private streams": self.data(201),
"Private messages": self.data(0),
"Group private messages": self.data(0),
"Direct messages": self.data(0),
"Group direct messages": self.data(0),
},
"display_order": [
"Private messages",
"Direct messages",
"Public streams",
"Private streams",
"Group private messages",
"Group direct messages",
],
"result": "success",
},
@@ -287,8 +287,8 @@ class TestGetChartData(ZulipTestCase):
{
"Public streams": [0],
"Private streams": [0],
"Private messages": [0],
"Group private messages": [0],
"Direct messages": [0],
"Group direct messages": [0],
},
)
self.assertEqual(
@@ -296,8 +296,8 @@ class TestGetChartData(ZulipTestCase):
{
"Public streams": [0],
"Private streams": [0],
"Private messages": [0],
"Group private messages": [0],
"Direct messages": [0],
"Group direct messages": [0],
},
)

View File

@@ -8,13 +8,10 @@ from django.utils.timezone import now as timezone_now
from corporate.lib.stripe import add_months, update_sponsorship_status
from corporate.models import Customer, CustomerPlan, LicenseLedger, get_customer_by_realm
from zerver.actions.invites import do_create_multiuse_invite_link
from zerver.actions.realm_settings import (
do_change_realm_org_type,
do_send_realm_reactivation_email,
do_set_realm_property,
)
from zerver.actions.realm_settings import do_change_realm_org_type, do_send_realm_reactivation_email
from zerver.actions.user_settings import do_change_user_setting
from zerver.lib.test_classes import ZulipTestCase
from zerver.lib.test_helpers import reset_emails_in_zulip_realm
from zerver.lib.test_helpers import reset_email_visibility_to_everyone_in_zulip_realm
from zerver.models import (
MultiuseInvite,
PreregistrationUser,
@@ -31,7 +28,7 @@ if TYPE_CHECKING:
class TestSupportEndpoint(ZulipTestCase):
def test_search(self) -> None:
reset_emails_in_zulip_realm()
reset_email_visibility_to_everyone_in_zulip_realm()
lear_user = self.lear_user("king")
lear_user.is_staff = True
lear_user.save(update_fields=["is_staff"])
@@ -218,10 +215,10 @@ class TestSupportEndpoint(ZulipTestCase):
self.login("iago")
do_set_realm_property(
get_realm("zulip"),
do_change_user_setting(
self.example_user("hamlet"),
"email_address_visibility",
Realm.EMAIL_ADDRESS_VISIBILITY_NOBODY,
UserProfile.EMAIL_ADDRESS_VISIBILITY_NOBODY,
acting_user=None,
)
@@ -305,7 +302,9 @@ class TestSupportEndpoint(ZulipTestCase):
check_zulip_realm_query_result(result)
email = self.nonreg_email("alice")
self.client_post("/new/", {"email": email})
self.submit_realm_creation_form(
email, realm_subdomain="zuliptest", realm_name="Zulip test"
)
result = get_check_query_result(email, 1)
check_realm_creation_query_result(result, email)
@@ -345,7 +344,7 @@ class TestSupportEndpoint(ZulipTestCase):
"""
Unspecified org type is special in that it is marked to not be shown
on the registration page (because organitions are not meant to be able to choose it),
but should be correctly shown at the /support endpoint.
but should be correctly shown at the /support/ endpoint.
"""
realm = get_realm("zulip")
@@ -628,7 +627,7 @@ class TestSupportEndpoint(ZulipTestCase):
"/activity/support",
{
"realm_id": f"{iago.realm_id}",
"downgrade_method": "downgrade_at_billing_cycle_end",
"modify_plan": "downgrade_at_billing_cycle_end",
},
)
m.assert_called_once_with(get_realm("zulip"))
@@ -643,7 +642,7 @@ class TestSupportEndpoint(ZulipTestCase):
"/activity/support",
{
"realm_id": f"{iago.realm_id}",
"downgrade_method": "downgrade_now_without_additional_licenses",
"modify_plan": "downgrade_now_without_additional_licenses",
},
)
m.assert_called_once_with(get_realm("zulip"))
@@ -659,7 +658,7 @@ class TestSupportEndpoint(ZulipTestCase):
"/activity/support",
{
"realm_id": f"{iago.realm_id}",
"downgrade_method": "downgrade_now_void_open_invoices",
"modify_plan": "downgrade_now_void_open_invoices",
},
)
m1.assert_called_once_with(get_realm("zulip"))
@@ -668,6 +667,17 @@ class TestSupportEndpoint(ZulipTestCase):
["zulip downgraded and voided 1 open invoices"], result
)
with mock.patch("analytics.views.support.switch_realm_from_standard_to_plus_plan") as m:
result = self.client_post(
"/activity/support",
{
"realm_id": f"{iago.realm_id}",
"modify_plan": "upgrade_to_plus",
},
)
m.assert_called_once_with(get_realm("zulip"))
self.assert_in_success_response(["zulip upgraded to Plus"], result)
def test_scrub_realm(self) -> None:
cordelia = self.example_user("cordelia")
lear_realm = get_realm("lear")

View File

@@ -1,7 +1,6 @@
import re
import sys
from datetime import datetime
from html import escape
from typing import Any, Collection, Dict, List, Optional, Sequence
from urllib.parse import urlencode
@@ -29,7 +28,6 @@ if settings.BILLING_ENABLED:
def make_table(
title: str, cols: Sequence[str], rows: Sequence[Any], has_row_class: bool = False
) -> str:
if not has_row_class:
def fix_row(row: Any) -> Dict[str, Any]:
@@ -64,46 +62,42 @@ def user_activity_link(email: str, user_profile_id: int) -> Markup:
from analytics.views.user_activity import get_user_activity
url = reverse(get_user_activity, kwargs=dict(user_profile_id=user_profile_id))
email_link = f'<a href="{escape(url)}">{escape(email)}</a>'
return Markup(email_link)
return Markup('<a href="{url}">{email}</a>').format(url=url, email=email)
def realm_activity_link(realm_str: str) -> Markup:
from analytics.views.realm_activity import get_realm_activity
url = reverse(get_realm_activity, kwargs=dict(realm_str=realm_str))
realm_link = f'<a href="{escape(url)}">{escape(realm_str)}</a>'
return Markup(realm_link)
return Markup('<a href="{url}">{realm_str}</a>').format(url=url, realm_str=realm_str)
def realm_stats_link(realm_str: str) -> Markup:
from analytics.views.stats import stats_for_realm
url = reverse(stats_for_realm, kwargs=dict(realm_str=realm_str))
stats_link = f'<a href="{escape(url)}"><i class="fa fa-pie-chart"></i></a>'
return Markup(stats_link)
return Markup('<a href="{url}"><i class="fa fa-pie-chart"></i></a>').format(url=url)
def realm_support_link(realm_str: str) -> Markup:
support_url = reverse("support")
query = urlencode({"q": realm_str})
url = append_url_query_string(support_url, query)
support_link = f'<a href="{escape(url)}">{escape(realm_str)}</a>'
return Markup(support_link)
return Markup('<a href="{url}">{realm_str}</a>').format(url=url, realm_str=realm_str)
def realm_url_link(realm_str: str) -> Markup:
url = get_realm(realm_str).uri
realm_link = f'<a href="{escape(url)}"><i class="fa fa-home"></i></a>'
return Markup(realm_link)
return Markup('<a href="{url}"><i class="fa fa-home"></i></a>').format(url=url)
def remote_installation_stats_link(server_id: int, hostname: str) -> Markup:
from analytics.views.stats import stats_for_remote_installation
url = reverse(stats_for_remote_installation, kwargs=dict(remote_server_id=server_id))
stats_link = f'<a href="{escape(url)}"><i class="fa fa-pie-chart"></i>{escape(hostname)}</a>'
return Markup(stats_link)
return Markup('<a href="{url}"><i class="fa fa-pie-chart"></i>{hostname}</a>').format(
url=url, hostname=hostname
)
def get_user_activity_summary(records: Collection[UserActivity]) -> Dict[str, Any]:

View File

@@ -1,6 +1,7 @@
import itertools
import time
from collections import defaultdict
from contextlib import suppress
from datetime import datetime, timedelta
from typing import Callable, Dict, List, Optional, Sequence, Tuple, Union
@@ -37,7 +38,7 @@ if settings.BILLING_ENABLED:
)
def get_realm_day_counts() -> Dict[str, Dict[str, str]]:
def get_realm_day_counts() -> Dict[str, Dict[str, Markup]]:
query = SQL(
"""
select
@@ -77,7 +78,7 @@ def get_realm_day_counts() -> Dict[str, Dict[str, str]]:
min_cnt = min(raw_cnts[1:])
max_cnt = max(raw_cnts[1:])
def format_count(cnt: int, style: Optional[str] = None) -> str:
def format_count(cnt: int, style: Optional[str] = None) -> Markup:
if style is not None:
good_bad = style
elif cnt == min_cnt:
@@ -87,9 +88,11 @@ def get_realm_day_counts() -> Dict[str, Dict[str, str]]:
else:
good_bad = "neutral"
return f'<td class="number {good_bad}">{cnt}</td>'
return Markup('<td class="number {good_bad}">{cnt}</td>').format(
good_bad=good_bad, cnt=cnt
)
cnts = format_count(raw_cnts[0], "neutral") + "".join(map(format_count, raw_cnts[1:]))
cnts = format_count(raw_cnts[0], "neutral") + Markup().join(map(format_count, raw_cnts[1:]))
result[string_id] = dict(cnts=cnts)
return result
@@ -241,10 +244,8 @@ def realm_summary_table(realm_minutes: Dict[str, float]) -> str:
hours = minutes / 60.0
total_hours += hours
row["hours"] = str(int(hours))
try:
with suppress(Exception):
row["hours_per_user"] = "{:.1f}".format(hours / row["dau_count"])
except Exception:
pass
# formatting
for row in rows:
@@ -305,7 +306,8 @@ def user_activity_intervals() -> Tuple[Markup, Dict[str, float]]:
day_end = timestamp_to_datetime(time.time())
day_start = day_end - timedelta(hours=24)
output = "Per-user online duration for the last 24 hours:\n"
output = Markup()
output += "Per-user online duration for the last 24 hours:\n"
total_duration = timedelta(0)
all_intervals = (
@@ -336,7 +338,7 @@ def user_activity_intervals() -> Tuple[Markup, Dict[str, float]]:
for string_id, realm_intervals in itertools.groupby(all_intervals, by_string_id):
realm_duration = timedelta(0)
output += f"<hr>{string_id}\n"
output += Markup("<hr>") + f"{string_id}\n"
for email, intervals in itertools.groupby(realm_intervals, by_email):
duration = timedelta(0)
for interval in intervals:
@@ -353,7 +355,7 @@ def user_activity_intervals() -> Tuple[Markup, Dict[str, float]]:
output += f"\nTotal duration: {total_duration}\n"
output += f"\nTotal duration in minutes: {total_duration.total_seconds() / 60.}\n"
output += f"Total duration amortized to a month: {total_duration.total_seconds() * 30. / 60.}"
content = Markup("<pre>" + output + "</pre>")
content = Markup("<pre>{}</pre>").format(output)
return content, realm_minutes

View File

@@ -3,7 +3,7 @@ from datetime import datetime
from typing import Any, Dict, List, Optional, Set, Tuple
from django.db import connection
from django.db.models.query import QuerySet
from django.db.models import QuerySet
from django.http import HttpRequest, HttpResponse, HttpResponseNotFound
from django.shortcuts import render
from django.utils.timezone import now as timezone_now

View File

@@ -4,7 +4,7 @@ from datetime import datetime, timedelta, timezone
from typing import Any, Dict, List, Optional, Tuple, Type, TypeVar, Union, cast
from django.conf import settings
from django.db.models.query import QuerySet
from django.db.models import QuerySet
from django.http import HttpRequest, HttpResponse, HttpResponseNotFound
from django.shortcuts import render
from django.utils import translation
@@ -293,8 +293,8 @@ def get_chart_data(
stats[0]: {
"public_stream": _("Public streams"),
"private_stream": _("Private streams"),
"private_message": _("Private messages"),
"huddle_message": _("Group private messages"),
"private_message": _("Direct messages"),
"huddle_message": _("Group direct messages"),
}
}
labels_sort_function = lambda data: sort_by_totals(data["everyone"])

View File

@@ -1,4 +1,5 @@
import urllib
from contextlib import suppress
from dataclasses import dataclass
from datetime import timedelta
from decimal import Decimal
@@ -34,6 +35,7 @@ from zerver.lib.subdomains import get_subdomain_from_hostname
from zerver.lib.validator import check_bool, check_string_in, to_decimal, to_non_negative_int
from zerver.models import (
MultiuseInvite,
PreregistrationRealm,
PreregistrationUser,
Realm,
RealmReactivationStatus,
@@ -52,6 +54,7 @@ if settings.BILLING_ENABLED:
get_discount_for_realm,
get_latest_seat_count,
make_end_of_cycle_updates_if_needed,
switch_realm_from_standard_to_plus_plan,
update_billing_method_of_current_plan,
update_sponsorship_status,
void_all_open_invoices,
@@ -119,10 +122,11 @@ def get_confirmations(
return confirmation_dicts
VALID_DOWNGRADE_METHODS = [
VALID_MODIFY_PLAN_METHODS = [
"downgrade_at_billing_cycle_end",
"downgrade_now_without_additional_licenses",
"downgrade_now_void_open_invoices",
"upgrade_to_plus",
]
VALID_STATUS_VALUES = [
@@ -158,8 +162,8 @@ def support(
),
sponsorship_pending: Optional[bool] = REQ(default=None, json_validator=check_bool),
approve_sponsorship: bool = REQ(default=False, json_validator=check_bool),
downgrade_method: Optional[str] = REQ(
default=None, str_validator=check_string_in(VALID_DOWNGRADE_METHODS)
modify_plan: Optional[str] = REQ(
default=None, str_validator=check_string_in(VALID_MODIFY_PLAN_METHODS)
),
scrub_realm: bool = REQ(default=False, json_validator=check_bool),
query: Optional[str] = REQ("q", default=None),
@@ -249,23 +253,26 @@ def support(
elif approve_sponsorship:
do_approve_sponsorship(realm, acting_user=acting_user)
context["success_message"] = f"Sponsorship approved for {realm.string_id}"
elif downgrade_method is not None:
if downgrade_method == "downgrade_at_billing_cycle_end":
elif modify_plan is not None:
if modify_plan == "downgrade_at_billing_cycle_end":
downgrade_at_the_end_of_billing_cycle(realm)
context[
"success_message"
] = f"{realm.string_id} marked for downgrade at the end of billing cycle"
elif downgrade_method == "downgrade_now_without_additional_licenses":
elif modify_plan == "downgrade_now_without_additional_licenses":
downgrade_now_without_creating_additional_invoices(realm)
context[
"success_message"
] = f"{realm.string_id} downgraded without creating additional invoices"
elif downgrade_method == "downgrade_now_void_open_invoices":
elif modify_plan == "downgrade_now_void_open_invoices":
downgrade_now_without_creating_additional_invoices(realm)
voided_invoices_count = void_all_open_invoices(realm)
context[
"success_message"
] = f"{realm.string_id} downgraded and voided {voided_invoices_count} open invoices"
elif modify_plan == "upgrade_to_plus":
switch_realm_from_standard_to_plus_plan(realm)
context["success_message"] = f"{realm.string_id} upgraded to Plus"
elif scrub_realm:
do_scrub_realm(realm, acting_user=acting_user)
context["success_message"] = f"{realm.string_id} scrubbed."
@@ -285,10 +292,8 @@ def support(
if parse_result.port:
hostname = f"{hostname}:{parse_result.port}"
subdomain = get_subdomain_from_hostname(hostname)
try:
with suppress(Realm.DoesNotExist):
realms.add(get_realm(subdomain))
except Realm.DoesNotExist:
pass
except ValidationError:
users.update(UserProfile.objects.filter(full_name__iexact=key_word))
@@ -304,11 +309,20 @@ def support(
user.id for user in PreregistrationUser.objects.filter(email__in=key_words)
]
confirmations += get_confirmations(
[Confirmation.USER_REGISTRATION, Confirmation.INVITATION, Confirmation.REALM_CREATION],
[Confirmation.USER_REGISTRATION, Confirmation.INVITATION],
preregistration_user_ids,
hostname=request.get_host(),
)
preregistration_realm_ids = [
user.id for user in PreregistrationRealm.objects.filter(email__in=key_words)
]
confirmations += get_confirmations(
[Confirmation.REALM_CREATION],
preregistration_realm_ids,
hostname=request.get_host(),
)
multiuse_invite_ids = [
invite.id for invite in MultiuseInvite.objects.filter(realm__in=realms)
]

View File

@@ -1,7 +1,7 @@
from typing import Any, Dict, List, Tuple
from django.conf import settings
from django.db.models.query import QuerySet
from django.db.models import QuerySet
from django.http import HttpRequest, HttpResponse
from django.shortcuts import render

View File

@@ -19,8 +19,8 @@ Anyone with your API key can impersonate you, so be doubly careful with it.
1. Under **API key**, click **Show/change your API key**.
1. Enter your password, and click **Get API key**. If you never had a
password, click **Never had one? Forgotten it?** and follow the
1. Enter your password, and click **Get API key**. If you don't know your
password, click **reset it** and follow the
instructions from there.
1. Copy your API key.

View File

@@ -8,9 +8,9 @@ changelog][server-changelog].
The API feature levels system used in this changelog is designed to
make it possible to write API clients, such as the Zulip mobile and
terminal apps, that work with a wide range of Zulip server
versions. Every change to the Zulip API is recorded both here and in
**Changes** entries in the API documentation for the modified
endpoint(s).
versions. Every change to the Zulip API is recorded briefly here and
with full details in **Changes** entries in the API documentation for
the modified endpoint(s).
When using an API endpoint whose behavior has changed, Zulip API
clients should check the `zulip_feature_level` field, present in the
@@ -20,6 +20,191 @@ format used by the Zulip server that they are interacting with.
## Changes in Zulip 7.0
**Feature level 179**:
* [`POST /scheduled_messages`](/api/create-or-update-scheduled-message):
Added new endpoint to create and edit scheduled messages.
* [`GET /events`](/api/get-events)
Added `scheduled_messages` events sent to clients when a user creates,
edits or deletes scheduled messages.
* [`POST /register`](/api/register-queue):
Added an optional `scheduled_messages` field to that includes all
of the undelivered scheduled messages for the current user.
**Feature level 178**
* `POST users/me/presence`, [`POST /register`](/api/register-queue),
[`GET /events`](/api/get-events), `GET /realm/presence`, `GET
/users/<user_id_or_email>/presence`: The server no longer stores
which client submitted presence data, and presence responses from
the server will always contain the `aggregated` and `website` keys.
**Feature level 177**
* [`GET /messages`](/api/get-messages),
[`GET /messages/matches_narrow`](/api/check-messages-match-narrow),
[`POST /message/flags/narrow`](/api/update-message-flags-for-narrow),
[`POST /register`](/api/register-queue):
Added support for three [search/narrow filters](/api/construct-narrow)
related to direct messages: `is:dm`, `dm` and `dm-including`.
The `dm` operator replaces and deprecates the `pm-with` operator.
The `is:dm` filter replaces and deprecates the `is:private` filter.
The `dm-including` operator replaces and deprecates the `group-pm-with`
operator. Because existing Zulip messages may have links with these
legacy filters, they are still supported for backwards-compatibility.
**Feature level 176**
* [`POST /realm/filters`](/api/add-linkifier), [`realm/filters/<int:filter_id>`](/api/update-linkifier):
The parameter `url_format_string` is replaced by `url_template`.
The linkifiers now accept only [RFC 6570][rfc6570] compliant URL Templates.
The old URL format strings are no longer supported.
* [`GET /events`](/api/get-events), [`POST /register`](/api/register-queue):
The key `url_format_string` is replaced by `url_template` for the `realm_linkifiers`
event type. For backwards-compatibility, clients that do not support the
`linkifier_url_template`
[client capability](/api/register-queue#parameter-client_capabilities)
will get an empty list in the response of `/register` and not receive `realm_linkifiers`
events. Unconditionally, the deprecated event type `realm_filters` gives an empty list in the
response of `/register` and is no longer sent the clients otherwise.
**Feature level 175**
* [`POST /register`](/api/register-queue), [`PATCH /settings`](/api/update-settings),
[`PATCH /realm/user_settings_defaults`](/api/update-realm-user-settings-defaults):
Added new user setting `web_mark_read_on_scroll_policy` . This determines whether to mark
messages as read or not as the client scrolls through their feed.
**Feature level 174**:
* [`POST /typing`](/api/set-typing-status), [`POST /messages`](/api/send-message):
Added `"direct"` as the preferred way to indicate a direct message for the
`type` parameter, deprecating the original `"private"`. While `"private"`
is still supported for direct messages, clients are encouraged to use
the modern convention with servers that support it, because support for
`"private"` may eventually be removed.
**Feature level 173**:
* [`GET /scheduled_messages`](/api/get-scheduled-messages), [`DELETE
/scheduled_messages/<int:scheduled_message_id>`](/api/delete-scheduled-message):
Added new endpoints to fetch and delete scheduled messages.
**Feature level 172**
* [`PATCH /messages/{message_id}`](/api/update-message): Topic editing
restrictions now apply to messages without a topic as well.
* [`PATCH /messages/{message_id}`](/api/update-message): The endpoint
now returns an error when users, other than organization administrators
and moderators, try to move messages that have passed the time limit
using `change_all` value for `propagate_mode` parameter.
**Feature level 171**:
* [`POST /fetch_api_key`](/api/fetch-api-key),
[`POST /dev_fetch_api_key`](/api/dev-fetch-api-key): The return values
for these endpoints now include the unique ID of the user who owns the
API key.
**Feature level 170**
* [`POST /user_topics`](/api/update-user-topic):
Added a new endpoint to update the personal preferences for a topic.
**Feature level 169**
* [`PATCH /users/me/subscriptions/muted_topics`](/api/mute-topic):
Trying to mute a topic that is already muted or unmute a topic
that was not previously muted now results in a success response
rather than an error.
**Feature level 168**
* [`PATCH /realm/user_settings_defaults`](/api/update-realm-user-settings-defaults),
[`POST /register`](/api/register-queue),
[`PATCH /settings`](/api/update-settings): Replaced the `realm_name_in_notifications`
boolean field with an integer field `realm_name_in_email_notifications_policy`.
**Feature level 167**
* [All REST API endpoints](/api/rest-error-handling#ignored-parameters):
Implemented `ignored_parameters_unsupported` as a possible return value
in the JSON success response for all endpoints. This value is a array
of any parameters that were sent in the request by the client that are
not supported by the endpoint. Previously, unsupported parameters were
silently ignored, except in the subset of endpoints which already
supported this return value; see feature levels 111, 96 and 78.
**Feature level 166**
* [`POST /messages`](/api/send-message): Eliminated the undocumented
`realm_str` parameter. This parameter was already redundant due to
it needing to match the realm of the user making the request, otherwise
returning an authorization error. With this, the parameter is removed,
meaning that if provided in the API request, it will be ignored.
**Feature level 165**
* [`PATCH /user_groups/{user_group_id}`](/api/update-user-group): The
`name` and `description` parameters are now optional.
**Feature level 164**
* [`POST /register`](/api/register-queue): Added the
`server_presence_ping_interval_seconds` and `server_presence_offline_threshold_seconds`
attributes.
**Feature level 163**
* [`GET /users`](/api/get-users), [`GET /users/{user_id}`](/api/get-user),
[`GET /users/{email}`](/api/get-user-by-email),
[`GET /users/me`](/api/get-own-user) and [`GET /events`](/api/get-events):
The `delivery_email` field is always present in user objects, including the case
when `email_address_visibility` is set to `EMAIL_ADDRESS_VISIBILITY_EVERYONE`,
with the value being `None` if the requestor does not have access to the user's
real email. For bot users, the `delivery_email` field is always set to the real email.
* [`GET /events`](/api/get-events): Event for updating `delivery_email` is now sent to
all users who have access to it and is also sent when `email_address_visibility` setting
changes.
* [`POST /register`](/api/register-queue), [`PATCH
/settings`](/api/update-settings), [`PATCH
/realm/user_settings_defaults`](/api/update-realm-user-settings-defaults): Added
user setting `email_address_visibility` which will replace the existing realm
setting `email_address_visibility`.
* [`POST /register`](/api/register-queue), `PATCH /realm`: Removed realm-level
`email_address_visibility` setting.
**Feature level 162**
* [`POST /register`](/api/register-queue), [`GET /events`](/api/get-events),
`PATCH /realm`: Added new `move_messages_within_stream_limit_seconds` setting.
* [`POST /register`](/api/register-queue), [`GET /events`](/api/get-events),
`PATCH /realm`: Added new `move_messages_between_streams_limit_seconds` setting.
* [`PATCH /messages/{message_id}`](/api/update-message): Time limit to edit
topics, for users other than administrators and moderators, can now be
configured using `move_messages_within_stream_limit_seconds` setting.
* [`PATCH /messages/{message_id}`](/api/update-message): Time limit to move
messages between streams, for users other than administrators and moderators,
can now be configured using `move_messages_between_streams_limit_seconds` setting.
**Feature level 161**
* [`PATCH /streams/{stream_id}`](/api/update-stream): Added
`can_remove_subscribers_group_id` parameter to support
changing `can_remove_subscribers_group` setting.
* [`POST /users/me/subscriptions`](/api/subscribe): Added
`can_remove_subscribers_group_id` parameter to set
`can_remove_subscribers_group` setting while creating
streams.
**Feature level 160**
* `POST /api/v1/jwt/fetch_api_key`: New API endpoint to fetch API
keys using JSON Web Token (JWT) authentication.
* `accounts/login/jwt/`: Adjusted format of requests to this
previously undocumented, optional endpoint for
JWT authentication log in support.
**Feature level 159**
* [`POST /register`](/api/register-queue), [`GET /events`](/api/get-events),
@@ -75,7 +260,9 @@ No changes; feature level used for Zulip 6.0 release.
* [`PATCH /messages/{message_id}`](/api/update-message): The
`send_notification_to_old_thread` and
`send_notification_to_new_thread` parameters are now respected when
moving a topic within a stream.
moving a topic within a stream. The default value for
`send_notification_to_old_thread` was changed from `true` to
`false`.
**Feature level 151**
@@ -90,7 +277,7 @@ No changes; feature level used for Zulip 6.0 release.
`allow_message_editing`, `message_content_edit_limit_seconds` and
`edit_topic_policy` settings, whereas previously one event was sent including
all of these setting values irrespective of which of them were actually changed.
* [`PATCH /realm`]: Only changed settings are included in the response data now
* `PATCH /realm`: Only changed settings are included in the response data now
when changing `allow_message_editing`, `edit_topic_policy` and
`message_content_edit_limit_seconds` settings, instead of including all the
fields even if one of these settings was changed.
@@ -104,7 +291,7 @@ No changes; feature level used for Zulip 6.0 release.
**Feature level 148**
* [`POST /users/me/status`](/api/update-status):
* [`POST /users/me/status`](/api/update-status),
[`POST /register`](/api/register-queue), [`GET /events`](/api/get-events):
The user status `away` field/parameter is deprecated, and as of this
feature level are a legacy way to access the user's `presence_enabled`
@@ -904,8 +1091,8 @@ field with an integer field `invite_to_realm_policy`.
**Feature level 43**
* [`GET /users/{user_id_or_email}/presence`]: Added support for
passing the `user_id` to identify the target user.
* [`GET /users/{user_id_or_email}/presence`](/api/get-user-presence):
Added support for passing the `user_id` to identify the target user.
**Feature level 42**
@@ -1324,3 +1511,4 @@ No changes; feature level used for Zulip 3.0 release.
[server-changelog]: https://zulip.readthedocs.io/en/latest/overview/changelog.html
[release-lifecycle]: https://zulip.readthedocs.io/en/latest/overview/release-lifecycle.html
[rfc6570]: https://www.rfc-editor.org/rfc/rfc6570.html

View File

@@ -45,6 +45,24 @@ operator, search the current user's personal message history. See
[searching shared history](/help/search-for-messages#searching-shared-history)
for details.
**Changes**: In Zulip 7.0 (feature level 177), support was added
for three filters related to direct messages: `is:dm`, `dm` and
`dm-including`. The `dm` operator replaced and deprecated the
`pm-with` operator. The `is:dm` filter replaced and deprecated
the `is:private` filter. The `dm-including` operator replaced and
deprecated the `group-pm-with` operator.
The `dm-including` and `group-pm-with` operators return slightly
different results. For example, `dm-including:1234` returns all
direct messages (1-on-1 and group) that include the current user
and the user with the unique user ID of `1234`. On the other hand,
`group-pm-with:1234` returned only group direct messages that included
the current user and the user with the unique user ID of `1234`.
Both `dm` and `is:dm` are aliases of `pm-with` and `is:private`
respectively, and return the same exact results that the deprecated
filters did.
## Narrows that use IDs
The `near` and `id` operators, documented in the help center, use message
@@ -59,12 +77,12 @@ help center because they are primarily useful to API clients:
* `stream:1234`: Search messages sent to the stream with ID `1234`.
* `sender:1234`: Search messages sent by user ID `1234`.
* `pm-with:1234`: Search the private message conversation between
* `dm:1234`: Search the direct message conversation between
you and user ID `1234`.
* `pm-with:1234,5678`: Search the private message conversation between
* `dm:1234,5678`: Search the direct message conversation between
you, user ID `1234`, and user ID `5678`.
* `group-pm-with:1234`: Search all group private messages that
include you and user ID `1234`.
* `dm-including:1234`: Search all direct messages (1-on-1 and group)
that include you and user ID `1234`.
The operands for these search options must be encoded either as an
integer ID or a JSON list of integer IDs. For example, to query
@@ -74,7 +92,7 @@ and user 5678, the correct JSON-encoded query is:
```json
[
{
"operator": "pm-with",
"operator": "dm",
"operand": [1234, 5678]
},
{

View File

@@ -0,0 +1,67 @@
{generate_api_header(/scheduled_messages:post)}
## Usage examples
{start_tabs}
{generate_code_example(python)|/scheduled_messages:post|example}
{generate_code_example(javascript)|/scheduled_messages:post|example}
{tab|curl}
``` curl
# Create a scheduled stream message
curl -X POST {{ api_url }}/v1/scheduled_messages \
-u BOT_EMAIL_ADDRESS:BOT_API_KEY \
--data-urlencode type=stream \
--data-urlencode to=9 \
--data-urlencode topic=Hello \
--data-urlencode 'content=Thank you for' \
--data-urlencode scheduled_delivery_timestamp=3165826990
# Update a scheduled stream message
curl -X POST {{ api_url }}/v1/scheduled_messages \
-u BOT_EMAIL_ADDRESS:BOT_API_KEY \
--data-urlencode type=stream \
--data-urlencode to=9 \
--data-urlencode 'topic=Welcome aboard' \
--data-urlencode 'content=Thank you for the help!' \
--data-urlencode scheduled_delivery_timestamp=3165856990 \
--data-urlencode scheduled_message_id=1
# Create a scheduled direct message
curl -X POST {{ api_url }}/v1/messages \
-u BOT_EMAIL_ADDRESS:BOT_API_KEY \
--data-urlencode type=direct \
--data-urlencode 'to=[9, 10]' \
--data-urlencode 'content=Can we meet tomorrow?' \
--data-urlencode scheduled_delivery_timestamp=3165826990
# Update a scheduled direct message
curl -X POST {{ api_url }}/v1/messages \
-u BOT_EMAIL_ADDRESS:BOT_API_KEY \
--data-urlencode type=direct \
--data-urlencode 'to=[9, 10, 11]' \
--data-urlencode 'content=Can we meet tomorrow?' \
--data-urlencode scheduled_delivery_timestamp=3165856990 \
--data-urlencode scheduled_message_id=2
```
{end_tabs}
## Parameters
{generate_api_arguments_table|zulip.yaml|/scheduled_messages:post}
{generate_parameter_description(/scheduled_messages:post)}
## Response
{generate_return_values_table|zulip.yaml|/scheduled_messages:post}
{generate_response_description(/scheduled_messages:post)}
#### Example response(s)
{generate_code_example|/scheduled_messages:post|fixture}

80
api_docs/http-headers.md Normal file
View File

@@ -0,0 +1,80 @@
# HTTP headers
This page documents the HTTP headers used by the Zulip API.
Most important is that API clients authenticate to the server using
HTTP Basic authentication. If you're using the official [Python or
JavaScript bindings](/api/installation-instructions), this is taken
care of when you configure said bindings.
Otherwise, see the `curl` example on each endpoint's documentation
page, which details the request format.
Documented below are additional HTTP headers and header conventions
generally used by Zulip:
## The `User-Agent` header
Clients are not required to pass a `User-Agent` HTTP header, but we
highly recommend doing so when writing an integration. It's easy to do
and it can help save time when debugging issues related to an API
client.
If provided, the Zulip server will parse the `User-Agent` HTTP header
in order to identify specific clients and integrations. This
information is used by the server for logging, [usage
statistics](/help/analytics), and on rare occasions, for
backwards-compatibility logic to preserve support for older versions
of official clients.
Official Zulip clients and integrations use a `User-Agent` that starts
with something like `ZulipMobile/20.0.103 `, encoding the name of the
application and it's version.
Zulip's official API bindings have reasonable defaults for
`User-Agent`. For example, the official Zulip Python bindings have a
default `User-Agent` starting with `ZulipPython/{version}`, where
`version` is the version of the library.
You can give your bot/integration its own name by passing the `client`
parameter when initializing the Python bindings. For example, the
official Zulip Nagios integration is initialized like this:
``` python
client = zulip.Client(
config_file=opts.config, client=f"ZulipNagios/{VERSION}"
)
```
If you are working on an integration that you plan to share outside
your organization, you can get help picking a good name in
`#integrations` in the [Zulip development
community](https://zulip.com/development-community).
## Rate-limiting response headers
To help clients avoid exceeding rate limits, Zulip sets the following
HTTP headers in all API responses:
* `X-RateLimit-Remaining`: The number of additional requests of this
type that the client can send before exceeding its limit.
* `X-RateLimit-Limit`: The limit that would be applicable to a client
that had not made any recent requests of this type. This is useful
for designing a client's burst behavior so as to avoid ever reaching
a rate limit.
* `X-RateLimit-Reset`: The time at which the client will no longer
have any rate limits applied to it (and thus could do a burst of
`X-RateLimit-Limit` requests).
[Zulip's rate limiting rules are configurable][rate-limiting-rules],
and can vary by server and over time. The default configuration
currently limits:
* Every user is limited to 200 total API requests per minute.
* Separate, much lower limits for authentication/login attempts.
When the Zulip server has configured multiple rate limits that apply
to a given request, the values returned will be for the strictest
limit.
[rate-limiting-rules]: https://zulip.readthedocs.io/en/latest/production/security-model.html#rate-limiting

View File

@@ -17,6 +17,12 @@
* [Mark messages as read in bulk](/api/mark-all-as-read)
* [Get a message's read receipts](/api/get-read-receipts)
#### Scheduled messages
* [Get scheduled messages](/api/get-scheduled-messages)
* [Create or edit a scheduled message](/api/create-or-update-scheduled-message)
* [Delete a scheduled message](/api/delete-scheduled-message)
#### Drafts
* [Get drafts](/api/get-drafts)
@@ -40,6 +46,7 @@
* [Archive a stream](/api/archive-stream)
* [Get topics in a stream](/api/get-stream-topics)
* [Topic muting](/api/mute-topic)
* [Update personal preferences for a topic](/api/update-user-topic)
* [Delete a topic](/api/delete-topic)
* [Add a default stream](/api/add-default-stream)
* [Remove a default stream](/api/remove-default-stream)

View File

@@ -16,7 +16,7 @@ Zulip:
* Adding an incoming webhook integration (detailed on this page),
where all the logic for formatting the Zulip messages lives in the
Zulip server. This is how most of [Zulip's official
integrations](/integrations) work, because they enable Zulip to
integrations](/integrations/) work, because they enable Zulip to
support third-party services that just have an "outgoing webhook"
feature (without the third party needing to do any work specific to
Zulip).

View File

@@ -185,7 +185,7 @@ to a URL. This is done in `zerver/lib/integrations.py`.
Look for the lines beginning with:
```python
WEBHOOK_INTEGRATIONS = [
WEBHOOK_INTEGRATIONS: List[WebhookIntegration] = [
```
And you'll find the entry for Hello World:
@@ -288,7 +288,7 @@ the [management commands][management-commands] documentation.
### Integrations Dev Panel
This is the GUI tool.
1. Run `./tools/run-dev.py` then go to http://localhost:9991/devtools/integrations/.
1. Run `./tools/run-dev` then go to http://localhost:9991/devtools/integrations/.
2. Set the following mandatory fields:
**Bot** - Any incoming webhook bot.

View File

@@ -4,7 +4,7 @@ Zulip's APIs allow you to integrate other services with Zulip. This
guide should help you find the API you need:
* First, check if the tool you'd like to integrate with Zulip
[already has a native integration](/integrations).
[already has a native integration](/integrations/).
* Next, check if [Zapier](https://zapier.com/apps) or
[IFTTT](https://ifttt.com/search) has an integration.
[Zulip's Zapier integration](/integrations/doc/zapier) and

View File

@@ -16,7 +16,7 @@ possible.
Most existing integrations send content from a third-party product into
Zulip.
* Search Zulip's [list of native integrations](/integrations) for the
* Search Zulip's [list of native integrations](/integrations/) for the
third-party product. Each integration has a page describing how to set it
up.

View File

@@ -0,0 +1,34 @@
# Error handling
Zulip's API will always return a JSON format response.
The HTTP status code indicates whether the request was successful
(200 = success, 40x = user error, 50x = server error). Every response
will contain at least two keys: `msg` (a human-readable error message)
and `result`, which will be either `error` or `success` (this is
redundant with the HTTP status code, but is convenient when printing
responses while debugging).
For some common errors, Zulip provides a `code` attribute. Where
present, clients should check `code`, rather than `msg`, when looking
for specific error conditions, since the `msg` strings are
internationalized (e.g. the server will send the error message
translated into French if the user has a French locale).
Each endpoint documents its own unique errors; documented below are
errors common to many endpoints:
{generate_code_example|/rest-error-handling:post|fixture}
## Ignored Parameters
In JSON success responses, all Zulip REST API endpoints may return
an array of parameters sent in the request that are not supported
by that specific endpoint.
While this can be expected, e.g. when sending both current and legacy
names for a parameter to a Zulip server of unknown version, this often
indicates either a bug in the client implementation or an attempt to
configure a new feature while connected to an older Zulip server that
does not support said feature.
{generate_code_example|/settings:patch|fixture}

View File

@@ -10,10 +10,9 @@ you can do in Zulip, you can do with Zulip's REST API. To use this API:
* Choose what language you'd like to use. You can download the
[Python or JavaScript bindings](/api/installation-instructions), projects in
[other languages](/api/client-libraries), or
just make HTTP requests with your favorite programming language. If
you're making your own HTTP requests, you'll want to send the
appropriate HTTP basic authentication headers; see each endpoint's
`curl` option for details on the request format.
just make HTTP requests with your favorite programming language.
* If you're making your own HTTP requests, you'll want to send the
appropriate [HTTP basic authentication headers](/api/http-headers).
* The Zulip API has a standard
[system for reporting errors](/api/rest-error-handling).

View File

@@ -74,8 +74,8 @@ event](/api/get-events#realm_user-add), and the
## Permission levels
Many areas of Zulip are customizable by the roles
above, such as (but not limited to) [configuring message editing and
deletion](/help/configure-message-editing-and-deletion) and
above, such as (but not limited to) [restricting message editing and
deletion](/help/restrict-message-editing-and-deletion) and
[streams permissions](/help/stream-permissions). The potential
permission levels are:

View File

@@ -19,10 +19,10 @@ curl -X POST {{ api_url }}/v1/messages \
--data-urlencode topic=Castle \
--data-urlencode 'content=I come not, friends, to steal away your hearts.'
# For private messages
# For direct messages
curl -X POST {{ api_url }}/v1/messages \
-u BOT_EMAIL_ADDRESS:BOT_API_KEY \
--data-urlencode type=private \
--data-urlencode type=direct \
--data-urlencode 'to=[9]' \
--data-urlencode 'content=With mirth and laughter let old wrinkles come.'
```
@@ -38,7 +38,7 @@ the command-line, providing the message content via STDIN.
zulip-send --stream Denmark --subject Castle \
--user othello-bot@example.com --api-key a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5
# For private messages
# For direct messages
zulip-send hamlet@example.com \
--user othello-bot@example.com --api-key a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5
```

View File

@@ -18,6 +18,7 @@
* [Installation instructions](/api/installation-instructions)
* [API keys](/api/api-keys)
* [Configuring the Python bindings](/api/configuring-python-bindings)
* [HTTP headers](/api/http-headers)
* [Error handling](/api/rest-error-handling)
* [Roles and permissions](/api/roles-and-permissions)
* [Client libraries](/api/client-libraries)

View File

@@ -3,7 +3,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("contenttypes", "0001_initial"),
]

View File

@@ -3,7 +3,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("confirmation", "0001_initial"),
]

View File

@@ -3,7 +3,6 @@ from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("confirmation", "0002_realmcreationkey"),
]

View File

@@ -3,7 +3,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("confirmation", "0003_emailchangeconfirmation"),
]

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("zerver", "0124_stream_enable_notifications"),
("confirmation", "0004_remove_confirmationmanager"),

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("confirmation", "0005_confirmation_realm"),
]

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("confirmation", "0006_realmcreationkey_presume_email_valid"),
]

View File

@@ -2,7 +2,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("confirmation", "0007_add_indexes"),
]

View File

@@ -5,7 +5,7 @@ from datetime import timedelta
from django.conf import settings
from django.db import migrations, transaction
from django.db.backends.postgresql.schema import BaseDatabaseSchemaEditor
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
from django.db.migrations.state import StateApps

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("confirmation", "0009_confirmation_expiry_date_backfill"),
]

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("confirmation", "0010_alter_confirmation_expiry_date"),
]

View File

@@ -13,7 +13,7 @@ from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.db.models import CASCADE
from django.http import HttpRequest, HttpResponse
from django.shortcuts import render
from django.template.response import TemplateResponse
from django.urls import reverse
from django.utils.timezone import now as timezone_now
@@ -22,6 +22,7 @@ from zerver.lib.types import UnspecifiedValue
from zerver.models import (
EmailChangeStatus,
MultiuseInvite,
PreregistrationRealm,
PreregistrationUser,
Realm,
RealmReactivationStatus,
@@ -43,10 +44,10 @@ def render_confirmation_key_error(
request: HttpRequest, exception: ConfirmationKeyError
) -> HttpResponse:
if exception.error_type == ConfirmationKeyError.WRONG_LENGTH:
return render(request, "confirmation/link_malformed.html", status=404)
return TemplateResponse(request, "confirmation/link_malformed.html", status=404)
if exception.error_type == ConfirmationKeyError.EXPIRED:
return render(request, "confirmation/link_expired.html", status=404)
return render(request, "confirmation/link_does_not_exist.html", status=404)
return TemplateResponse(request, "confirmation/link_expired.html", status=404)
return TemplateResponse(request, "confirmation/link_does_not_exist.html", status=404)
def generate_key() -> str:
@@ -56,6 +57,7 @@ def generate_key() -> str:
ConfirmationObjT = Union[
MultiuseInvite,
PreregistrationRealm,
PreregistrationUser,
EmailChangeStatus,
UserProfile,
@@ -114,12 +116,17 @@ def create_confirmation_link(
*,
validity_in_minutes: Union[Optional[int], UnspecifiedValue] = UnspecifiedValue(),
url_args: Mapping[str, str] = {},
realm_creation: bool = False,
) -> str:
# validity_in_minutes is an override for the default values which are
# determined by the confirmation_type - its main purpose is for use
# in tests which may want to have control over the exact expiration time.
key = generate_key()
realm = obj.realm
if realm_creation:
realm = None
else:
assert not isinstance(obj, PreregistrationRealm)
realm = obj.realm
current_time = timezone_now()
expiry_date = None
@@ -179,12 +186,12 @@ class Confirmation(models.Model):
REALM_REACTIVATION = 8
type = models.PositiveSmallIntegerField()
def __str__(self) -> str:
return f"<Confirmation: {self.content_object}>"
class Meta:
unique_together = ("type", "confirmation_key")
def __str__(self) -> str:
return f"{self.content_object!r}"
class ConfirmationType:
def __init__(
@@ -240,10 +247,10 @@ def validate_key(creation_key: Optional[str]) -> Optional["RealmCreationKey"]:
try:
key_record = RealmCreationKey.objects.get(creation_key=creation_key)
except RealmCreationKey.DoesNotExist:
raise RealmCreationKey.InvalidError()
raise RealmCreationKey.InvalidError
time_elapsed = timezone_now() - key_record.date_created
if time_elapsed.total_seconds() > settings.REALM_CREATION_LINK_VALIDITY_DAYS * 24 * 3600:
raise RealmCreationKey.InvalidError()
raise RealmCreationKey.InvalidError
return key_record

View File

@@ -72,17 +72,13 @@ def check_spare_licenses_available_for_adding_new_users(
realm: Realm, extra_non_guests_count: int = 0, extra_guests_count: int = 0
) -> None:
plan = get_current_plan_by_realm(realm)
if (
plan is None
or plan.automanage_licenses
or plan.customer.exempt_from_from_license_number_check
):
if plan is None or plan.automanage_licenses or plan.customer.exempt_from_license_number_check:
return
if plan.licenses() < get_seat_count(
realm, extra_non_guests_count=extra_non_guests_count, extra_guests_count=extra_guests_count
):
raise LicenseLimitError()
raise LicenseLimitError
def check_spare_licenses_available_for_registering_new_user(

View File

@@ -95,14 +95,19 @@ def unsign_string(signed_string: str, salt: str) -> str:
return signer.unsign(signed_string)
def validate_licenses(charge_automatically: bool, licenses: Optional[int], seat_count: int) -> None:
def validate_licenses(
charge_automatically: bool,
licenses: Optional[int],
seat_count: int,
exempt_from_license_number_check: bool,
) -> None:
min_licenses = seat_count
max_licenses = None
if not charge_automatically:
min_licenses = max(seat_count, MIN_INVOICED_LICENSES)
max_licenses = MAX_INVOICED_LICENSES
if licenses is None or licenses < min_licenses:
if licenses is None or (not exempt_from_license_number_check and licenses < min_licenses):
raise BillingError(
"not enough licenses", _("You must invoice for at least {} users.").format(min_licenses)
)
@@ -636,7 +641,7 @@ def ensure_realm_does_not_have_active_plan(realm: Realm) -> None:
"Upgrade of %s failed because of existing active plan.",
realm.string_id,
)
raise UpgradeWithExistingPlanError()
raise UpgradeWithExistingPlanError
@transaction.atomic
@@ -656,8 +661,8 @@ def do_change_remote_server_plan_type(remote_server: RemoteZulipServer, plan_typ
def do_deactivate_remote_server(remote_server: RemoteZulipServer) -> None:
if remote_server.deactivated:
billing_logger.warning(
f"Cannot deactivate remote server with ID {remote_server.id}, "
"server has already been deactivated."
"Cannot deactivate remote server with ID %d, server has already been deactivated.",
remote_server.id,
)
return
@@ -935,7 +940,9 @@ def invoice_plan(plan: CustomerPlan, event_time: datetime) -> None:
plan.save(update_fields=["next_invoice_date"])
def invoice_plans_as_needed(event_time: datetime = timezone_now()) -> None:
def invoice_plans_as_needed(event_time: Optional[datetime] = None) -> None:
if event_time is None: # nocoverage
event_time = timezone_now()
for plan in CustomerPlan.objects.filter(next_invoice_date__lte=event_time):
invoice_plan(plan, event_time)
@@ -1004,11 +1011,16 @@ def approve_sponsorship(realm: Realm, *, acting_user: Optional[UserProfile]) ->
for user in realm.get_human_billing_admin_and_realm_owner_users():
with override_language(user.default_language):
# Using variable to make life easier for translators if these details change.
plan_name = "Zulip Cloud Standard"
emoji = ":tada:"
message = _(
f"Your organization's request for sponsored hosting has been approved! {emoji}.\n"
f"You have been upgraded to {plan_name}, free of charge."
"Your organization's request for sponsored hosting has been approved! "
"You have been upgraded to {plan_name}, free of charge. {emoji}\n\n"
"If you could {begin_link}list Zulip as a sponsor on your website{end_link}, "
"we would really appreciate it!"
).format(
plan_name="Zulip Cloud Standard",
emoji=":tada:",
begin_link="[",
end_link="](/help/linking-to-zulip-website)",
)
internal_send_private_message(notification_bot, user, message)
@@ -1185,6 +1197,10 @@ def switch_realm_from_standard_to_plus_plan(realm: Realm) -> None:
standard_plan.next_invoice_date = plan_switch_time
standard_plan.save(update_fields=["status", "next_invoice_date"])
from zerver.actions.realm_settings import do_change_realm_plan_type
do_change_realm_plan_type(realm, Realm.PLAN_TYPE_PLUS, acting_user=None)
standard_plan_next_renewal_date = start_of_next_billing_cycle(standard_plan, plan_switch_time)
standard_plan_last_renewal_ledger = (

View File

@@ -1,4 +1,5 @@
import logging
from contextlib import suppress
from typing import Any, Callable, Dict, Union
import stripe
@@ -86,14 +87,12 @@ def handle_checkout_session_completed_event(
session.payment_intent.status = PaymentIntent.PROCESSING
session.payment_intent.last_payment_error = ()
session.payment_intent.save(update_fields=["status", "last_payment_error"])
try:
with suppress(stripe.error.CardError):
stripe.PaymentIntent.confirm(
session.payment_intent.stripe_payment_intent_id,
payment_method=payment_method,
off_session=True,
)
except stripe.error.CardError:
pass
elif session.type in [
Session.FREE_TRIAL_UPGRADE_FROM_BILLING_PAGE,
Session.FREE_TRIAL_UPGRADE_FROM_ONBOARDING_PAGE,

View File

@@ -5,7 +5,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("corporate", "0001_initial"),
]

View File

@@ -5,7 +5,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("corporate", "0002_customer_default_discount"),
]

View File

@@ -5,7 +5,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("corporate", "0003_customerplan"),
]

View File

@@ -5,7 +5,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("corporate", "0004_licenseledger"),
]

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("corporate", "0005_customerplan_invoicing"),
]

View File

@@ -4,7 +4,6 @@ from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("corporate", "0006_nullable_stripe_customer_id"),
]

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("corporate", "0007_remove_deprecated_fields"),
]

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("corporate", "0008_nullable_next_invoice_date"),
]

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("corporate", "0009_customer_sponsorship_pending"),
]

View File

@@ -6,7 +6,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("zerver", "0333_alter_realm_org_type"),

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("corporate", "0012_zulipsponsorshiprequest"),
]

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("corporate", "0013_alter_zulipsponsorshiprequest_org_website"),
]

View File

@@ -5,7 +5,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("contenttypes", "0002_remove_content_type_name"),
("corporate", "0014_customerplan_end_date"),

Some files were not shown because too many files have changed in this diff Show More