Commit Graph

4518 Commits

Author SHA1 Message Date
Steve Howell
a361e2b993 Fix recent regressions with All Messages (muted topics).
My recent refactoring that split out MessageListData
introduced a nasty bug where we were putting muted
messages into the "All Messages" view even though
the underlying list was correctly filtering
them, so the symptoms were two-fold:

    - muted messages cluttered up your feed
    - replying to the message caused a traceback (since
      it wasn't actually in the underlying data
      structure)

This has to do with what MessageListData.add_messages()
was passing back to MessageList to orchestrate drawing
in MessageListView.

I think what happened here is I got this working kind
of sloppily but correctly for the non-muting case and
then got in the weeds of some other stuff.  Not my
finest moment.

The actual correct code here is simple enough.  We
triage top, interior, and bottom, and then the respective
methods that put the data into the data structure
return the filtered lists (i.e. not muted) and put them
into the info structure.

Fixes #9656
2018-06-04 14:35:23 -07:00
Shubham Dhama
cc03f9fb8f eslint: Enable space-infix-ops rule.
More about rule at  https://eslint.org/docs/rules/space-infix-ops
2018-06-05 00:47:35 +05:30
Shubham Dhama
c6738889a9 eslint: Add and enable space-unary-ops rule.
Info about rule at https://eslint.org/docs/rules/space-unary-ops.
2018-06-05 00:47:35 +05:30
Steve Howell
b4d83446dc info-overlay: Make toggler initialization less eager.
We want to avoid doing too much setup for the info overlay widget
during initialization, since we don't really need it, and side
effects like focusing a modal can cause hard-to-detect
glitches for other features.
2018-06-04 09:02:58 -07:00
Steve Howell
8deb2fc9ef toggler: Always call back to callback function.
In our toggler component (the thing that handles tabs in things
like our markdown/search help, settings/org, etc.), we have
a callback mechanism when you switch to the tab.  We were
being tricky and only calling it when the tab changed.

It turns out it's better to just always call the callback,
since these things are often in modals that open and close,
and if you open a modal for the second time, you want to do
the callback task for whichever setting you're going to.

There was actually kind of a nasty bug with this, where the
keyboard handling in the keyboard-help modal worked fine the
first time you opened it, but then it didn't work the second
time (if you focused some other element in the interim), and
it was due to not re-setting the focus to the inner modal
because we weren't calling the callback.

Of course, there are pitfalls in calling the same callbacks
twice, but our callbacks should generally be idempotent
for other reasons.
2018-06-04 09:02:58 -07:00
Shubham Dhama
4b42a1207a portico: Fix /plans link in the tour carousel. 2018-06-04 08:54:52 -07:00
Shubham Dhama
06d00b0dfe portico: Fix clicking of carousel-container to move to next slide. 2018-06-04 08:54:52 -07:00
Shubham Dhama
e59fcddb13 portico: Stop wraping of slides in landing page carousel. 2018-06-04 08:54:52 -07:00
Robert Hönig
5d9a8cf64f bots: Add token to outgoing webhook zuliprc.
We want the Botserver to not only work with the
botserverrc, but also with a zuliprc of an outgoing
webhook. Because the Botserver uses the outgoing
webhook token for authentication, we need to include
it in the zuliprc for outgoing webhooks.
2018-06-04 08:39:24 -07:00
Robert Hönig
d08c701bb4 frontend: Use bot_data instead of HTML data to generate zuliprc.
It is better to retrieve all information about a bot from
the central bot data store, rather than relying on the
bot card's HTML attributes.
2018-06-04 08:39:11 -07:00
Robert Hönig
7e7583e9cd frontend: bots: Extract encode_zuliprc_as_uri.
This is preparation for an upcoming refactoring where we pass a bot
ID, not the email/api_key, into the zuliprc generation functions in
the bots code path.
2018-06-04 08:38:14 -07:00
Tim Abbott
973510718d filter: Fix new linter error.
This wasn't a linter error until we rebased
1e518dceef together with
e32dd53cd9.
2018-06-03 14:57:00 -07:00
Shubham Padia
f6f4a3f50a browser-support: Replace occurrences of .includes in static/js/*.
Fixes #9649.
`.includes` is not supported in Internet Explorer.
Replace `.includes` with `.indexOf() !== -1`.
2018-06-03 14:30:22 -07:00
Shubham Padia
1e518dceef filter.js: Add describe_is_operator for describing is operand categories.
Aims to increase readability.
2018-06-03 14:28:05 -07:00
Shubham Padia
561c9d7368 search: Add format_as_suggestion to search_suggestions.js.
`format_as_suggestion` formats a list of operators into a
suggestion using the Filter.describe and Filter.unparse methods.
This change aims to increase readability.
2018-06-03 11:53:34 -07:00
Shubham Padia
c92e909980 search: Add check_validity to search_suggestions.js.
Refactors search_suggestions.js to use check_validity to check if
last operator is valid and none of the previous operators is invalid.
2018-06-03 11:53:34 -07:00
Anupam Dagar
c8024cec5c hotkey: Close deprecation notice on Enter keypress. 2018-06-03 09:33:16 -07:00
Anupam Dagar
528d2c6b28 hotkey: Edit comment which refers to deprecated hotkey '*'.
This commit is related to issue #9613.
2018-06-03 09:33:00 -07:00
Yashashvi Dave
7c2f053f0f custom fields: Fix buggy behaviour of trash icon in choice type of field.
In admin UI for creating new choice type of custom field, the behavior
of trash icon for removing choice field is buggy.
When admin clicks on trash icon it disappears, but the row does not
and admin end up being unable to create the field.

Fix this by selecting proper element to find and delete choice row.
2018-06-03 08:22:29 -07:00
Steve Howell
47b4dd6bdb slash commands: Refine /day and /night.
These two slash commands now use zcommand to talk to
the server, so we have no Message overhead, and if you're
on a stream, you no longer spam people by accident.

The commands now also give reasonable messages
if you are already in the mode you ask for.

It should be noted that by moving these commands out of
widget.py, they are no longer behind the ALLOW_SUB_MESSAGES
setting guard.
2018-06-02 09:40:12 -07:00
Steve Howell
4b2e8b83c4 slash commands: Add /ping command (via zcommand).
This adds a /ping command that will be useful for users
to see what the round trip to the Zulip server is (including
only a tiny bit of actual server time to basically give a
200).

It also introduce the "/zcommand" endpoint and zcommand.js
module.
2018-06-02 09:40:12 -07:00
Steve Howell
87ba752758 refactor: Extract compose.do_post_send_tasks(). 2018-06-02 09:40:12 -07:00
Anupam Dagar
0e8081093b hotkey: Add deprecation notice for '*' hotkey. 2018-06-02 08:59:42 -07:00
Tim Abbott
7d7d89e486 narrow: Clean up computation of then_select_offset.
We had a significant amount of code for handling what seemed to be 2
cases, but which were really just a single case (if we are trying to
narrow to a specific message ID, and we end up landing on it, restore
the previous offset; with the special case that the previous offset
might be passed in from the previous call).

This cleanup also fixes a very minor bug, where our background
auto-reload (`reload.initiate({immediate: true});` in the JS console)
would incorrectly reset the pointer position to match the a near:
message ID if that was present in the narrow.
2018-06-01 12:45:02 -07:00
Steve Howell
baa691db7d narrow: Fix how we select ids for narrows.
This commit fixes a couple regression related to narrowing.

For a long time we've had bugs where we too aggressively
preserve the currrent selection on topic -> stream
re-narrows ("s" key) even when the wider narrow may
have unread messages before the selection.

Also, we recently introduced a bug so that when you used
a link from the "copy link to conversation" (aka a "near"
query), it would advance you to your first unread message
despite the near:999 specifier.  (The code would work for
subsequent "near" queries once you had fetched some of
your original messages).

This commit introduces a new data structure called id_info (replacing
the select_strategy data structure) in various functions and uses that
to track all the ids of relevance.

Significantly rewritten by tabbott to handle a few extra corner cases,
and add a ton of comments explaining why it works the way it does.

Fixes #2091.
Fixes #9606.
2018-06-01 12:45:02 -07:00
Yashashvi Dave
3422766c25 create stream: Fix widget for changing privacy doesn't render initially.
When admin user create new private stream, widget for changing privacy
of stream doesn't render. Because we render subscription-settings
template partially on subscription-add event, so this case wasn't
handled.

Fixes #9469
2018-06-01 12:09:50 -07:00
Anupam Dagar
562f5387e3 analytics: Add "last 2 months" and "last 6 months" button.
This commit removes "last 30 months" button and includes some layout changes so as to accomodate rangeslider with extra introduced buttons.
2018-06-01 12:07:18 -07:00
Shubham Dhama
c03acaa078 streams: Improve and make stream_privacy_modal consistent with others.
Previously weren't registering modal properly, which gets fixed by
using open_modal. It further fixes closing of modal by using escape
and positioning of modal.

Fixes: #9590.
2018-06-01 10:05:13 -07:00
Anupam Dagar
9674a139bf hotkeys: Change * to Ctr+s for starring a message.
Fixes: #9613.
2018-06-01 09:53:15 -07:00
Anupam Dagar
0f55b56398 analytics: Add a rangeslider to the "number of users" plot.
This also requires some layout/spacing changes, since the rangeslider
takes up some space.

Fixes: #9557.
2018-06-01 08:51:53 -07:00
Steve Howell
ab9e348fab dead code: Remove narrow.by_time_travel(). 2018-05-31 17:13:50 -07:00
Steve Howell
c1cd0b710e poll widget: Handle unknown keys.
This directly prevents a traceback when submessage events
arrive in the wrong order.  This was probably a symptom
of not updating message.submessages for not-yet-widgeted
messages, which was fixed in an earlier commit, but we
want defensive code in case of races or other glitches, and
it's not the end of the world is somebody sees partial
survey results due to some corner case.
2018-05-31 12:11:32 -04:00
Steve Howell
d0ad6295fa Avoid unneeded call to can_apply_locally().
The "if" condition that was removed in this commit
is no longer needed, since the called code now
handles the cannot-apply-locally use case.  (We
wanted the called functions to be defensive, so
they already were effectively handling the conditions
anyway, and recent commits has them returning
appropriate values and doing the right things.)
2018-05-31 08:44:18 -07:00
Steve Howell
7642ed66cf Expand get_unread_ids() to all local narrows.
This commit makes it so that any query for
which we do a local filter leads to us
examining the full list of unread message
ids in our cache to find a potentially
unread message that passes the filter.  This
can often allow us to more immediately
jump to a new narrow with an appropriately
selected message.

Fixes #9319
2018-05-31 08:44:18 -07:00
Steve Howell
4c235bfe65 Handle non-local case in get_first_unread_info().
We want to be able to call get_first_unread_info() even
if we cannot apply a search locally.  It was returning
the correct value before, but this change removes a
blueslip warning that will allow our callers to remove
some guard code in a subsequent commit.
2018-05-31 08:44:18 -07:00
Shubham Dhama
e4e47a41d2 eslint: Enable "no-whitespace-before-property". 2018-05-31 08:11:57 -07:00
Steve Howell
c0a9eb19fd poll widget: Clear input after adding an option. 2018-05-30 18:11:03 -07:00
Steve Howell
f1877d8fdb poll widget: Prevent blank poll options. 2018-05-30 18:11:03 -07:00
Akash Nimare
873cd23811 desktop: Update app version to v2.3.2. 2018-05-30 15:08:06 -07:00
Steve Howell
7305d4f652 submessages: Add update_message() function.
We want to update message.submessages for new events, even
though our couple of widgets (poll/tictactoe) that can process
"update" events currently just apply events as "deltas"
to their current data.

This does fix a subtle issue where you may get incoming
events for a message that the client knows about but which
it hasn't yet activated as a widget.  Up until now,
we've rarely seen the bug that's fixed here, since it's
usually the case that as soon as we receive a message, we
widgetize it right away.
2018-05-30 14:47:36 -07:00
Steve Howell
8b08772128 minor: Introduce submsg variable in a couple places.
We also pass in the submessage id to handle_events.
2018-05-30 14:47:36 -07:00
Shubham Padia
214ce1ccca streams: Add create and edit ui for is_announcement_only.
The user can now specify the value while creating a stream.
An admin can later change it via `Change stream permissions`
modal. Add is_announcement_only to subscription type text.
2018-05-30 14:22:15 -07:00
Steve Howell
bfc13ecea4 submessages: Just send content for submessage events.
For some reason in my original version I was sending both
content and data to the client for submessage events,
where data === JSON.parse(content).  There's no reason
to not just let the client parse it, since the client
already does it for data that comes on the original
message, and since we might eventually have non-JSON
payloads.

The server still continues to validate that the payload
is JSON, and the client will blueslip if the server
regressses and sends bad JSON for some reason.
2018-05-30 13:53:11 -07:00
Steve Howell
de7f147cd9 minor: Remove blueslip call in submessage.handle_event. 2018-05-30 13:53:11 -07:00
Shubham Dhama
5ce58d3cc5 Revert "i18n: Revert pieces of recent settings changes."
This reverts commit ef9681caa3.
2018-05-30 23:52:09 +05:30
Shubham Dhama
19bee9ed52 settings_ui: Move settings_ui.strings to top-level. 2018-05-30 23:36:16 +05:30
Shubham Dhama
b002ef26b7 i18n: Fix reference error for localstorage. 2018-05-30 23:28:21 +05:30
Shubham Dhama
d6c2160a3d admin: Move 'admin_settings_label' to top-level. 2018-05-30 23:28:21 +05:30
Shubham Dhama
402bd4a4c6 settings_org: Move 'time_limit_dropdown_values' to top-level. 2018-05-30 23:28:18 +05:30
Shubham Dhama
0caf55f2f0 settings_bots: Move bot_creation_policy_values to top-level.
Since ensure_i18n is dead we don't need to explictly load them.
2018-05-30 23:25:02 +05:30