Commit Graph

8480 Commits

Author SHA1 Message Date
Kevin Mehall d92939d53e [important] Fix regression in 9259a24
Use the new count_full_messages_between instead of subtraction in
message_list_view.append. By finding a count higher than it should be
when summarized messages are present, it didn't add new messages until
the pointer moved under certain conditions.

(imported from commit c10d9c1a0d23891acce88bf8d79866c08cb75681)
2013-10-21 16:01:18 -04:00
Kevin Mehall bd58861b09 Ignore summarized messages when calculating rendering windows.
Summary blocks can contain hundreds of messages. When the rendering window
code didn't take this into account, it would lead to all kinds of
unpleasant behavior when you scroll.

Trac #1888

Unfortunately, this replaces a subtraction with a function that iterates
through all the messages.

(imported from commit 9259a246946cd968a8725c38ff5ef2d4b4793717)
2013-10-21 11:48:57 -04:00
Kevin Mehall ba87ebc246 Fix duplicated summary blocks when scrolling up.
Make prepend re-render the whole render window instead of just the added
messages.

(imported from commit 6270a33ff0fe98fc901b687ca533ef0ea127d052)
2013-10-21 11:48:56 -04:00
Kevin Mehall a528b7134c Move summary_adjective to its own method
(imported from commit d451ffcf3ff460ffe030e265ca83fec1094c6217)
2013-10-21 11:48:56 -04:00
Kevin Mehall 463b10cf0e Enable summarization only for the right narrows.
* Disable for search-like narrows (whitelist stream and home instead of
    blacklisting topics and PMs)
  * Use home view summarization flag for All Messages

(imported from commit 48bd10ae5da7c7564c2efe86a40078f1a7e96e20)
2013-10-21 11:48:56 -04:00
Kevin Mehall 89d149c6f7 Fix @-mention "not subscribed" warning for all_public_streams bots.
Don't warn when @-mentioning a bot on a public stream that it does
not appear to be subscribed to. It may be receiving those messages
anyway.

(imported from commit 4a00694942a721897a01736f48033c71048e0b16)
2013-10-18 14:55:32 -04:00
Jessica McKellar 06566b3776 Don't receive notifications for messages on muted topics.
This doesn't address the more complicated case of someone @-mentioning
you on a muted topic, which consensus is you do want to get
information for, but we need to develop some infrastructure to present
that case to users clearly.

(imported from commit a4bc1e89c108fa8ba6eccc0a198eabf2231326ab)
2013-10-18 14:38:31 -04:00
Jessica McKellar efda426b86 notifications: split message_is_notifiable into multiple ifs for clarity.
(imported from commit 33d1e2135a87192cc4d964db534b31ae9335595a)
2013-10-18 14:38:31 -04:00
Jessica McKellar a9c7f3a387 [manual] Use the name instead of the domain for the user-visible realm identifier.
Do not push this commit to prod until the historical realm names have
been populated.

(imported from commit a58191d181d2fb2b8b5e9793ea57707b36812cfc)
2013-10-17 13:47:51 -04:00
Steve Howell 4a0315fbfd Organize feature flags code a bit better.
(imported from commit a9b1405db99e54de8bed996b32215ca736f2dd56)
2013-10-15 09:57:20 -04:00
Steve Howell 36690ee6f6 Remove transitional feature_flags.muting flag.
(imported from commit 98a6cc4f340489b7817084e5ca5dcbcb75021813)
2013-10-15 09:57:19 -04:00
Steve Howell b98e7f8d90 Remove transitional feature_flags.alert_words flag.
(imported from commit f00eba8a12054e9771105e341e2652a53271e298)
2013-10-15 09:57:19 -04:00
Steve Howell d5f14e3bb7 Turn on propagate_topic_edits for everybody.
(imported from commit 936d2417120af5e9798638e0575724d45b9a207f)
2013-10-15 09:57:19 -04:00
Steve Howell 0ad4554723 Allow customer12.invalid users to narrow to a single message.
Add the option "Narrow to just this message" to the chevron
menu.  This has two use cases:

    * It's an easy way to get a sharable URL for the message.
    * It reduces distractions.

For now it is feature flagged to just customer12.invalid and staging.
See #1880.

(imported from commit 897d247176f9024ff825ccd3b338236569eed5ab)
2013-10-11 15:52:10 -04:00
Steve Howell 78e4fe6594 Support command-click for stream/topic links.
Allow users to open Zulip windows in new tabs with command-click
from the left sidebar narrowing links and recipient bar
narrowing links.

(imported from commit d60c038c7bf1efccd461f5284d513b9cbfbdaebf)
2013-10-11 11:58:51 -04:00
Leo Franchi 1db703595e Enable topic propagation for CUSTOMER9
(imported from commit 646a765fad0c5b285b11daabb92a5c0f47c83fed)
2013-10-10 16:30:37 -04:00
Steve Howell 89cbda5001 Keep in-progress compose open on narrows.
If the user has text in the compose box, don't close or
change the compose box when they narrow.

(imported from commit f9b400f6bac37cb313f1fd87aadb3ba1d3a035ef)
2013-10-10 11:20:49 -04:00
Steve Howell 8017fc9a15 Move compose.start() calls out of click handlers.
For the two cases where narrowing should open the compose box,
we now put that logic inside of narrow.js.

(imported from commit 570e22e90c2f6d422ba71cce400c075f0b8adf51)
2013-10-10 11:20:49 -04:00
Steve Howell 7007cf203d Move compose.cancel() calls out of click handlers.
Handle closing the compose box inside of narrow.js, to
ensure consistent behavior for all the narrowing UI options.

(imported from commit f17a687491eb2361c73032cd974cedb2a0a2dd85)
2013-10-10 11:20:49 -04:00
Leo Franchi 6e188fb067 Tweak alert_word matches and add some more tests
(imported from commit 63dc4064c15d5d33a7ec0c992b183bf323dd4ee8)
2013-10-10 10:58:21 -04:00
Steve Howell a78a1ec36c Use <a> tags for links in the recipient/summary bars.
The main user-facing feature here is that users can open narrows
in new tabs or windows. Internally, it makes the HTML more semantic.

One consequence of making these elements into actual anchor tags
is that clicking on them no longer triggers this logic to
close the compose box when you click outside of it:

        // Unfocus our compose area if we click out of it. Don't let exits out
        // of modals or selecting text (for copy+paste) trigger cancelling.
        if (compose.composing() && !$(e.target).is("a") &&
            ($(e.target).closest(".modal").length === 0) &&
            window.getSelection().toString() === "") {
            compose.cancel();
        }

Instead of patching the above code, I elected to just call
compose.cancel() explicitly in the click handlers for the links
themselves.

We are gonna try to clean up the compose-box behavior globally soon.

(imported from commit c9a01916f1714fe3dd495d25c78cd5e5532105ef)
2013-10-09 17:09:10 -04:00
Kevin Mehall e29855e106 Show floating recipient bar on faded messages.
Trac #1837

(imported from commit 1f90b02a5a07b5ce106ad935a4b1cf18e47a0909)
2013-10-09 16:33:24 -04:00
Luke Faraone 1975a6f693 Cancel a compose if you click on one of the global filters
See trac ticket #1840.

(imported from commit 3e0a781252db575e5c0abb70565919e4cdaa963f)
2013-10-09 15:37:00 -04:00
Allen Rabinovich fe9cc4597f Make settings menu more apparent
(imported from commit 15e5db5c4792d39b54fa5a354f1156cde355160b)
2013-10-09 08:42:54 -07:00
Leo Franchi 51e0bea608 Autocomplete emails in sender: completion
(imported from commit 44dc337842d46349b103cf9631faa7d439be682c)
2013-10-07 14:55:58 -04:00
Leo Franchi 33dacae82d Split calculating of prefix from narrow operators into function
(imported from commit 940d7d7290e0357aad300ea00b6fcc59cd56cae1)
2013-10-07 14:54:05 -04:00
Steve Howell 265a3e2339 Turn on alert words for everyone.
(imported from commit d4281a3a23e6df97e0c621fdc757ec0b75db1de2)
2013-10-05 15:50:05 -04:00
Kevin Mehall 40ad01371f Don't close the compose box on right click in Firefox.
Trac #1737

Firefox has the slightly broken behavior that it emits a click event on
the document when you right click, but not on any of the child nodes, so
our #compose stopPropagation doesn't stop right-click events from closing
compose. Chrome never emits click events on right click.

(imported from commit 2519c542715c93877b6d38e5dcff1f3e011688e4)
2013-10-04 14:38:05 -04:00
Leo Franchi 8c081bceb2 Enable alert words for pixleeteam.com
(imported from commit 622d9497f6c7e0434601291a7343c663e2567865)
2013-10-04 14:23:12 -04:00
Leo Franchi 101a70a7ce Fix selector for gravatar url polling
(imported from commit e0f915a9e5894e3749ca90bab674f36ee9c15347)
2013-10-04 12:10:22 -04:00
Waseem Daher a9a50ac470 Enable muting for everyone.
(imported from commit d107df94561c4ccb46a79ae09663239c4fb52061)
2013-10-04 01:37:47 -04:00
Steve Howell 5ae5f6578c Turn on muting for CUSTOMER4
(imported from commit 2f02edeacc2ae49a88dfc16f0f92fe6f5dfd9524)
2013-10-03 17:09:31 -04:00
Leo Franchi 0d6ad56c29 Decode operand in filter.js in operator-aware way
When decoding an operand, a + can be converted to a space
only if the operand is not an email address.

(imported from commit 08fc36a579bbe6409137c60c0fa9579fe3ab2c43)
2013-10-02 12:11:15 -04:00
Steve Howell d437f6602f Add muted_topic style to the topics stylebar.
If you mute a topic, it will show with opacity 0.25.

(imported from commit 72517550cc9f1daa779b3aac6cacd39831d5aa20)
2013-09-30 16:52:19 -04:00
Steve Howell 45434d3f89 Fix bug with muting topics that are all integers.
It's a bit of a contrived use case, but you could make a topic
called "12345" and then mute it from the sidebar, and it would
crash inside Dict.  We now call attr(), not data(), to avoid
string-to-integer conversions.

(imported from commit 89666f40d624df154d41077546e1c13a23ee7e67)
2013-09-30 16:52:19 -04:00
Steve Howell d94d2d71c5 Always show narrowed topic in the topic sidebar.
Before this change, you could narrow to an old topic, and it would
not show up in the sidebar unless it had unread messages.

(imported from commit f177a7378dac064e46a6417357cc86ada4475936)
2013-09-30 16:52:19 -04:00
Steve Howell fcb6a9b572 Use "topic_name" var/field in rebuild_recent_subjects().
This is part of nibbling away at deprecating "subject."

(imported from commit fbd26b5f1386a174de76e04298a68b3a7b18606e)
2013-09-30 16:52:18 -04:00
Steve Howell 10145c0e83 Simplified setting active topic.
The old code was looping through recent_subjects to find the
original subject name, but we already have logic in get_subject_filter_li()
to be case-insensitive.  I tried this with various casings of topics,
narrowing to topics, as well as narrowing to a stream (so no active topic)
and narrowing to an old topic.

(imported from commit 1decde13477cb742fd4bc82798f1afb282182bdf)
2013-09-30 16:52:18 -04:00
Steve Howell 6b8013c631 Don't mutate global recent_subjects when creating subject sidebar.
Create our own objects for handlebars, so that we can add transient
flags like is_zero without worrying about side effects to other
code.

(imported from commit b351a369cb3f36233e108e270c7abdd4ab8c5860)
2013-09-30 16:52:18 -04:00
Steve Howell ec1c82d6d7 Select closest id in MessageList.rerender().
When we call rerender() on MessageList, it is usually because
something big has happened, so it's reasonable that the pointer
may now be invalid.  As an example, the old pointed-to message
may been removed from the home view.  We have always just
moved the pointer under the hood, but now we do it in a way
that doesn't generate spurious blueslip errors.

(imported from commit d399a101f36b744a423ea7da80dda8352440c6c9)
2013-09-30 16:18:18 -04:00
Steve Howell 3ff0ee6b21 Turn off collapsing on staging.
For now, I am just turning off the feature.  I will remove
the code in a couple days.

(imported from commit e9988fb2ead6e711274b60d6402326ec4c344cce)
2013-09-30 10:42:58 -04:00
Steve Howell cdb7737a78 Turn on muting for Iceland (customer8.invalid)
(imported from commit ab587777cf20947160dd8fa900151ca2800ffd01)
2013-09-29 22:44:09 -04:00
Steve Howell 8f1498c766 [important] Fix stacktrace in unread.js.
There is a scenario where we call process_read_message()
for a message that we haven't recorded as unread before.
I'm not sure how it happens, but I put back code to
guard against crashing.  The regression happened in
5752458c821.

(imported from commit 5ce15d2e236b738b445ed88f1733aa0612be0ff3)
2013-09-29 22:42:33 -04:00
Steve Howell f67acb3157 Filter duplicate messages more aggresively.
This fixes a blueslip error where we were trying to add the same
message into a MessageList twice.  Muting complicates our duplicate
detection, because empty() can return true even when we already
are storing messages that just aren't shown (because of muting).

The name empty() should probably be fixed in light of muting,
but filtering with self.get() is not really a problem here.

(imported from commit 83b0890471c9a0aa21996f3d0d3be4a238f23e65)
2013-09-28 15:48:38 -04:00
Steve Howell ea7fda59d3 Reset _all_items in MessageList.clear
(imported from commit 3e319578500480ebfe0da6c4541628a61f8b5ff9)
2013-09-28 15:48:37 -04:00
Steve Howell 49232d9173 Preserve muting preferences across reloads.
We have been persisting muting preferences on the back end for
a while, but we haven't been adding them to page_params for the
client to have at reload/startup time.

(imported from commit d9ca68aa0e4d22bfb0e6ce67fc0bc63981175c8b)
2013-09-28 15:48:37 -04:00
Steve Howell c79e3a95b1 Avoid selecting hidden message ids.
With the muting/hiding features, it has become the case that
this._hash can have entries that don't map to actually visible
rows, so this.get() can return true on an id that shouldn't
actually be selected, causing downstream code to explode.  Now
we call this.closest_id() regardless of whether the hash is
populated, to be safe, but then we still call blueslip.error
if the pointer moved.

(imported from commit 348e8ff67ce3a6d61aaeb31f80549386518af2d0)
2013-09-28 15:48:36 -04:00
Steve Howell a48af3bd6c Make muting rerender properly when getting updates.
If you have two browsers open for the same account, muting in one
browser will now be reflected in the other browser.  This got
regressed when changing the approach from collapsing to hiding.
The new code should be less brittle, as we encapsulate re-rendering
in muting.rerender().

(imported from commit 4e65e265b64513d38f518770453b7436cb92b4ca)
2013-09-28 15:48:36 -04:00
Steve Howell 2a4cd3c69a Exclude muted topics from stream/home unread counts.
Update get_counts() so that it ignores counts for muted topics
when calculating stream/home unread counts.

(imported from commit 9b4e4da4346c225c535e97d709d3dee032603cc5)
2013-09-28 14:53:11 -04:00
Steve Howell c7b7f8d79a Inlined unread_hashkey() function.
The indirection was more confusing than helpful, especially
since the function had side effects, despite its getter-like
name.

(imported from commit 85d9cf642b4177f62488136f0e0f7f6c9304942e)
2013-09-28 14:53:11 -04:00
Steve Howell 8d3f4366f8 Collapse unread_counts.private to unread_privates.
After killing off unread_counts.stream, the only field of
unread_counts was "private", so I just made unread_privates.

(imported from commit 9678f5b03524afb883ec4fa638b059e698888e78)
2013-09-28 14:53:11 -04:00
Steve Howell 664cb2460d Clean up references to unread_counts.stream.
The prior commit makes it so that we no longer use unread_counts.stream
in get_counts().  This commit removes the code that updates the
data structure.

(imported from commit 5752458c8212bf02cf9c8733ce349fc35b204a9b)
2013-09-28 14:53:10 -04:00
Steve Howell 534edfaf33 Compute stream/home unread counts from unread.unread_subjects.
These two data structures are kind of redundant:

  unread_counts['stream']
  unread_subjects

We are deprecating the former.  The latter is more flexible for
features like muting.

Now, in get_counts(), we compute home counts and stream counts
in the same loop that computes subject counts.

(imported from commit c8d0ea12a56d0128811e0aa165de9882546906a5)
2013-09-28 14:53:10 -04:00
Leo Franchi c5183427f3 Respect enter-to-send in edit box
(imported from commit 6e3fc6495b7012aa12728a78b8bdd95701bb21e1)
2013-09-27 13:52:14 -04:00
Leo Franchi 87858a6050 Don't autocomplete mentions while message editing
(imported from commit c4b402d5c0e50a7dd85f658f660633f3a3df5d54)
2013-09-27 13:32:02 -04:00
Leo Franchi 4ea15758cd Enable compose-box typeaheads in the edit message box
(imported from commit 8cf1ec74854889061e822f091c16cb817f00c56b)
2013-09-27 13:32:02 -04:00
Leo Franchi f2ae7f55c5 Use focused element for typeahead rather than hardcoding composebox
(imported from commit 1e9fed51e350f5dadec73c25238c0f3657af7f1f)
2013-09-27 13:32:02 -04:00
Leo Franchi 4f0f469a8e Factor out compose typeahead into individual functions
(imported from commit 293c61d5793ced7792c57713210a34736d851ae8)
2013-09-27 13:29:22 -04:00
Steve Howell 9110ebd208 Improve the UI for /activity.
We are still showing the same data points, but the logic to drill
down on details for a particular realm is now all server side,
not client side, and we are smarter about omitting fields.  In
summary mode, we don't show empty Name or Email columns.  In
detailed mode, we show the realm as a headline instead of a column.

In this version you do lose the ability to see all system users in
the same view, but Waseem is ok with this.

(imported from commit edd2e646ab4cf5783ea64232d0cd621debece8d4)
2013-09-26 13:20:00 -04:00
Jessica McKellar 4d730c1691 Close the compose box on a stream sidbar narrow.
(imported from commit 6d7d80d29c4e7dc68807a7fcb9ce2d8573c1c3e0)
2013-09-26 11:49:54 -04:00
Steve Howell 3fc352788d Turn on 24-hour time for customer8.invalid (Iceland).
I added myself as well.

(imported from commit 44c631de4ef157f055258ffa609666bb58d163f9)
2013-09-25 22:10:44 -04:00
Steve Howell e2126b78ab Enable compose fading for CUSTOMER4.
(imported from commit 3be5b169b530c7bf6d5a9499710950fefa3cbde1)
2013-09-25 14:43:43 -04:00
Steve Howell be9eea6cd4 Disable compose fading for incomplete/wrong stream names
(imported from commit 2b6a0dbcd1464767e24704f270eeac2875be0d51)
2013-09-25 14:43:43 -04:00
Steve Howell 4d5842cdcd Add summary view to the /activity report.
When you load the activity report, it will just show summary
counts for realms, but if you click on a realm, you will see
details about users in the realms.  You can also click "Show all"
to see an interleaved view of realms and users.

(imported from commit b106557b1fae64d525071afc124b5a8aed319086)
2013-09-25 11:33:11 -04:00
Kevin Mehall d9185cf455 Fix JS error when un-summarizing old messages.
`Cannot read property 'flags' of undefined` in the
_.each callback in expand_summary_row.

Messages loaded when you scroll up in a narrow are not added to
all_msg_list. Because the user just clicked the message, we know
the message is in current_msg_list, so use that instead.

(imported from commit e76449a2a2748b96f69a2ab05d288b708d9e3ac0)
2013-09-25 10:19:03 -04:00
Steve Howell 9df7ee454d Eliminate transitional email forwarding flags
(imported from commit cc9305e554a381de5a36b7c353bbf53b71b2d43c)
2013-09-24 16:19:54 -04:00
Steve Howell 49a55ca6fa Call blueslip.warn from stream_data.js functions.
It used to be calling blueslip.warning(), i.e. the wrong name,
and would crash.

(imported from commit ddc953488cdb22dd37ddf674dddf1e05f34eaec9)
2013-09-24 16:19:53 -04:00
Steve Howell a387535d2d Enable muting for internal MIT users.
(imported from commit 82dc8c620c5f9af5b7a366bd16aee9125b9ba634)
2013-09-24 16:19:53 -04:00
Jessica McKellar a0ff47a449 Add frontend support for newer realms receiving stream notifications by default.
(imported from commit 6b7f8d7bc85177d0d85384ac4bed508afdec7e83)
2013-09-24 16:19:53 -04:00
Steve Howell 660475bd0c Hide muted messages.
Instead of collapsing muted messages, just hide them altogether
in view where it makes sense to hide them.

(imported from commit 1c2c987ff302ceb135a025753cf421b4de1aea71)
2013-09-23 10:53:06 -04:00
Steve Howell 6c6816491d Add muting_enabled option to MessageList.
(imported from commit c86772b7dea864c49091c988772e17aae5efa5bc)
2013-09-23 10:53:06 -04:00
Steve Howell 022ef6e9b9 Add narrow.muting_enabled()
(imported from commit 8972d1e3ca347397664094a7f150ec86fd2f8f8e)
2013-09-23 10:53:06 -04:00
Steve Howell 21b30664b6 Create MessageList.add_messages() from zulip.js code.
I moved code into MessageList to further encapsulate details
of filtering.  The MessageList instances should be their own
gatekeepers for what messages they care about.

(imported from commit ee6cd7f6eabf97962d724a05d7d0b0a3e6ab19e5)
2013-09-22 14:35:53 -04:00
Allen Rabinovich 9ed05a1f85 Fix to list height computation
(imported from commit c43b07fa25f41146c8410bc41d90278c1a90a34b)
2013-09-20 12:11:31 -07:00
Waseem Daher aa6a3e1299 Enable alert_words for MIT.
(imported from commit 1765e9f6cd72fece834ef482f898096eb4a4f552)
2013-09-20 14:18:43 -04:00
Zev Benjamin 7c74983370 Ensure select_on_focus handlers are not called recursively
This fixes #1696.

(imported from commit 4d7ba3a1e34aa48d2675178913de30d081653762)
2013-09-19 19:10:45 -04:00
Steve Howell e79e74ade4 Add narrowed_to_topic() helper function.
(imported from commit 9190caa9b183893fb7ae883686b9bdbd661d5895)
2013-09-19 15:41:00 -04:00
Kevin Mehall 0da1d974bd Check the 'Get our apps' checkbox if you click any of the links to the apps page
(imported from commit 85795fae8a5ee78f0138aa08f09f645f75c5e9e7)
2013-09-19 13:23:35 -04:00
Kevin Mehall a77746e9fd Pull code that only has to run once out of the loop
(imported from commit 8c31c4bda6bf41e130fc4704d5520f500b9321f8)
2013-09-19 13:23:35 -04:00
Kevin Mehall bc36aad698 Show desktop apps alert when tutorial completes
(imported from commit 7719ec798dbcca519fd79ac8da9196e1a862764f)
2013-09-19 13:23:35 -04:00
Jeff Arnold f063921260 Enable summarizing for everyone
(imported from commit c03d48ad9c0fe6dfe86539fbff1f501b42b3b6d1)
2013-09-19 10:51:29 -04:00
Steve Howell c6a9297f1a Add blueslip warnings to stream_data functions.
Warn inside these functions when you get data on streams that you
are not subscribed to:

  add_subscriber
  remove_subscriber
  user_is_subscribed

The back end should be smart enough not to spam us with subscriber
info that we don't care about.

(imported from commit b27644be2abc37c11ddff884ef392ea208bd1bd3)
2013-09-19 08:52:54 -04:00
Jessica McKellar e73e3d1bac Don't error out on a name change for a stream you're not on.
(imported from commit 8438087b3b6c66f41b9d9152661a93f01a086b28)
2013-09-18 16:09:48 -04:00
Leo Franchi ce4a850bfc Remove all user we insert into autocomplete when alerting
(imported from commit 34521b5e9e312b5026f9dc015cc35de837d0e2a3)
2013-09-18 15:46:30 -04:00
Allen Rabinovich 5622e59b48 CUSTOMER7-specific left side user list at narrow widths.
(imported from commit 7504d86fe57e4e96f85dee18ede663c542d0144d)
2013-09-18 12:17:32 -07:00
Leo Franchi c588c7938c Allow message topic changing to propagate backwards
(imported from commit 470178ef5f7aaf09d4528c88ae6e33f17538fcaf)
2013-09-18 13:27:58 -04:00
Steve Howell fd81e04e16 Remove topic popovers when redrawing topics
(imported from commit 5350e5026dcfc9542c44b576ee967423adaf2c91)
2013-09-18 12:25:19 -04:00
Leo Franchi d3d4a41419 Block mit.edu from showing mention invitations
(imported from commit e8e85cad0198103a072cd452feb78a67b05b185c)
2013-09-18 11:50:58 -04:00
Steve Howell 80d634aced Add mute/unmute to topic sidebar menu
(imported from commit 96abc03e840ed6d720da8355f29242d9a070563e)
2013-09-17 18:53:28 -04:00
Steve Howell 8429105c24 Add chevron menu for topics in left sidebar.
The first menu option supported is to narrow to the topic.

The chevron only shows up if you turn on feature_flags.muting.

(imported from commit 17482f538a6d3e4ff96a36c042bad972d34f4b11)
2013-09-17 18:53:27 -04:00
Steve Howell cc30f658b2 Add stream-sidebar-arrow class
(imported from commit f26e797dce1b1f612872d4026dcf6c10f9cfbba6)
2013-09-17 18:31:52 -04:00
Leo Franchi 0cf588cd25 Show a warning and action button when @-mentioning someone not on the stream
(imported from commit 464d5a028f6a8f2698683e7317972dc0c7b9e336)
2013-09-17 16:49:47 -04:00
Jessica McKellar 91e8ec454c Remove stream list flicker on a stream rename.
(imported from commit f85b26c3c2179757d191090584f61576459ffdc0)
2013-09-17 16:23:08 -04:00
Steve Howell b8e68a5a17 Use fold_case:true for stream_info Dict
(imported from commit f592ac4438f21a55ff5bf62957c8050c4e8b92df)
2013-09-17 10:32:14 -04:00
Steve Howell e1b881629c Use fold_case:true for subscribers Dict
(imported from commit 8acc794cb5369baadef512a9fcdb3537231dd604)
2013-09-17 10:32:13 -04:00
Steve Howell 031f5f5333 Call stream_data.set_subscribers() from subs.create_sub().
Use the stream_data API to set up subscribers, so we don't
leak the data structure details into subs.js

(imported from commit e95616f2eb535ecf0e1cef35a143a71ad88de5bc)
2013-09-17 10:32:12 -04:00
Steve Howell 4b90f1685d Add stream_data.set_subscribers() method.
This allows us to encapsulate our use of Dict for the internal
data structure.

(imported from commit e8acc50b4c17d339015cb9db9939b9452a62cc8b)
2013-09-17 10:32:11 -04:00
Jessica McKellar 6cd33870e9 Add the frontend UI for realm admins to rename streams.
(imported from commit ab52fe8639c312be118f0807615c9d5712d410e9)
2013-09-16 16:16:13 -04:00
Zev Benjamin b9da1e1976 Make login form validation errors not wrap
(imported from commit b5173df6b3a98517f3127bc0b9fee63fd85a043f)
2013-09-16 14:20:43 -04:00
Steve Howell e83c026a27 Set focus-related flags correctly after a server reload
(imported from commit 408469c0da0cfa5513e6838329816cd88665981f)
2013-09-16 12:29:34 -04:00
Jessica McKellar 272921800a Open the composebox on sidebar subject selection.
This was requested by CUSTOMER28 and would also bring symmetry with
the user sidebar, which already does this.

(imported from commit 4dca3c957d3a710f00bbb34a7cd7dfe6074da8f7)
2013-09-12 06:04:03 -04:00
Leo Franchi f86c8255bb Safety check for stream_data:[add|remove]_subscriber
Though this should not be common, getting a peer subscribed/
unsubscribed notification to a stream we don't yet know about should
not be fatal

(imported from commit ee28b163e0efc9adfad31e1b321e986dfe56271e)
2013-09-11 18:10:17 -04:00
Steve Howell 0165dc54ad Create blueslip error for undefined keys in Dict.
We create a blueslip error for undefined keys in Dict.  This led
to a straightforward change in the unit tests for Dict.  For the
unread test, to avoid the blueslip error, we had to be more specific
in setting up a user in one place, but this reduced our coverage,
leading to another small test being added.

(imported from commit 33e14795500d9283de2a7c03c4c58aec11cea4b8)
2013-09-11 18:07:37 -04:00
Steve Howell e9adaaa0c0 Avoid Dict crashes for undefined keys when fold_case is true.
The exceptions were cryptic before, and they were inconsistent with
the fold_case: false behavior.

(imported from commit a40704d1a22bcdc60d91be832ee3c81eb416c6dd)
2013-09-11 18:07:37 -04:00
Steve Howell 6c25a70788 Avoid double-rendering muting updates
(imported from commit 359fdc03862d78729c5b5fbe6df277e571c7315c)
2013-09-11 16:47:38 -04:00
Steve Howell a1addad450 Handle muting updates
(imported from commit 219a817c494f7bc27642d96f203f686df28bb361)
2013-09-11 16:47:37 -04:00
Steve Howell b4b6fa14d3 Persist muting preferences to the back end
(imported from commit db2d4362a0601f35a75b798cf6945556e44532fb)
2013-09-11 16:47:37 -04:00
Steve Howell 042f5bda26 Add unmuting to message actions menu
(imported from commit 5188a36ec73aa2913b0d82f7e7ce12be78f4ccee)
2013-09-11 16:47:37 -04:00
Steve Howell b65f9b678b Add muting to message actions menu
(imported from commit 26568e36f2a41f2b85413ab4d069a689c9901aac)
2013-09-11 16:47:36 -04:00
Steve Howell c6131b630b Handle undefined keys in muting.is_topic_muted
(imported from commit 96a9f0253e1c0e72a2b05577118dac438d190994)
2013-09-11 16:47:36 -04:00
Steve Howell f616148181 Make muting case insensitive for streams and topics
(imported from commit 6e731a5305a6d19896c61300aedf0fb4a387e148)
2013-09-11 16:47:36 -04:00
Steve Howell 0641e693fa Add muting.set_muted_topics
(imported from commit c84cd085e513d57e3913543d40cd8fd6b5d45b67)
2013-09-11 16:47:36 -04:00
Steve Howell 04c6a8198a Add muting.get_muted_topics
(imported from commit 5edb1d36ae66dfc42cf534edc452959df8306661)
2013-09-11 16:47:36 -04:00
Steve Howell 8626276dc3 Add muting.unmute_topic
(imported from commit c3aa08b7d50c70cba86b43c12d618ba1d96832b4)
2013-09-11 16:47:35 -04:00
Allen Rabinovich 3560ecf429 Better date separator rendering
Split up long string

(imported from commit 51bab3cbb2d77f0e130d6bb0d486f2d7feba0909)
2013-09-11 11:50:17 -07:00
Steve Howell 8d67fc2775 Add semantic classes for expanding/collapsing messages
(imported from commit 9d71fd46667058ba92d941b79d6e2c822c721efe)
2013-09-11 14:42:25 -04:00
Steve Howell fcc268b44f Add expectOne() check when clicking to expand/collapse
(imported from commit 7224f618f49de82bd41a5a1f4b0677cf490b5856)
2013-09-11 14:13:17 -04:00
Steve Howell 4bec9dced9 Add expectOne() check when hitting enter to expand
(imported from commit 21b76133c95a4a48873d34ca905a688637cef2b7)
2013-09-11 14:13:17 -04:00
Jeff Arnold effccb12ab Enable summarizing for CUSTOMER4
(imported from commit ce9f4a50a49a005e4801df73661299e2a8de7abf)
2013-09-10 16:48:47 -04:00
Tim Abbott 9fcca3df4e [schema] Collect data on when users are active on site.
These engagement data will be useful both for making pretty graphs of
how addicted our users are as well as for allowing us to check whether
a new deployment is actually using the product or not.

This measures "number of minutes during which each user had checked
the app within the previous 15 minutes".  It should correctly not
count server-initiated reloads.

It's possible that we should use something less aggressive than
mousemove; I'm a little torn on that because you really can check the
app for new messages without doing anything active.

This is somewhat tested but there are a few outstanding issues:

* Mobile apps don't report these data.  It should be as easy as having
  them send in update_active_status queries with new_user_input=true.

* The semantics of this should be better documented (e.g. the
  management script should print out the spec above)x.

(imported from commit ec8b2dc96b180e1951df00490707ae916887178e)
2013-09-10 13:25:59 -04:00
Steve Howell 290be4c130 Roll out email forwarding to everybody
(imported from commit 1057272df8390c418890a2ac0939c05e0c1c403c)
2013-09-09 13:19:03 -04:00
Steve Howell 320eddcf6e Remove feature_flags.edit_appears_on_hover.
(imported from commit ff8b820d8f5c1bfe25ccb6856b5f206bd03663e0)
2013-09-09 13:16:11 -04:00
Kevin Mehall 810dd89621 Maintain a list of people in the realm.
people_list and people_dict include the feedback bot and anyone you've
cross-realm PM'd with. Useful for autocomplete, but not for admin and
stream settings views.

Fixes the UI part of Trac #1772.

(imported from commit cdefd4e86980447aad5190e7fc8ae3666d66e3c3)
2013-09-09 12:13:33 -04:00
Kevin Mehall 45b14a0c96 Set up people_dict before DOM load.
hashchange, which calls admin.setup_page, runs in another onready
event handler before zulip.js main().

(imported from commit 5d4e71f4666baf0a53e3fe9804561ce6cdc06261)
2013-09-09 12:13:33 -04:00
Steve Howell 682414e13c Move code to alert_words_ui.js
(imported from commit 78797e690ced954fc79f854efebe5945dd360bde)
2013-09-09 12:06:45 -04:00
Scott Feeney 5d800c5186 Fade users when composing
This is feature-flagged to staging only.

There are basically 3 parts to the implementation:

1. In response to typing, fade/unfade the user list.
2. When a compose is aborted, unfade all users.
3. When the presence list is redrawn, fade/unfade the user list again.

(imported from commit cd416de232849a9f69dcacdc8b0fcfc20e3848a2)
2013-09-06 23:13:48 -04:00
Scott Feeney 9c454dfe02 Track peer_add/peer_remove events on client side
This is the last step in getting a consistent client-side picture of who
is on a stream (provided non-MIT realm, and provided the local user is
subscribed to that stream).

(imported from commit 8bca722f169860ad4c1c92fdcb70d62c60f70fed)
2013-09-06 23:13:48 -04:00
Scott Feeney 232804c480 Add a warning comment to stream_data.js
(imported from commit c179a6983ee2f15fee4dd901eaa66b3aa498ea78)
2013-09-06 23:13:48 -04:00
Scott Feeney 7d3727d3bd Import subscribers list client-side when you subscribe to a stream
(imported from commit d42dfd6afc3778740934dad869ca86515dc966e5)
2013-09-06 23:13:48 -04:00
Scott Feeney dfaca2e9c7 Import initial subscriber lists from page_params.stream_list
(imported from commit b9679d30e4235efb6f47c2fa6c006790df616564)
2013-09-06 23:13:47 -04:00
Scott Feeney 17cad06a2d Add Dict.from_array()
(imported from commit 0650edb2217afa2c37be1bbc4f9e2ac40f4c0e2c)
2013-09-06 23:13:47 -04:00
Scott Feeney eb59d06aab Simplify subs member list rendering
(imported from commit 8772bc09341a89245c6013dcf106ce52c81abe7a)
2013-09-06 23:13:47 -04:00
Leo Franchi 828557c73e Niceties for alert_word editing: add on enter, handle tab properly
(imported from commit 317be7774c02d507ba69548fdc28c1aca75d6e70)
2013-09-06 16:49:56 -04:00
Allen Rabinovich a6dc890686 Standardize unread counts for user list
(imported from commit 2b82fbb6cbf89b8590a3319ce5e30dadf18cc87b)
2013-09-06 09:05:40 -07:00
Steve Howell b97c60b635 Restore the compose box's original size after hitting send.
This fix required upgrading to 1.1.17, but it's not squashed
with the upgrade, because that would complicate keeping the
copyright-fixing commit separate from the upgrading commit.

The new version of the plugin makes it so we can trigger a
resize event, but it's backward incompatible with our old
compose box code.

A minor cleanup here is that we also don't trigger a resize
right before hiding the compose box.

(imported from commit 6b0cb9ccd2ddef919fd375a80cfca535b5b74c0f)
2013-09-06 10:58:48 -04:00
Leo Franchi 663fd4653f Feature-flag alert words to staging + reddit
(imported from commit 1fe9c596b26ce6676514719e4ed2e185108685cb)
2013-09-05 10:21:39 -04:00
Leo Franchi 41b286232d Allow filtering to alerted messages with is:alerted
(imported from commit 99834f1ee1b9b2e0f5c7427afa1494bf404e3626)
2013-09-05 10:18:41 -04:00
Leo Franchi 802ea78fb0 Add a settings option to configure per-user alert words
(imported from commit b24d352fffdde13f2cf0467b31c706ebf0534d6a)
2013-09-05 10:18:41 -04:00
Leo Franchi 897dd87b94 Add a span around alert words to mark them visually
(imported from commit 9b8fbbd957086f1eeaa3409e5830aa6d7974fbe8)
2013-09-05 10:18:40 -04:00
Kevin Mehall 9428f40422 Add a `.expectOne` method to jQuery objects.
It asserts that the result set is exactly one element.

(imported from commit c78ff131deb4a13c65c2a68e4b8e09279ece3ea0)
2013-09-04 16:44:33 -04:00
Kevin Mehall e780502372 propagate_topic_edits feature flag: staging and CUSTOMER7
(imported from commit aca356a7c7f98066b13a51ede55c4925b95a476b)
2013-09-04 14:51:46 -04:00
Kevin Mehall 19a835e7d5 Add a checkbox that propagates topic edits to subsequent messages.
Trac #1348

(imported from commit 28e2a8cb3ecda5ec50d17501f4ccbd8644212065)
2013-09-04 14:51:46 -04:00
acrefoot 0cb72c6259 Unread counts on the toggle buttons when in skinny mode
(imported from commit 99102d1bf752c077ee4c23bf1aa0b095a9f739d7)
2013-09-04 12:35:48 -04:00
Steve Howell fdc589de3a Extract mit_edu_topic_name_match() in filter.js
(imported from commit e062cf7e987ca5af20417fe49785efa35574f628)
2013-09-04 10:39:00 -04:00
Steve Howell 26a8aee2d0 Extracted mit_edu_stream_name_match() in filter.js.
The original code was buried inside a switch statement inside
a for statement.

(imported from commit 768c4ee8596cb63b2caa14c5b113cc867db90293)
2013-09-04 10:38:59 -04:00
Allen Rabinovich 4aa9798f29 Move the lock to the left and widen the topic input field
(imported from commit 1d70afdc82b653239f7d016997c7e9cbe9eb5f14)
2013-09-03 20:15:17 -07:00
acrefoot a3753d8521 fixup 4c6c956118ae09fedca042e797a6029fdd26e00c
(imported from commit 2c1204b1da049e452a8af651c8ab90393d0c1e67)
2013-09-03 14:00:40 -04:00
acrefoot 08157d6f62 Render both the above and below time on date_row
If the date_row is between two messages, it tells you when the message
below was sent, but not when the message above was sent--for that you'd
either have to click on a message or keep scrolling up. This is especially
annoying when there are sometimes gap days on a particular stream (you shouldn't
assume that the message above is simply from the previous day).

This adds the date of the previous message (the time above) to the date_row.

(imported from commit 4c6c956118ae09fedca042e797a6029fdd26e00c)
2013-08-30 16:05:05 -04:00
Jessica McKellar 864ae3ad51 Enable the email forwarding UI for CUSTOMER6.
(imported from commit 587159412ad208d1f5e44479f50ca2f25a98f70a)
2013-08-29 18:13:21 -04:00
Jeff Arnold 6a9b441853 Clear a desktop notification once its source message has been read.
Addresses Trac #1698.

(imported from commit 859fc7d436904f21427d15f6363c4e0ca859e02a)
2013-08-29 17:16:11 -04:00
Scott Feeney f386d87f8e Add "announce stream" option to frontend UI
When creating a new stream, this option lets you announce its
creation to everyone who you didn't explicitly add.

(imported from commit ae4140b4268b73e8b4bb54f5a6eea12fe07cd110)
2013-08-29 10:32:37 -04:00
Waseem Daher dd6ddc0e1e Revert "Prevent unread counts from overflowing."
This reverts commit 728a5415c8aa2ee18405c77746a0ea9543a20d98.

(imported from commit 7d91b564549e4e444fe656c2d8b811e2fcbff2d3)
2013-08-28 18:02:09 -04:00
Allen Rabinovich 98f7870150 Prevent unread counts from overflowing.
(imported from commit 728a5415c8aa2ee18405c77746a0ea9543a20d98)
2013-08-28 13:54:47 -07:00
Jessica McKellar ea1420d201 Add a (?) popover hint next to stream email addresses.
(imported from commit f365afcf7bd256d0417e67c69f9fa67c5b15d418)
2013-08-28 16:43:40 -04:00
Scott Feeney c98deb5988 Toggle user sidebar popover when chevron clicked again
Fixes Trac #1679.

(imported from commit 998f3497f22f83297c9afd7c3e8ea6446b8a06db)
2013-08-28 16:10:33 -04:00
Waseem Daher ae4d53f977 Push inline message editing button to everyone.
Leaving the feature flag in in case certain realms don't like it,
so we can easily blacklist them from this feature.

(imported from commit 2a5884008be05216d195a582a327d7641bc419d5)
2013-08-28 13:48:45 -04:00
Steve Howell 857680102f Remove enforce_arity checks from Dict
(imported from commit 8fdb6d8807e5c16349c7fcf71f25ce73348a5fe1)
2013-08-28 12:29:11 -04:00
Jessica McKellar 9ffc292a57 Update a stream name in the UI when it has been changed.
(imported from commit 1fb90a83a62243997d870e1b5da0590402bd8529)
2013-08-28 10:23:39 -04:00
Jessica McKellar 081ae7771a Add a MessageList method to update message recipients.
(imported from commit 3c24f045aa5726fcab8b9acd91105044e7783b63)
2013-08-28 10:23:39 -04:00
Allen Rabinovich ddd790e642 Change edit button CSS to keep it from jumping
(imported from commit 17a03ca9294765256af0d4c6eb292b755d06158e)
2013-08-27 15:11:40 -07:00
Tim Abbott 8601c2d766 Disable Webathena-related UI for desktop app.
(imported from commit 4de9ecbd5acd90826da1941593fe03aa8a6bd80c)
2013-08-27 16:21:41 -04:00
Steve Howell 03b58e1528 Make narrowing click handlers work more generally.
Previously, narrowing would only work from recipient rows, not
other message table rows (e.g. summary rows).  This led to the trap
that you could add a narrows_by_recipient class to an element,
expect that narrowing would work, but the actual handler would
break or silently fail if it weren't part of a recipient row.

Now the click handler looks for the closest table row (tr).  It's
encapsulated in rows.get_closest_row(), so if we go to a
non-table-based design, it should be easy to address in one
place.

(imported from commit e116b7573c4bb06599ced84a0adcf8dc23d63593)
2013-08-27 15:46:33 -04:00
Tim Abbott e95a81addb Add Webathena login button to our mirroring page.
(imported from commit 43d8323bb502299027436a8c94c04f55d87bf953)
2013-08-27 15:41:43 -04:00
Scott Feeney 967d0f7473 Don't wait for DOM ready to register Handlebars helpers
This fixes a bug (hit by a branch of mine) wherein you could not
render Handlebars templates from a DOM-ready callback in a file that
came before templates.js alphabetically.

(imported from commit 48091d016776eb6f12d33db199781e776af18fc5)
2013-08-27 15:32:20 -04:00
Allen Rabinovich f6ec501505 Modify lock icon styles to display it in the stream list swatch or to the right of the stream name in the list
(imported from commit b70ed2520b38229ccaed62ed84786cb9152e50a9)
2013-08-27 12:20:08 -07:00
Jessica McKellar 908abbbd8b tutorial: adjust the placement of the stream and subject popovers.
(imported from commit e61df7b0ac25d63601763a37007d9f4cefded081)
2013-08-27 15:09:28 -04:00
Jessica McKellar eacd27dc8f Don't let the tutorial popovers get clipped on long names or small windows.
(imported from commit 069016ab38eb2d0d09b751ca22a53aba9d6980ba)
2013-08-27 15:09:28 -04:00
Allen Rabinovich 7f807f7c8d Make unread counts appear as lozenges to the right of stream/subject names
In particular:
   * Pull the count containers out of the containers that cut off overflow text
   * Make them lozenge-like
   * Add logic for shortening the overflow container when a count container is
     present

(imported from commit a2b3d237cbfe4fadfbbc3a931d2de85dfba10d04)
2013-08-27 09:15:16 -07:00
Jessica McKellar 2ba75d2bfa Report a distinct string including version as the client for desktop app users.
(imported from commit 58115e0cdd32f19f3694a1ffbf8664561175cf55)
2013-08-27 10:24:36 -04:00
Tim Abbott 134da30fdf Add webathena authentication button for Zephyr users.
This shows up when you're not running a Zephyr mirroring bot and lets
you use Webathena to have us run it.  Obviously needs more docs.

Current problems include:

* supervisorctl reload ends up recreating /var/run/supervisor.sock
  with the wrong permissions, so it only works once in a row before
  you need to chmod that.

* /etc/supervisor/conf.d needs to be humbug-writeable; this is a clear
  local root vulnerability

* This uses SSH and thus is kinda slow.

(imported from commit 7029979615ffd50b10f126ce2cf9a85a5eefd7a2)
2013-08-26 18:17:25 -04:00
Steve Howell 7fb99761e1 You can only expand rows by clicking on [+].
(imported from commit 23a52feca13232bf36038cd7f59c520f9106ee2c)
2013-08-26 16:38:34 -04:00
Scott Feeney bf0909a94d Lazy load Dropbox widget, and only when enabled
This brings several improvements:

* The Dropbox script won't slow loading our app.
* If it fails to load, no traceback; Dropbox link just won't appear.
* For users with Dropbox disabled (most at this point), no loading at all.

(imported from commit e71ae5790fc85a185e622bdafb350109527b4eee)
2013-08-26 13:13:00 -04:00
Steve Howell 1821005dfe Restore subject counts for Uppercase streams
(imported from commit ef0e78d39c56da67544441a73ea257f215fefd94)
2013-08-26 11:21:29 -04:00
Steve Howell 09241ae2de Use Dict more in unread.js.
The setdefault() and num_items() methods are handy, and it was a
little tough to keep track of which objects were Dicts vs. {}.

(imported from commit 6ca81ac411943c59bef6d6bae39c7641feb5574b)
2013-08-26 11:21:29 -04:00
Steve Howell 06065d50bf Add dict.num_items()
(imported from commit 209a01b61d18d4b65b54e473cf727065aada68e8)
2013-08-26 11:21:29 -04:00
Jeff Arnold e97f07605a Push message summarization (and its unread model) to MIT
(imported from commit 42ba7c56af5ea9f9281cb8b4a5ddc491b8446a22)
2013-08-26 11:17:24 -04:00
Kevin Mehall 7f1a1dba9d Show realm emoji in typeahead and update the list via events.
(imported from commit bd8b8be5d088d503cac2b72cf228e769827e2308)
2013-08-23 21:39:29 -04:00
Steve Howell 63fa194139 Turn off the "muted" topic special case
(imported from commit ea34ea060eb29864c4816d0f14ee106dcb10be9d)
2013-08-23 18:33:48 -04:00
Steve Howell 4dbea88aeb Fix click handler and re-enable collapsing experiment.
The click handler for collapsing was too broad, and it overrode
the ability to click to narrow from the recipient bar.

(imported from commit feeaa9becf8e400e319e1a77e5b72a33bb22854c)
2013-08-23 17:54:28 -04:00
Allen Rabinovich 5e38463800 Add retractable left sidebar.
Specifically:
   * Add and style the sidebar toggle button to the header and remove the
     gravatar.
   * Add the logic for retracting the left side bar.
   * Modify the logic for clicking on the referral pane to prevent it from
     closing the sidebar.
   * Modify the logic for clicking on the stream filters to prevent them
     from closing the sidebar.
   * Modify the logic for clicking on the stream settings dropdown and the
     user info dropdown to prevent them from closing the sidebars.

(imported from commit 73e00eb834a6e87cb8d659fdcf6c2e06fff3731d)
2013-08-23 14:16:51 -07:00
Steve Howell 47b1e8adfd Turn off collapsing for now
(imported from commit df25818d70feb1b9fd2463ff4643efa049ff5574)
2013-08-23 16:16:04 -04:00
Steve Howell 0721ea2aca summary_verb -> summary_adjective
(imported from commit c2980ed2e8d644a3b0eebba53365f61977a4f944)
2013-08-23 16:03:23 -04:00
Steve Howell 4a7bab9a6f Allow collapsing of recipient sections.
This is experimental, for staging only.  There might be a better
way to model this than dueling force_expand/force_collapse flags,
but it works for now.  The code in collapse_recipient_group()
could also be DRYed up relative to expand_summary_row().

(imported from commit 107151d1ecd640970fb7700d41278a003bd1abaa)
2013-08-23 15:57:31 -04:00
Steve Howell 9662594bf4 Add data-messages attribute to recipient rows.
This is to set up collapsing, but I think they could be useful
in general, so I'm keeping this is a separate commit.

(imported from commit 0da2b8ef246649f678c7cb6664ee78bf36aca076)
2013-08-23 15:57:31 -04:00
Steve Howell a0b28a03e4 Extract finish_group() helper in MessageListView.render()
(imported from commit db13ca858631d10a310aba3bd2540a545fd5b871)
2013-08-23 15:57:30 -04:00
Steve Howell 579444eee2 Enable "enter" key for muted summary rows.
(The approach has been simplified to look for summary_row in
the DOM, which makes muted and summary features work off the
same code.)

(imported from commit 4fa3d6ae5ad7bbac5958e60ecffb368d6ef29d2e)
2013-08-23 15:52:08 -04:00
Scott Feeney d0be30ab08 Format edit times properly
The "Last edited:" time should match the post time (12 hour format, with
exceptions).

(imported from commit 13d981da2945cecd3f287da0e4200c32b3921682)
2013-08-23 14:07:53 -04:00
Steve Howell 3239efd864 Simplify MIT regex code and harden tests
(imported from commit 96c988fb8c90d04dd4bcd7d2bbc04f1b1c8d8cb7)
2013-08-23 13:32:10 -04:00
Steve Howell 72b070be14 Remove dead code in Filter.parse
(imported from commit 59b56ab864c8af52cb2d637b965b5f7161c34110)
2013-08-23 12:56:08 -04:00
Allen Rabinovich 778fa955a9 Make the right sidebar retractable at narrower window widths.
As part of this commit:
   * Add and style a top right button that controls the sidebar
   * Add the necessary styles for the right sidebar when it's in that mode.
   * Add the logic for controlling the sidebar expansion
   * Modify the logic for prevent default click events to generally
     hide popovers correctly.

(imported from commit ca8063f6c62b436799f952e88541ff0ae8ba85fe)
2013-08-23 09:22:31 -07:00
Steve Howell 795248a1d0 Mute any topic named "muted" on zulip.com.
This change will allow us to test the muting feature on
staging.  Any topic named "muted" will automatically be
muted.  You can also mute any other topic on the console:

    muting.mute_topic('devel', 'ios');
    current_msg_list.rerender();

More UI around this experiment will be coming soon, as well
as support for muting entire streams.

The muting module keeps track of which topics are muted, but a
user can expand muted messages, and once that happens, the
messages are marked with the "force_expand" flag that gets
persisted to the back end.

Muted messages are rendered in similar fashion to the summarized
rows, and as part of unifying some of that code, we have
made it so that expanding a summarized section doesn't remove
individual flags related to summaries; instead, the messages
get the force_expand flag set.

(imported from commit acee4190e63813d46850415c41ff8ebfae4a6953)
2013-08-23 12:10:27 -04:00
Steve Howell e4699d6a25 Use new stream_list.set_presence_list_count().
The old API took a dictionary; the new function works for one
person at a time, which allowed us to clean up the calling code
in ui.set_presence_list.

(imported from commit 0ae9d01491238d32915572c7efebf476d05fed4b)
2013-08-22 15:32:30 -04:00
Steve Howell 8d8ea70f5d Make set_count() private in stream_list.js
(imported from commit 54fda6f0202bc86143eebeb6b361f03886514d04)
2013-08-22 15:05:18 -04:00
Steve Howell dca1ffdf96 [bugfix] Restore toString() call in Filter.unparse().
I regressed this recently, thinking that all our operators are
strings, but I forgot about the "near:" operator used in the
"Narrow messages around this time" feature.  The user facing
symptom was that the search bar showed up empty instead
of saying near:50, which might actually be the better
behavior, but it certainly was not intentional. :)

(imported from commit fcb93cecbe9a052bb9bc1af7fcac5aecaba5aafb)
2013-08-22 14:55:43 -04:00
Steve Howell c4d598b36e Move parse/unparse from narrow to Filter.
I'm trying to move well-isolated methods out of narrow.js, so that
narrow.js is more strongly focused on UI/ajax interactions and
big, heavy lifting stuff.  The logical home for parse/unparse
seemed to be Filter, and they brought along two private methods
with them.  The big code moves involved trivial follow ups
like s/exports/Filter/.

(imported from commit ace0fe5aa1c7abce0334d079ba9eb8d9a57bd10f)
2013-08-22 14:53:00 -04:00
Steve Howell 58c141ad79 Avoid side effects in ui.set_presence_list().
Have ui.set_presence_list() only touch the presence list.

Before this change, it was calling update_unread_counts(), which
has a bunch of side effects unrelated to the presence list.

(imported from commit 690f754d78874a03fa36f8ff8765d5a63e431d28)
2013-08-22 14:46:13 -04:00
Scott Feeney 6de6ced290 Fix PM unread counts not displaying
This was broken in two ways:

1. Commit ad59d6f78042ce89, "Make the left sidebar and right sidebar
more consistent", pushed last Monday, changed the markup for the right
sidebar without changing a selector in stream_list.js that was looking
for the old markup.

2. Even then, whenever new user presence information came in, we would
rerender the user list and blow away the unread counts. This commit
patches around that by updating unread counts after rendering the user
list. I'm not sure what broke this or how it was working before.

(imported from commit 53ed40139e257e44411e918d1ecdce3a49e9ee51)
2013-08-22 14:46:12 -04:00
Luke Faraone a305a7de63 Up offline threshold to 140sec and decrease ping interval to 50sec.
This is intended to help us debug what's going on with presence information.

(imported from commit 637ccea594ae51bc7b266620596180479ee754f0)
2013-08-21 14:45:01 -07:00
Kevin Mehall f944a8ed0e [third] Don't move typeahead popups when the body scrolls.
Trac #1479

All our typeaheads use this, but I made it an option that must be enabled
explicitly since it is not default bootstrap behavior.

(imported from commit 97852dc407d1f6dbe46b5fdd2c56d3ed8c6718d2)
2013-08-21 16:29:12 -04:00
Allen Rabinovich 834ff7d750 Remove JS logic for resizing floating recipient bar and composition area and do it with pure CSS instead
(imported from commit b19d1b008cc070f29e08fd93416e9a5d01e2f110)
2013-08-21 12:26:45 -07:00
Zev Benjamin 3f95e54dc1 dict: Add setdefault method
This is like Python's dict.setdefault.  I don't love the name, but
the consistency is nice.

We have lots of places where we do things like:

    if (! dict.has('foo')) {
      dict.set('foo', []);
    }

    var arr = dict.get('foo');
    arr.push(3);

We can now write:

    var arr = dict.setdefault('foo', []);
    arr.push(3);

(imported from commit b8933809c69ba47ec346ed51d53966793403e56c)
2013-08-21 14:11:39 -04:00
Zev Benjamin 62aec87962 dict: Make set() return the value passed
We were accidentally leaking our internal representation.

(imported from commit 08ddc42583fb13a2ad51eea7ed1b30bf5ccb4645)
2013-08-21 14:11:39 -04:00
Luke Faraone a1a5d00e9f Update your presence dot when your activity changes.
(imported from commit ecdc056db987d4404ded01092f5693ac8dd28ae9)
2013-08-21 11:10:31 -04:00
Luke Faraone f17d030272 Send IDLE continuously when idle, interpret a too-old status as offline.
This helps make our statuses more meaningful and should resolve trac #1534.

As part of this, we lower OFFLINE_THRESHOLD_SECS to 1.1̅6 minutes and
mark the user as idle after 5 minutes.

(imported from commit ee6b1ad203554a84b11e16c4c6195be9df5bcf4f)
2013-08-21 11:07:45 -04:00
Kevin Mehall e6de154e0d Reject messages consisting solely of whitespace.
Trac #1701

(imported from commit 48a172e17f69d11596ecf9a5b13cd48a074966c3)
2013-08-21 10:37:50 -04:00
Scott Feeney 371083e698 Keep invite link on screen when user list is long
(imported from commit ae775a6a91a485070fa65f8429ee919b1e33427e)
2013-08-20 17:40:43 -04:00
Tim Abbott 8aa11a60f8 Fix tracebacks opening stream on streams page.
This was caused by a branch I was working on conflicting with the
stream_data.js split.

(imported from commit 995dcf1412114bd36404b8c7ef66eb6f1e89648a)
2013-08-20 17:15:56 -04:00
Zev Benjamin 59041d993b dict: Move Dict.from(otherdict) functionality into clone method
(imported from commit 6a3981a726922d7acf55b49ea2d477271da430d3)
2013-08-20 15:37:08 -04:00
Zev Benjamin 2c775d0894 Make recent_subjects case-insensitive
(imported from commit 36c423f506c1e8dc0536c80a4a085b689623191a)
2013-08-20 15:37:08 -04:00
Zev Benjamin a53d6801a3 dict: Add option to make has() and get() case-insensitive
keys() and other methods that implicitly return keys return the
casing used for the most recent set()

(imported from commit 47cac13c2b928fd19b07c44fd1504426fb36e3d8)
2013-08-20 15:35:53 -04:00
Zev Benjamin 96483356c8 dict: Do a direct copy for Dict.from(otherdict)
(imported from commit 25ad11913dcb9a5ceb637d6571fa04e5586de842)
2013-08-20 15:35:53 -04:00
Zev Benjamin 3a70c4e928 dict: Make copying Dict constructor a class constructor method
(imported from commit 7bd5f6029c1290036a47688cf2b80f9317fe9c13)
2013-08-20 15:35:53 -04:00
Zev Benjamin 43847848c5 dict: Change internal representation to store the original key
This means that we no longer need to unmunge keys at the expense of
having to store the original key.

(imported from commit 958c33c806b8b399e9a9290e4f14ef119d923c14)
2013-08-20 15:35:53 -04:00
Tim Abbott 5f724a94ac Add support for invite-only streams in mit.edu realm.
This changes the mit.edu access rules from:

* Susbcriber list and inviting users to streams are unavailable

to

* Susbcriber lists and inviting users to streams are only available
  for invite-only streams

streams must still be made invite-only manually.

This both cuts down on the amount of code that is different between
the mit.edu user experience and the standard one, as well as paving
the way for us to invite-only streams for zcrypt.

(imported from commit 24e0e85428608c05c89eeea349338dd392e5489a)
2013-08-20 14:57:14 -04:00
Steve Howell edda967100 Leave casing alone in search suggestions.
The function narrow.unparse() is used in a bunch of places in
the search suggestion code, and now it no longer lower cases
operands.  This change contributes to fixing trac #1659.

(imported from commit 6b44b8a818482b5c8b4f9a45bc7d3a9d21e04eba)
2013-08-20 14:27:44 -04:00
Steve Howell 9d145ef5d4 Use official stream name in topic suggestions
(imported from commit 68b63a31f6a6e3cf8de6fd7fc255137dbc3260b8)
2013-08-20 14:27:43 -04:00
Steve Howell 0a22094e24 Change operator canonicalizations.
Streams are converted to their "official" names now.
Topics are not canonicalized at all.
All other operands continue to be lowercased.

Since we don't lowercase stream/topic at the parsing stage,
we have to modify the predicate function to do the lowercasing
of stream/topic to enable case-insensitive comparisons.  This
is slightly more expensive.  The server-side predicate
functions are already case-insensitive.

(imported from commit 286f118c6c3ff9d23b37c7f958cab4c0eacd5feb)
2013-08-20 14:27:43 -04:00
Steve Howell 269f3670cd Extract local vars in Filter.canonicalize_tuple().
This can be squashed with the prior commit or subsequent commit,
or it can just stand on its own, but it's part of transitioning
to a functional change in the next commit.

(imported from commit 155a0cdd28f851810fbedfef1a306e3190bf1c34)
2013-08-20 14:27:43 -04:00
Steve Howell 33c70f0f69 Extract Filter.canonicalize_tuple().
(imported from commit 96b8dc8c27c07d6d13f1e02c88a164abcab5a5c2)
2013-08-20 14:27:43 -04:00
Steve Howell d5f997eb58 Use the correct stream name in compose defaults.
If we have a stream named "Denmark" and we're narrowed to it,
then use "Denmark" as the default stream name in the compose box
even if the narrow operators are lowercase.

(imported from commit e9f06b7307c73231aa887dc95849e0307984e6f0)
2013-08-20 14:27:42 -04:00
Steve Howell 18857f6601 Added stream_data.get_name().
This function returns the stream's actual name, if we can get it;
otherwise, it's the identity function.

(imported from commit 7a981adba9632d6c6eba54cb6514a9226d1e83e8)
2013-08-20 14:27:42 -04:00
Kevin Mehall d529013b9a Fix browser error in editing PMs.
PMs do not have a "topic" field.

(imported from commit 023d283ad94147e8bb9a2c7f6959c0a636d825cd)
2013-08-20 12:00:11 -04:00
Jessica McKellar 485de6a5bc Correctly compute home unread counts on page load.
We had a duplicate and incorrect check on if a stream was in your home
view, which caused us to not display Home unread counts in the sidebar
/ notification bar / Dock on page load.

(imported from commit db27cf9091f8b47200b025f03a26c4fe82701882)
2013-08-20 11:10:18 -04:00
Jessica McKellar b32219c8eb Don't display unread counts until after making a bankruptcy decision.
Users were getting confused about why the unread count in the sidebar
/ notification bar / Dock was different from what the bankruptcy modal
said, so only show them the true server count until they've made a
decision.

(imported from commit 71d376cd4a85749ccf49936b251e6b8ac21361b7)
2013-08-20 10:26:52 -04:00
acrefoot 395aaae994 Allow anyone to edit a "no topic" message
This change would allow anyone in the realm to set a topic for a "no topic"
message. As soon as the message topic is set, only the sender can change it again.

(imported from commit 0a91a93b8fd14549965cedc79f45ffd869d82307)
2013-08-19 16:29:30 -04:00
acrefoot e8e5cc37b7 No longer require topics for zulip.com.
This will allow us to try the "write-once" topics

(imported from commit ffd074baa94fbbe375b7b1b436a2e19fe44f42e4)
2013-08-19 16:29:30 -04:00
Steve Howell 53f62bd71c Created MessageListView class.
(The code for MessageListView  was extracted from message_list.js.)

(imported from commit 60c0bac4c734d3850f8b8c047a978c292b19cc13)
2013-08-19 12:17:56 -04:00
Steve Howell 29c012dc74 Create stream_data.js module.
This pulls a lot of data-centric functions out of subs.js.

(imported from commit 0deed7d4bf5697e893af9bc9d888c2d5da8d9fa2)
2013-08-19 12:17:55 -04:00
Jeff Arnold 12058b0880 Don't break double clicking in the edit compose box to select a word.
(imported from commit 309f9b96b8567e384c83ba4c3a8a954383c6ebc7)
2013-08-16 22:03:47 -04:00
Steve Howell dc19f15b1f Make composebox_typeahead.seen_topics be a Dict of Dicts.
The new implementation makes add_topic() be O(1).  We incur
the cost of sort() in topics_seen_for(), but that's only called
in the typeahead widget, and I think the typical number of topics
should be manageable here.

(imported from commit 0e332301b2e44b4465bf7a1d93ae525a8d17a6b6)
2013-08-16 17:59:40 -04:00
Steve Howell a4af6c7062 Add unit tests for composebox_typeahead.add_topic().
This tests topics_seen_for() as well.

(imported from commit a748134af8068d9e4ae223fb7ecbbbc6c170137e)
2013-08-16 17:59:40 -04:00
Jeff Arnold e51cfeaed4 Only add an edit icon next to the last paragraph
(imported from commit c6d2893faef144f85518c4d45856282ada33a9d1)
2013-08-16 17:40:07 -04:00
Allen Rabinovich 5571a6e466 Switch body click to document click to account for clicks on the outer edge
(imported from commit bf6c7a61cb2f00741ed3af70ca77b5782f15d148)
2013-08-16 10:51:00 -07:00
Jeff Arnold 5596191666 Make double-clicking on a message highlight the message.
Addresses Trac #4.

(imported from commit d920f473e94e5141f41e887ffae74b3e21f862a6)
2013-08-16 13:46:56 -04:00
Jeff Arnold 41a149140d Show a button for editing messages when the user hovers over them.
Addresses Trac #1691.

Currently enabled only for staging and customer7.invalid.

(imported from commit 181e31adbac113bf62709b171d978c3074c8a799)
2013-08-16 13:02:15 -04:00
Jeff Arnold b166accc33 Revert "Show a button for editing messages when the user hovers over them."
This reverts commit 782e76210ac835d0617d91679933eccff0caad98.

(imported from commit 24889d0e0e38cc46d4b2d06c12a5737a4772fd6c)
2013-08-16 11:44:07 -04:00
Jeff Arnold 66c9c7efee Show a button for editing messages when the user hovers over them.
Addresses Trac #1691.

Currently enabled only for staging and customer7.invalid.

(imported from commit 782e76210ac835d0617d91679933eccff0caad98)
2013-08-16 11:20:15 -04:00
Kevin Mehall 3345199604 Hide/show the floating recipient bar when fade state changes.
This partially reverts d3c28b17859cacd49b7db9f8784d4b8b9069e1ff.

It is necessary to call update_floating_recipient_bar from _fade_messages and
_want_normal_display because they are called after opening/closing the compose
box. There is no scrolling there, so it is not otherwise updated. It is not
necessary to call from update_rendered_messages as it is not called on
changes of the fade state.

Related: Trac #1682

(imported from commit e2528f8c8827b7e2a135d7fc2b53e9e8162799b0)
2013-08-15 18:26:36 -04:00
Waseem Daher ada6a8d5d3 Shorten overly long names.
They were getting clipped in our box.

(imported from commit 8a33c385f81753c795ec1a62883aa45c6b6a26e3)
2013-08-15 18:04:43 -04:00
Waseem Daher 90617db8a1 Allow "Share the love" to be expanded and collapsed.
(imported from commit 9e620c5882d58f41d25124a690aa4154f93173db)
2013-08-15 18:04:43 -04:00
Steve Howell 9993af7e8d Remove dead comment from refactoring.
(imported from commit 2b1f3ef65b2e30c548a8966d47b448cefe3dde5f)
2013-08-15 17:15:07 -04:00
Steve Howell 30af17254d Require topics for customer7.invalid and zulip.com.
(imported from commit 6b17147b50575dd4ea8d688f15951660766708fa)
2013-08-15 17:09:26 -04:00
Scott Feeney 0241ae4136 Fix "All messages" showing when it shouldn't
I haven't filed an issue about this since I just quickly found and
tracked down the bug, but the STR were:

1. Subscribe to stream foo
2. Hide foo from your home view
3. Unsubscribe from stream foo
4. Unhide other subscribed streams you've hidden from home view, if any

The "All messages" link would stay, although it should go away in this
case. The apparent cause was an incorrect assumption (when implementing
this feature) that the stream_info dict only contains subscribed
streams; in fact, we also populate it with streams you used to subscribe
to.

(imported from commit 67f95c8c8a211a4943a2de394919d15a0d5435d0)
2013-08-15 16:21:35 -04:00
Allen Rabinovich 550fd6281c Fix regressions associated with the new fixed sidebar layout.
Specifically:

   * Remove min width setting for the main div as it is no longer necessary.
   * Change max width for the app to 1200 and adjust top margin on the message pane

(imported from commit 846dd3dcd7798efa615e15c61681b0ab7465f5e3)
2013-08-15 12:55:10 -07:00
Zev Benjamin 12c7f276b7 blueslip: Get complete stack traces in Chrome
(imported from commit 6165e210b9168701faf1310a33083bd30fa3aaf2)
2013-08-15 13:16:40 -04:00
Steve Howell ecb3399a8d Move summary exemptions from 5 to 8.
(imported from commit 279422ffb9e6d826a9e70e577fe334631f2697ca)
2013-08-15 11:03:26 -04:00
Steve Howell babbca7360 Use d.each() for iterating Dict instances.
(imported from commit 8cfe2c9a61aa1179454a6ab986fa23d04de09525)
2013-08-15 10:16:12 -04:00
Steve Howell 75ffd4d637 Exempt last 5 messages in view from summarization.
Once you enter a view, the last n messages will be exempt from
summarization, to give the users a little more context.  Any
subsequently arriving messages will also be exempt.

We will try n=5 at first.

(imported from commit 3e6fe58109e692389bf02dde2230d788b5818d52)
2013-08-15 08:20:29 -04:00
Steve Howell 3e1cdaaded Add MessageList.nth_most_recent_id().
(imported from commit 69a424d4990402b9e77fbfa57fa573a002cf04ce)
2013-08-15 08:20:29 -04:00
Zev Benjamin 72927e9d77 Fix unread count badge on OS X desktop app
For web pages, the initial favicon is the same as the favicon we
set for no unread messages and the initial page title is the same
as the page title we set for no unread messages.  However, for the
OS X app, the dock icon does not get its badge updated on initial
page load.  If the badge icon was wrong right before a reload and
we actually have no unread messages then we will never execute
bridge.updateCount() until the unread count changes.  Therefore,
we now ensure that bridge.updateCount is always run at least once
to synchronize it with the page title.

(imported from commit 5d1269c62c1c3190aea96ef6f96c46acdb9fdf9c)
2013-08-14 17:30:16 -04:00
Kevin Mehall de58b3fb4c Instead of DOM lookups, implement get_row in O(1) with a map updated after rendering.
(imported from commit 52927e87463e49f9f4522baa065cc934094f58de)
2013-08-14 17:08:47 -04:00
Kevin Mehall 0f6c7ca7be Use msg_list.get_row(id) instead of rows.get(id, msg_list.table_name)
(imported from commit 953cd24e605269d2bbdc42b878506f0ab01501e8)
2013-08-14 17:08:32 -04:00
Scott Feeney 024680f1de Outdent rows.js
We don't indent the outermost IIFE in any of our other modules.

(imported from commit 476bf5025988de28644bbb22f70e0cd2f404526a)
2013-08-14 14:57:29 -04:00
Steve Howell 947ca3a0e0 Add Dict.each().
Dict.each() allows to iterate through values and keys of a Dict.
The callback function is passed value as the first parameter to
be similar to _.each()'s calling sequence.

(imported from commit e745e8b5d2f167b8b8acf7542b767494e354b037)
2013-08-14 14:24:38 -04:00
Steve Howell 4b0cef8a83 Fixed code comments
(imported from commit 75b0ad464bab2e9b0b24f7c6a484b9c99d8b5a7a)
2013-08-14 13:22:28 -04:00
Steve Howell 59b84aad4a Properly fade recipient bar of incoming messages.
This fixes #1682, a recent regression that came out of
a5a47e13fc9d, which introduced the update_rendered_messages()
function in compose_fade.js.  The original implementation
was finding the table row for a message, but not the table
row for its recipient bar.  Now we style both elements.

(imported from commit a9628df0b03f79a24dfa68f4f2061eda2ca8ecea)
2013-08-14 13:20:39 -04:00
Steve Howell d66ac9f36c Remove calls to update_floating_recipient_bar in compose_fade.js.
The calls to ui.update_floating_recipient_bar() were brought over
from compose.js, and it turns out they just complicate scrolling,
since we already call the function in the scroll handler.

(imported from commit d3c28b17859cacd49b7db9f8784d4b8b9069e1ff)
2013-08-14 13:20:38 -04:00
Steve Howell 3f6a0cb909 Make topic autocompletes be case-insensitive w/r/t streams.
See trac #1676. Topic autocompletes were case insensitive
w/r/t to topic itself, but if a stream was called "Denmark"
but the compose box's stream field had "denmark", then we
wouldn't suggest any topics.

(imported from commit c8296c166115bb96023026da212f73a243432305)
2013-08-14 13:15:00 -04:00
Steve Howell 050c8ad103 zulip.subject_dict -> composebox_typeahead.seen_topics
Move zulip.subject_dict into composebox_typeahead.seen_topics,
and encapsulate the use of seen_topics inside composebox_typeahead
with add_topic() and topics_seen_for().

(imported from commit 2bc2d1714fabdc07a661cbf815d14b36a08990e2)
2013-08-14 13:15:00 -04:00
Waseem Daher 34e0c1e696 Use iframe for Dropbox integration.
This lets us avoid popping up a separate browser window (which would
not currently work in the desktop app).

This closes Trac #1673.

(imported from commit eb1990d8021600fc4d3870f6ec3a28f7111036c3)
2013-08-14 11:05:14 -04:00
Waseem Daher 13d3b4ab59 Less confusing placeholder names for "Share the Love".
(imported from commit cd904510b8aa7bf2b4e6d63aaa43bd48e6bb8966)
2013-08-14 10:12:34 -04:00
Tim Abbott 91a3935b92 Fix sending unnecessary pointer updates to server after reload.
(imported from commit 5297d7339e2fc363e825b20ddd7279f9878dbe2f)
2013-08-13 18:09:19 -04:00
Tim Abbott f6b7aed0c9 Save the original initial_pointer when updating it on reload.
(imported from commit 1fe4332282e521240d3a24428f3f7c318233258a)
2013-08-13 18:09:19 -04:00
Steve Howell 1c9749d21e Debounce update_faded_message on the trailing edge.
This resolves trac #1675, without introducing the problem that
caused us to set the immediate flag in the first place.  (Some
commits just prior to this eliminate some slowness with rendering
by taking the debounced function out of the code path.)

(imported from commit 8c72f25a9d5eb38376957f222b9413d3167fa386)
2013-08-13 17:14:07 -04:00
Steve Howell a1fa7c1b04 Remove unneeded calls to update_faded_messages() in Zulip.
These calls were expensive and unnecessary.  We already update
fade/unfade classes deeper in the call stack, when we render
the messages inside message_list.js.

(imported from commit 08fe028462b6d4569d9798a290dd7b26eb21fb01)
2013-08-13 17:14:07 -04:00
Steve Howell beb89e247f Avoid unnecessary fading/unfading processing via message_list.
The call to compose_fade.update_faded_messages() in message_list
caused us to traverse every message in the current table, which
was extremely inefficient.  Now we call the newly created
compose_fade.update_rendered_messages(), which only fades/unfades the
messages passed in as the first parameter.

(imported from commit a5a47e13fc9daeedd0899b2cfb02beb3f6b8cd0a)
2013-08-13 17:14:06 -04:00
Jeff Arnold ec2f013723 Make the left sidebar and right sidebar more consistent.
Addresses Trac #1500.

(imported from commit ad59d6f78042ce89a99ad60c7c34f67144e9c776)
2013-08-13 16:34:16 -04:00
Jessica McKellar f530e3b930 Display the email address for a stream in its stream page detail.
For now, only show it on staging.

(imported from commit fd07fad1c34578d8ddc2cddd1bb6bdcb72f354de)
2013-08-13 14:28:47 -04:00
Jessica McKellar f7784a2f1d Add a handlebars helper for variadic compound AND conditions.
e.g., from a comment in the commit:

// Execute the conditional code if all conditions are true.
// Example usage:
//     {{#if_and cond1 cond2 cond3}}
//         <p>All true</p>
//     {{/if_and}}

We'll use this for the email forwarding UI, but it may also be
generally useful, and easy to generalize to OR.

(imported from commit da601f94d9da300213ff46be50255135c014eca0)
2013-08-13 14:28:47 -04:00
Luke Faraone af4c34330b Switch to checking database is_bot field instead of using a heuristic.
This has the amusing side effect of showing all the Zulip bots in the
administration view because none of them have the is_bot 	 set.

(imported from commit cdec19d2109c092018c1f331aa32f345d1587683)
2013-08-13 14:20:18 -04:00
Luke Faraone ecc42bc9f8 Add administrative panel to allow for user deactivations etc.
We now show a list of users and allow you to deactivate a user using the
same process as `python manage.py deactivate_user`.

We add a new menu item accessible from the gear icon which will eventually
have much more than just this, but we have a good start here.

Here we also add a property to UserProfile which determines whether you're
eligible to access the administration panel, and then have code which shows
the menu option if so.

This introduces a new JS file, admin.js.

(imported from commit 52296fdedb46b4f32d541df43022ffccfb277297)
2013-08-13 14:20:18 -04:00
Steve Howell 78d8153e6b Remove compose box flicker after sending messages.
We remove the calls to clear_box()/hide_box() and start(),
so that we don't mutate a bunch of UI elements needlessly.
Everything that start() does either never made sense in a
just-after-message-sent context, or it was necessary prior to
this fix only because of what happened in clear_box() or
hide_box().

This change closes out trac #1672, "Clean up always-open code."

(imported from commit bedaa719eb05e166a4bac562784da0cce8859700)
2013-08-13 14:12:29 -04:00
Steve Howell 8f11ce7485 Remove redundant calls to send_status.hide()
One of the calls was obviously a typo dup, and the other
call is already covered by clear_box().

(imported from commit 448dc4c0f265cc7260ea08f0468a7d1440903e3c)
2013-08-13 14:12:28 -04:00
Steve Howell 5248c68fb7 Extract compose.show_box_for_msg_type()
(imported from commit 886717cbc73d0d662ccbd96091e94b85864d0049)
2013-08-13 14:12:28 -04:00
Steve Howell 86b337ca75 Extract compose.same_recipient_as_before()
(imported from commit 2ba8589127e3a0e86c00bb52a22be01bcad48a5d)
2013-08-13 14:12:28 -04:00
Steve Howell 6314089e26 Extract compose.fill_in_opts_from_current_narrowed_view.
(imported from commit e89c6c7f42aa8fdfd77e879e6d9f43dd67744ea6)
2013-08-13 14:12:28 -04:00
Steve Howell 0879648f0e Remove respond_to_cursor flag.
The prior commit, which was a functional fix, made the
flag obsolete.

(imported from commit 203a080106b00e0355a1223f783bbe579430b4ad)
2013-08-13 14:12:28 -04:00
Steve Howell 2b2587d70b Stop using old reply recipient in always-open compose.
Due to the code removed in this diff, we would put you
back to your original reply stream/topic/sendee

(imported from commit 6e1f4666e3b32b057e692e015782780f7c734445)
2013-08-13 14:12:28 -04:00
Steve Howell 6686ca04d2 Remove feature_flags.always_open_compose from code.
The flag has been set to true for a while, so we removed
the flag and a bit of dead code associated with it.  This
change should not affect any functionality on any realm.

(imported from commit 8d457f52584173994d0e5e83ca326f892cd90057)
2013-08-13 14:12:27 -04:00
Steve Howell ad10cecdd7 Extract mark_summarized().
(imported from commit 14a1c69392ec6ca8cb0ec72196368a195dd4c6fa)
2013-08-13 11:26:12 -04:00
Steve Howell d27feeed62 Extract code to summary.js.
(imported from commit 51d958b27e53555f5f77d6e6b661eade57190e23)
2013-08-13 11:26:12 -04:00
Zev Benjamin 62f607fd5e Debounce fading on the leading instead of the trailing edge
(imported from commit 11d0e8938c1f29cfea0678330e7af9884844af21)
2013-08-12 18:07:30 -04:00
Jessica McKellar 29a64b6c59 Only suggest declaring bankruptcy once.
Use information from the server to figure out if we should prompt for
bankruptcy, rather than trying repeatedly inside load_more.

(imported from commit ccb8cb1ce482b8bf3d343e7324fef7981880282d)
2013-08-12 17:33:40 -04:00
Waseem Daher 9ea08a35c5 Refactor: move attachment-related code into compose.js
(imported from commit 4436f0799a9c1a00e964962d4d0d165e03b641b7)
2013-08-12 17:22:23 -04:00
Waseem Daher dfb60ee966 File uploads using Dropbox.
(imported from commit c552133fc7025eca526fbfef24fd544260d7111b)
2013-08-12 17:22:23 -04:00
Waseem Daher 067bd390ac Remove kiosk mode.
We instead implemented the ~desired functionality here using the
API and a bot to make a totally read-only, static, slowly-updating
view into the Zuliverse.

This is the moral equivalent of reverting deb035b4c702fcdb0e660ed549fe74c682abb6d9

(imported from commit 9d743fe82f197b37f005e5a038f77cc4b8566024)
2013-08-12 16:19:53 -04:00
Waseem Daher f44176020e kiosk: Suppress user-info popover.
(imported from commit bda1714a49ea0cfa4ad0ec6447c7bb3fcf8b866b)
2013-08-12 16:19:53 -04:00
Steve Howell 878ee2b3fd Move Filter class to filter.js from narrow.js.
1) The class Filter now lives in its own module.
2) The function canonicalized_operators() is now a class method on Filter.
3) The function message_in_home moved to filter.js and became private.
4) Various calling code had to change, of course.
5) Splitting out Filter helped simplify a few tests.

(imported from commit e41d792b46d3d6a30d3bd03db0419f129d0a2a7b)
2013-08-12 13:58:32 -04:00
Zev Benjamin 46eb90a238 referral: Clean up display of validation errors
* We now clear the validation errors when the input box is de-focused
* We make the left sidebar height accommodate the validation error messages

(imported from commit 4b39bfd3e8e8dd707722492a3f98967ee4ccf0ab)
2013-08-12 12:50:33 -04:00
Zev Benjamin 51beeba854 referral: Prevent empty form submission
(imported from commit cc012e84c21bc424adaaa79611f09415480a2ba5)
2013-08-12 12:50:32 -04:00
Zev Benjamin 16f2a6e284 referral: Only show "no more invites" message when you first deplete your invites
(imported from commit 831e8aa466c4c4e463e269bad75078d1328fe286)
2013-08-12 12:50:32 -04:00
Zev Benjamin 848242399c referral: Hide explanatary text after first referral
(imported from commit 91460b80e2f45b9eaf2f24b3c1eb75ded884c445)
2013-08-12 12:50:32 -04:00
Zev Benjamin 126fcd42d7 referral: Show feedback immediately and don't show errors
(imported from commit 3bf6071c4fdeeaa50ea05c60b4bf0244c78ebeb0)
2013-08-12 12:50:32 -04:00
Steve Howell c4e168254c Fix too-much-fading regression and remove spurious classes.
To get to the bottom of the too-much-fading regression,
it was necessary to clean up the code, which was overly
complicated by multi-purposed functions.

The API for compose_fade now has these functions:

    set_focused_recipient
    start_compose
    clear_compose
    update_message_list
    update_faded_messages

Internally there is now a notion of "normal display",
so e.g. when you want a normal display, we call
_diplay_messages_normally() internally, which removes the
faded/unfaded classes from all messages.

(imported from commit 7eb2b0a163f29d9ebae26661f432fecc7c331e4c)
2013-08-12 11:54:27 -04:00
Tim Abbott e2413e8137 Defer processing of get_old_messages results during tutorial.
Previously we would just discard the results of get_old_messages,
which meant that any messages sent either while you were doing the
tutorial or that you started out with (as in the case of the CUSTOMER3
experiment) would be lost until you reloaded.

(imported from commit f5280c091ab6ed7c2af6eb8fe49c0fa6b997ac97)
2013-08-12 10:17:18 -04:00
Waseem Daher 41e88c89d8 kiosk: Try to suppress notifications.
(imported from commit dfb37bbf1e119ceeb719906c2623c6ea70e3112a)
2013-08-11 21:31:17 -04:00
Steve Howell e720737cb5 Tune fade/unfade bouncing from 150ms to 50ms.
This makes fade/unfade start sooner (good), but it might
re-introduce some typing sluggishness (bad).

(imported from commit 4e3112ed1ac931f2931182f91b60567ef2d72695)
2013-08-11 18:18:01 -04:00
Steve Howell 6591c79184 Un-debounce fade/unfade when starting a compose.
When starting a compose, call compose_fade.set_faded_messages,
which will immediately do fade/unfade logic, whereas before
the code path went thru debouncing logic.

(imported from commit 7d0b30435be32a7132dbf05bf064b03b925a2d42)
2013-08-11 18:08:36 -04:00
Steve Howell 6cc5c43e59 Move code into compose_fade.set_focused_recipient().
Move code from compose.update_fade() into
compose_fade.set_focused_recipient(), which makes it
so that we only have to send the msg_type.

(imported from commit c17665d9f34f525bdedcd36d39d3a112fa36a914)
2013-08-11 17:54:50 -04:00
Steve Howell 8190cdc9fb Avoid redundant O(N) work in unfade_messages()..
The code in unfade_messages() is O(N) over the number of
messages, but a simple flag allows us to track the fact that
all messages are unfaded, so we can short circuit the O(N)
logic in many cases.

A typical scenario now would be that you start typing a
stream while the topic is still empty.  Modulo debouncing,
every keystroke now leads to a call to unfade_messages(),
but this change only does real work the first time.

(imported from commit da07cf408bbdbf5b381ff3ec33a5e05e34eef5b5)
2013-08-11 17:05:13 -04:00
Steve Howell 37f8cc9294 Extracted code into compose_fade.js.
The compose_fade has three public exports:

    set_focused_recipient
    unfade_messages
    update_faded_messages

All code was pulled directly from compose.js, except for the
one-line setter of set_focused_recipient.  The focused_recipients
variable that used to be in compose.js was moved to compose_fade.js,
hence the need for the setter.

(imported from commit 462ca5d0d0bd58612d0197f3734a8c78de8c6d30)
2013-08-11 17:05:13 -04:00
Waseem Daher 0dcaf9ca3d Kiosk mode [unsafe].
"Kiosk mode" is a "read-only" Zulip suitable for embedding into
an iframe on another site. I say "read-only" in quotation marks,
because the account is still a fully-fledged active account on
the server, and we just tear out a bunch of stuff in Javascript
(that a malicious user could easily re-enable).

So in that sense, it's not actually safe in security-sensitive
environments -- malicious users logged in via kiosk mode
can do anything the kiosk-mode user can do.

(We need this functionality for the customer3 realm specifically;
 we'll possibly just tear this code back out once that experiment
 has run its course.)

(imported from commit deb035b4c702fcdb0e660ed549fe74c682abb6d9)
2013-08-11 15:57:21 -04:00
Steve Howell dbcbeb17d4 Debounce update_faded_messages to once per 150ms.
This is an attempt to make the compose box less sluggish.

(imported from commit b1450216da0a92fc69e0d129a74e76eca37df1b5)
2013-08-11 12:01:24 -04:00
Steve Howell 35af96a807 Add hasClass() optimization for fading.
(imported from commit 859e5c2ad731e16d4b4a7de80e574ee5131888fc)
2013-08-11 10:49:11 -04:00
Waseem Daher 8aa80f6800 Disable browser spellcheck in desktop app.
This fixes Trac #1567.

This is kind of a big hammer approach, though. If we did support
spellcheck on other platforms (without doing more work), this might
actually potentially disable it.

But we don't, so this is mostly a non-issue for now.

(imported from commit 74dcb42b19c37e1e8d1e9a2b265e1e6ae0cc2c67)
2013-08-09 18:53:22 -04:00
Zev Benjamin 222f6194e2 Fix key lookup when canonicalizing operators
(imported from commit 59d460bfaa50c0872918d1e5a22efb98d15ce669)
2013-08-09 17:35:58 -04:00
Zev Benjamin ec9322fc87 Use Dict everywhere we have keys based on potentially dangerous, user-supplied data
There are also one or two places we don't need to use it for security
purposes, but we do so for consistencey.

(imported from commit aa111f5a22a0e8597ec3cf8504adae66d5fb6768)
2013-08-09 17:35:14 -04:00
Zev Benjamin 0cfc8fae9f Add basic Javascript Dict implementation
(imported from commit 9f2fb089eb6e269549de26b37bd588355757d22c)
2013-08-09 17:20:14 -04:00
Zev Benjamin e0eddabeb1 Add util.enforce_arity
util.enforce_arity takes a function and returns a new version which
throws an error if an incorrect number of arguments (as determined by
the function prototype) are passed.

(imported from commit 20e69a6dc7b6f8455726ab4fae8d5b7b04dc4103)
2013-08-09 17:12:23 -04:00
Waseem Daher 1f80302668 Use 12-hour time (with some exceptions).
(imported from commit 0cb3cfe23c8696368e3dc8ac51eaa5419928f6f5)
2013-08-09 14:32:02 -04:00
Steve Howell 6790ed79cc Add a unit test for activity.js.
This includes slightly invasive, but harmless, changes to
the production code.

(imported from commit ff40af504de2360ada866508da262e0d2e9f7ad9)
2013-08-09 13:11:59 -04:00
Steve Howell cf1d94edef Add a test for stream_color.js (pick_color).
(imported from commit a49f96a4a7b61ef51c057e8a3f11c116d77ebb49)
2013-08-09 12:29:02 -04:00
Steve Howell cc73619a9d Add unit tests to narrow.js.
This includes slightly invasive, but harmless, changes to
production code.

(imported from commit 847557c11088b75c836cc399d0af75353a8faa3a)
2013-08-09 11:59:32 -04:00
Steve Howell 48b4fed555 Use _.where and _.pluck in subs.subscribed_streams().
(imported from commit b6ff77f3d762c88ed6f04c9eb9ca9135b6eeb8ca)
2013-08-08 19:09:14 -04:00
Steve Howell 9c994265c6 Randomize stream color assignments.
This fixes trac #1357, which says that some users get annoyed
when the system keeps generating the same color for them, which
would happen if they didn't like #76ce90 and kept picking a
new color for their streams.

(imported from commit 0fdb726aad4009332cc056a5e98bb39e01ef414c)
2013-08-08 18:22:44 -04:00
Steve Howell 7d67716c21 Simplify code to generate new stream colors.
Instead of splicing up a cloned copy of stream_assignment_colors
every time somebody uses a color, we just rebuild a hash
of used_colors from our subscribed streams when we need to assign
a color, and we avoid calling into stream_color.pick_color() when
a stream already has a color.

This change has a slight functional impact in the situation where
a user unsubscribes some streams during their session, because
we weren't "reclaiming" colors before on unsubscription, but the
simple approach gets that for free.

(imported from commit adf360365bdf1ae9db99c533a0bde62d91f5dfe8)
2013-08-08 18:22:44 -04:00
Steve Howell e36fd929bc Created stream_color.js.
This is a pure refactoring that mostly just moves code from
subs.js to the new stream_color.js and updates module references
accordingly.  In order to prevent introducing some exports,
update_stream_color was given an additional "sub" parameter
and update_stream_sidebar_swatch_color was given an "id"
parameter.

Killed off unused initial_color_fetch var.

(imported from commit b7644ce67f50d31fb46f564d758d661eea776aa6)
2013-08-08 18:22:44 -04:00
Kevin Mehall 2dfcd7876d Copy only specified properties from messages to summary row fake messages.
See previous commit message for why.

(imported from commit 53241f3aab3ec48a90cd9a280a0e5ec4a19e33cd)
2013-08-08 17:54:52 -04:00
Waseem Daher 49849a214f New onboarding step: Set up an integration.
(imported from commit 2c6cc6f703e893b44b2871c9510e858743d417ad)
2013-08-08 17:23:27 -04:00
Waseem Daher 1e92b17b1a Replace "Get the app" popup with a link.
The popover had a tendency to be obnoxious and hard to close.

This fixes Trac #1661.

(imported from commit d0ad8bd5b643abd9e7add76bc029458dacbd76cf)
2013-08-08 17:23:27 -04:00
Steve Howell 71e138b1aa Suggest more topics.
Examine up to 300 topics for search suggestions.

(imported from commit 8d52dd4d857818dcf59222bfdd956ee800342894)
2013-08-08 14:53:11 -04:00
Kevin Mehall 9be559858e Summarization style improvements
(imported from commit 4029d96d60cae0c6856067a696a842c39f4248e3)
2013-08-08 13:04:01 -04:00
Kevin Mehall e03f3dabc1 Make Enter on a summary row expand it.
(imported from commit 4ad44a96a225f6cfbb7d4f62ebf7c62298dd730b)
2013-08-08 13:04:01 -04:00
Kevin Mehall 5f48eebc8a Separate hotkeys that require messages from those that don't.
Fixes the blueslip error on "i" in empty narrow.

Also removes a then-uncessary check from do_narrow_action as suggested
by acrefoot.

(imported from commit 10b1f702b535b4eef54e500ccef93b6a5280e953)
2013-08-08 13:04:01 -04:00
Kevin Mehall 2664002dec Make summary rows selectable.
We represent summary rows by the ID of their first message for
for selection purposes.

(imported from commit 9f3c4d23f6b1295b117d5197e214de983bb2cc20)
2013-08-08 13:04:01 -04:00
Steve Howell 722c1b1a43 Allow user to change their API key.
(imported from commit b7c50779d0209c6e6600b59c8760a81273fe2454)
2013-08-08 13:03:09 -04:00
Steve Howell 0b4c37ef8d Autocomplete names w/spaces in search.
See trac #1356.

(imported from commit 6aaf122c0f6d7b1d92bb074e8f3fbb93d0b63ceb)
2013-08-08 12:54:20 -04:00
Kevin Mehall 0b9497305f Add defensive checks against undefined messages to _is_summarized_message.
Should fix the issue with empty realms.

(imported from commit afca70ebf3b7b74ae0d0c269c72b4f8d54fc254b)
2013-08-08 12:47:23 -04:00
Tim Abbott 87f8c9333c Rename Humbug => Zulip in app screenshot filenames.
(imported from commit a1a753143e77e0efd1de727378d505815a6d44d3)
2013-08-08 10:22:32 -04:00
Kevin Mehall eb2e8a15c3 Fix "Selected message id not in MessageList" caused by summarization.
Summarized messages are not shown and cannot be selected. If
`opts.use_closest === false` and you try to select a summarized
message, we still have to use the closest instead of failing.

Eventually, we'll make summary rows selectable, but that would be
rather involved since selections are managed by ID, summaries exist only
in the DOM, and many parts of the code get the selection and expect
it to be a message.

(imported from commit 998c4f24aece84528cc9da53a47f9e4f5391702d)
2013-08-07 15:07:47 -04:00
Leo Franchi 3cd012931b Use _.has to guard against subjects called hasOwnProperty
(imported from commit d1665c8b9b9a3963cff38ed2e9b84ed87a71dfd8)
2013-08-07 15:01:12 -04:00
Scott Feeney 68251256eb Fix missing $ that broke loading in Firefox
Bug introduced in commit f5f441ab90bcdb8404e05caea3c6da81a3a6fc1e

(imported from commit 94fb90cc12ccf8e1c0ad121be25dae897516679a)
2013-08-07 14:15:34 -04:00
Jessica McKellar ccd2433345 Let the browser scroll happen before our scrolling on a (re)load.
On a page load or reload, the browser will, at an idle time, scroll to
the top of the page. We can't intercept this browser-induced scroll,
so to make sure it doesn't in interfere with our scrolling to the
correct place in your message feed, we let the browser scroll happen
before the work we do on page load.

(imported from commit f5f441ab90bcdb8404e05caea3c6da81a3a6fc1e)
2013-08-07 13:51:47 -04:00
Jessica McKellar 5b38b763d9 Move the get_old_messages success work into its own function.
We'll need to set timeouts on calling this function.

(imported from commit 02b8322ae3cd68d714c2ccf4b5bece075cc8d27f)
2013-08-07 13:51:46 -04:00
Jessica McKellar a1f760dedb ui: Move the scroll handlers into top-level functions.
We'll need to be able to invoke them in event handlers.

(imported from commit 4487f711b59af0ccbc3f94c34e99c96228942add)
2013-08-07 13:51:46 -04:00
Jessica McKellar 7347bc7213 Consolidate the multiple zephyr.js onload functions into a single
function.

It's easier to keep track of everything in one place.

(imported from commit 2ff55fd8ee7c3ff465644ad4b921bf6efa97d02c)
2013-08-07 13:51:46 -04:00
Steve Howell 8bff4779e6 Leave the pointer alone more when it's at the top.
This commit makes keep_pointer_in_view() less aggressive when
the pointer is toward the top of the screen.  If the pointer is toward
the top of the screen, then as long as it's fully on the screen, we
don't pull the rug out from under the user and change the pointer.
An important benefit of this change is that we fix trac #1608,
which was a bug where autoscrolling interacted with
keep_pointer_in_view() to push messages past the top of the screen
before they were read.

(imported from commit e39926df99bfaedd5c0757f1241887ccd9b93fab)
2013-08-07 13:49:08 -04:00
Steve Howell 990df18d07 Refactor keep_pointer_in_view().
The helper functions now return true when a message is on
screen, not when it's off screen, and the names have been
changed accordingly.  I also eliminated the at_end parameter,
which was kind of abstract, by having message_is_far_enough_up
and message_is_far_enough_down handle those details.

(imported from commit cdb1543e430f49f23eb1b3a88d9aaff95ce7ca74)
2013-08-07 13:49:07 -04:00
Kevin Mehall 2bf962469e Summarize messages that are sent while narrowed.
(imported from commit 5ab3e4a5e6c43b879c376edd935d45539ef9fbd5)
2013-08-07 10:24:03 -04:00
Kevin Mehall dbb590268e Refactor update_message_flags for multiple flags.
* Move the state into a closure to duplicate it for multiple queues
  * Use _.debounce instead of manual setTimeout fiddling
  * Have it handle manipulating the message flags

(imported from commit 938f51fd666131a3cec5901d3f3fdd39e203b462)
2013-08-07 10:24:03 -04:00
Kevin Mehall ec927416a0 Move "already read" check into process_read_messages and rename it.
Functions were supposed to check that messages were unread before
passing them to process_read_messages, but some didn't.

The `mark_messages_as_read` function was essentially that, so
take that name.

(imported from commit 2917fe30d2defb8a047ec32e1bc70d379779276b)
2013-08-07 10:24:03 -04:00
Kevin Mehall eac6463031 Implement message summarization experiment.
When you read messages in a narrow and then un-narrow, collapse
adjacent messages read in the narrow into a summary row that can
be clicked to expand those messages.

Scoped to staging with feature flags.

The implementation of this within our current MessageList is rather ugly.

(imported from commit bcb3a39d8c0c334136fe86318f18ead03f0f50bf)
2013-08-07 10:24:03 -04:00
Tim Abbott b600c9453d Rename humbug => zulip in subs.js local variables.
(imported from commit 33a3b46ebbf78bcb5cf5654f817acd2f4e7b5e9a)
2013-08-07 10:00:09 -04:00
Tim Abbott 1f1af26048 Change Humbug => Zulip in text/comments.
(imported from commit 2f9d73431ae40e1b9e9e11bc2f4f62f566ae758a)
2013-08-07 10:00:07 -04:00
Steve Howell 57f518c9c2 Add node JS unit tests for MessageList.
(imported from commit 486a343add91fd5037431504e1ce4a750bfa9fbf)
2013-08-07 09:25:13 -04:00
Steve Howell de252b0ee9 Remove utils.memoize().
We use _.memoize() in the one place it was called before.

(imported from commit de15a61eed47551f0f539aacba6df3303c865299)
2013-08-06 18:22:11 -04:00
Zev Benjamin 237953f656 Completely hide the "share the love" elements when the user has no invites.
(imported from commit 6fe383dbbafb5e91998b6cdd52d01d92af31badb)
2013-08-06 17:18:40 -04:00
Zev Benjamin 262fb9b14c Factor out resizing page components from the resize handler
(imported from commit 18410406f6a2401b21a9d5336a8ae14046fc0375)
2013-08-06 17:18:40 -04:00
Zev Benjamin 5e1d893509 Revert "Temporarily remove "Share the love" from DOM & JS"
This reverts commit fc7af47400f6c96161913dcc98be128c116d90c5.

(imported from commit 8f58425ec3bd95220e109eeb7be21fa449508427)
2013-08-06 17:18:40 -04:00
acrefoot 5c2599e157 Fix the click handler for User Actions on the sidebar
Adding a span for CSS reasons in the presence list indicator
broke the click handler if you clicked the presence circle directly.

(imported from commit 1aa28755d849a1f2a5a06aeb4cc27ca368730c35)
2013-08-06 17:12:27 -04:00
Zev Benjamin b92bd9fa89 Fix for _.each not short-circuiting
(imported from commit a0c732abe38e75ac7aa5b807a65d716fd938ca6a)
2013-08-06 16:15:47 -04:00
Zev Benjamin f165318338 Don't recompute getBoundingClientRect excessively
(imported from commit 442ef93f887a7ad6777432cbb5d55b15d2efaa3c)
2013-08-06 16:15:47 -04:00
Zev Benjamin 34820bbc20 Cache feed bounds calculations
(imported from commit f5ca657d2addedcd7645bc9524f95d0e4d3b5460)
2013-08-06 16:15:47 -04:00
Zev Benjamin 1c4a608b40 Use CachedValue objects for viewport height and width
(imported from commit f61cca77651b5e9a66db6c2a9749fe7a1e958fac)
2013-08-06 16:15:47 -04:00
Zev Benjamin 3ce318e9a1 Add CachedValue class to encapsulate the pattern of caching mostly static values
(imported from commit 14048847e77974cda3a6214f129492d8d373080d)
2013-08-06 16:15:47 -04:00
Zev Benjamin 07301f9aaa Use the bottom of the tab bar underpadding instead of the navbar for determining visible messages
(imported from commit c7c2e8099fcc1ac03ae663c15beb6297805dadc0)
2013-08-06 15:21:56 -04:00
Steve Howell 3aa5930191 Streamline search suggestions when query has trailing space.
If you entered "stream:Denmark " in the search box, we would show
you two suggestions for "stream Denmark", despite our duplicate
detection, because we didn't canonicalize the suggestion that is
literally based off the user typed query, and so the other way
of generating the "stream Denmark" suggestion created a duplicate.

Now all the suggestions we generate are canonicalized, so the
generalized duplicate detection can work.

(imported from commit 52bf08ccf9bb2e2260ca8c20690169aead3732ab)
2013-08-06 14:04:29 -04:00
Steve Howell 349039289c Set module.exports in util.js.
(imported from commit 12b81a6f9b79fe3f024f53e3185d647971952df7)
2013-08-06 14:04:29 -04:00
Scott Feeney 29b3b42ac7 Temporarily remove "Share the love" from DOM & JS
(imported from commit fc7af47400f6c96161913dcc98be128c116d90c5)
2013-08-06 10:47:42 -04:00
Scott Feeney 950d271bc3 Fix wrong pointer position on narrow
This was introduced in a71867c2435790, intended to fix #1287.

Very subtle bug. The problem was that we were attaching a click handler
to two selectors, a link, and a div that the link is inside of.

Since the link was a descendant of the other selector, clicking the link
created TWO click events, and the second click on a stream box while
already narrowed to that stream jumped you to the end.

We should be careful of this in the future — never attach an event
handler to two selectors, one of which is contained in the other.

(imported from commit f428f593280e80c90b2665d1dfbff1df8a39bd35)
2013-08-05 18:37:29 -04:00
Steve Howell 0f42feb131 Turn on always-open-compose for all realms.
(imported from commit 0a7b35a4144e5645adbfd9b8fffb78573e676ad4)
2013-08-05 18:14:57 -04:00
Tim Abbott c5b3cad534 Add the near and id search operators back to autocomplete.
These were accidentally lost in
53d08b29367c0172e483064f213538d45098279e.

(imported from commit 11813fd43b5ecb2e15ed9f3276497837b9997bee)
2013-08-05 17:59:05 -04:00
Tim Abbott 6dd049fa26 Rename zephyr.js to zulip.js.
(imported from commit e62aa374f1bf2e75cebc00d0bba4e3ade82d19f6)
2013-08-05 17:59:04 -04:00
Steve Howell 01b40f3c98 Fix compose/topic regression (trac #1648).
When you are narrowed and hit "New stream message", the topic
will autofill.  This broke during the subject-to-topic
transition.

(imported from commit a9b471884c5cdae449e02ce7aa782add4a178077)
2013-08-05 17:58:45 -04:00
Waseem Daher bd0aa114c3 Randomize the sample email addresses in "share the love".
(imported from commit cccd5b8c47274167d052fe147d7d1da1e83c6562)
2013-08-05 17:14:51 -04:00
Waseem Daher c16651bf23 [schema] Add referral system
For now, we just get emails about referrals that we have to follow up
on manually.

I don't love using the name "referral" in some places and "invite" in
others, but we already use the verb "invite" to mean something else
and "invite" is a canonical noun.

(imported from commit 0814c18395952fcdef234c1584984f71ca1b6f37)
2013-08-05 17:14:51 -04:00
Jeff Arnold 386df6e58b Eliminate unnecessary calls to "function".
(imported from commit 8f6a90dde723c7f9e8a7929ce44e0f1fce869e81)
2013-08-05 16:59:49 -04:00
Steve Howell b3f60faf3f Restore centering when using the down arrow (or "j").
This restores the feature that hitting down when you are at the
last message automatically centers the last message.  This is not
a pure revert, because some additional code now goes through
navigate.down.

(imported from commit 2db1f247692ba068613a2d6c93f18ca7c13a16b8)
2013-08-05 16:10:01 -04:00
Steve Howell 1b1f80f3d7 Show "Home" less often as a search suggestion.
We now only suggest "Home" if you have an empty search box (suggestion #1),
or if you are typing "Home".  Before we'd show it as a way to get back
from various narrows.  This is trac #1596.

(imported from commit 9228bf45e9aaf9912d83efdf70338abb4b7e054f)
2013-08-05 15:56:12 -04:00
Steve Howell f9614d76a2 Disable always_open_compose on staging
(imported from commit 787d4c15c3e0a9dabebae1651cd5a670f5549b4d)
2013-08-05 11:10:49 -04:00
Jeff Arnold f38ad493b0 Revert "Eliminate unnecessary calls to "function"."
This reverts commit 30afb6eb4b037991ed0569db63e71dcce53e4554.

(imported from commit 3eebe2181870f933171d6140467b3d7beb402106)
2013-08-05 11:02:55 -04:00
Jeff Arnold 88245c36b4 Eliminate unnecessary calls to "function".
(imported from commit 30afb6eb4b037991ed0569db63e71dcce53e4554)
2013-08-05 10:36:56 -04:00
Scott Feeney f4e9a16989 Correctly highlight Topics With Caps when narrowed
(imported from commit d3ec5b246c2e6624cf9ff5359f54f9127fbd8483)
2013-08-05 10:19:49 -04:00
Jessica McKellar 666ce4333e Don't let CUSTOMER4 users change their names through the web interface.
(imported from commit eafd4efa8a9614ffa3bdc7dd22088e091e1c54c3)
2013-08-04 22:03:10 -04:00
Jeff Arnold 336324dac1 Make tab code handle the case that >1 msgs are being edited
(imported from commit b385c0d67ed1fe6363cdff0c39eb395399f04667)
2013-08-02 18:37:56 -04:00
Jeff Arnold afb5105ee4 Make Ctrl/cmd-enter save message editing.
Partially addresses Trac #1541.

(imported from commit 184a7b5cfd9f82da0e2b148ec891d69f7e50d6a3)
2013-08-02 18:37:56 -04:00
Jeff Arnold c03947a68f Make `Esc` abort message editing.
Partially addresses Trac #1541

(imported from commit afc5e4fd8b61a6cdd2aabfaf440be616f45b96a5)
2013-08-02 18:37:56 -04:00
Steve Howell 770bc5c96a Fix pointer motion at top/bottom of viewport.
We always intended to move the pointer up when you were at the
top of the viewport and scrolling up, and we always intended to
move the pointer down when you were at the bottom of the viewport
and scrolling down.  We didn't intend to move the pointer up
when you were at the bottom, or vice versa.  This commit fixes
that bug, simplifies the code, and inlines the code into ui.js.

(imported from commit 77e2ace9d2fc1025e1349e3be13c76c3a397fd38)
2013-08-02 18:18:04 -04:00
Steve Howell 4ad78ade68 Don't widen bottom whitespace on down-arrow.
We had a feature that if you hit the down arrow key when you
were at the last message, it would recenter you.  Waseem has bought
into temporarily removing this feature.  Justifications:

  1) We can always put it back.
  2) Autoscrolling makes it less relevant.
  3) The feature complicated the code a bit.
  4) The feature worked different for End than down arrow, due to
     a FIXME.
  5) It might have been a misfeature for users that want more
     control over their own scrolling.
  6) You can achieve the same essential effect by using PgDn
     or space.

(imported from commit fa6874bb5d29d7057bb1601f0b6d577bac1272c7)
2013-08-02 18:18:04 -04:00
Jeff Arnold e04eae82ce In the left sidebar, make the entire row clickable.
Addresses Trac #1287.

(imported from commit a71867c2435790ce8548fa0b27604b5b1844d624)
2013-08-02 17:44:44 -04:00
Steve Howell 5590eb21c0 Removed match_on_visible_text() in search.js.
It appears to have been unused for a while.

(imported from commit 04a0de9f60484da660a557ad2b9953c00b91c608)
2013-08-02 17:28:04 -04:00
Steve Howell a1531b4247 Remove dead vars in search.js
(imported from commit 7fb2fa835332bb909edf173b5f487be9bb592ff3)
2013-08-02 17:28:03 -04:00
Steve Howell b33858dd70 Created search_suggestion.js.
Moved 400+ lines out of search.js into search_suggestion.js.  This
leaves search.js primarily responsible for lots of little DOM
interactions, whereas search_suggestion is more about data.

(imported from commit 53d08b29367c0172e483064f213538d45098279e)
2013-08-02 17:28:03 -04:00
Steve Howell 95102dc1bd Refactor search_suggestions.js.
1. Change code comment in search.get_suggestion.

2. Remove side effects from search.get_suggestions.

The function get_suggestions() was updating a module-scoped variable
called search_object, but now it returns a dictionary to its caller.

3. Greatly reduce the scope of the search_object var in search.js.

I also clarified the comment around it a bit. We could squeeze
the scope of search_object even further by using a function wrapper, but
this is a big enough win for now.

(imported from commit 4b633dd30ab45d24b85ea1d10df27df5aaa0c959)
2013-08-02 17:28:03 -04:00
Steve Howell cd57a7d433 Simplify search.narrow_or_search_for_term.
For legacy reasons this function used to have convert item to
search_string via the search_object hash, because we used to
have an overly convoluted data model.  The mid-July-2013
refactoring on search.js made the data model simple, and this
little bit of cleanup follows up on that.

(imported from commit aeea629862e4307897f24eaa5fc364f2b12a7c52)
2013-08-02 17:28:03 -04:00
Scott Feeney c3fc279423 Remove extra space in presence descriptions
(imported from commit 46d47cc71a72aad4f8c7447451982cfeb10cc54e)
2013-08-02 16:26:46 -04:00
Waseem Daher 0bb304a516 Request Gravatars at 2x the size we need.
This is a bit wasteful on most systems, but will result in their
looking pretty sharp on Retina displays.

(I also go and actually fix up the size we request for a bunch of
these so that they actually match the size of the gravatar in the
document -- previously we were requesting a size 30 gravatar when we
were displaying it in a size 25 space, which leads to unnecessary
ugliness upon resize.)

(imported from commit 9152e6e128e0ac38d97d893cb8243e3b9185351b)
2013-08-02 15:58:55 -04:00
Steve Howell 6b9b33f769 Use PATCH again for patching bots.
This reverts a prior commit, but the earlier commit is fine
functionally; the earlier commit was a temporary measure.

Revert "Use POST, not PATCH, for patching bots."

This reverts commit c3146b23d5d7d134c2b80507eb87033ca375a4db.

(imported from commit ebfcb2bae72c11767f9750412440d40b7a2a4995)
2013-08-02 11:46:11 -04:00
Kevin Mehall a02fe71788 Make the "Get our app" onboarding popover less obnoxious.
* Only pop up on mouseover if you haven't completed the step previously,
    and only on the first mouseover.
  * Dismiss the popover if you click anywhere but the link

Trac #1471

(imported from commit 08904be59c15526f88a2633ebd6f2a046ec62197)
2013-08-02 10:24:28 -04:00
Scott Feeney 31bee946be Don't autocomplete @-mentions mid-word
Now the @ has to follow a space, newline or certain punctuation, or be
at the beginning of the message. This addresses the frequent complaint
that typing an email address e.g. scott@zulip.com is hard, because after
the @, it would try to autocomplete.

(imported from commit 043953be3928b0acf2a4ab2b4dd1a80e1a1aa882)
2013-08-01 18:42:39 -04:00
Waseem Daher 0663c7243c Enable always-open-compose for MIT, CUSTOMER4, Zulip.
(imported from commit 43602ebeed5396de038c59240a9d695ec411db89)
2013-08-01 13:00:15 -04:00
Waseem Daher 86cf40c8a9 Move feature_flags into its own file.
(imported from commit b775f85a24422d236b0079810b98b6b984cb60a2)
2013-08-01 13:00:15 -04:00
Tim Abbott 5a320db3c1 Add curly braces for all javascript if statements lacking them.
(imported from commit 32c7643d1a6ecdfaf634424d217938c8a368dade)
2013-08-01 11:47:54 -04:00
Kevin Mehall 112d37de86 Fade message dots faster when marked read by cursor.
(imported from commit a31b0601bf13bce377c24fff96a818023d5bdd1f)
2013-08-01 11:26:55 -04:00
Kevin Mehall 0cbee97ffd Change mark-as-read behavior.
Mark messages as read when with the pointer, but mark all messages
read if the last message is visible.

(imported from commit 4c1a928bd6966111f0f34c5207723656b5f193b9)
2013-08-01 11:26:55 -04:00
Kevin Mehall 0e0ed886e1 Add feature_flags mechanism to enable experiments.
In the future, this could come from the server to enable individual
experiments on a per-realm basis.

(imported from commit 8fd1ba1910b3cfd131f58bab8efbd11a42053bc3)
2013-08-01 11:26:55 -04:00
Steve Howell 0ed73df475 Rename some functions related to bot avatars.
(imported from commit 6f88ee71dda263bfe7b5c15baed02aaf00d35f15)
2013-08-01 11:05:40 -04:00
Steve Howell f7ca0117e6 Allow users to upload new avatars for their bots.
(imported from commit 9d7895a658740815f454c8bba400d7cff821b7f9)
2013-08-01 11:05:40 -04:00
Steve Howell d0060f24ed Add close() method to avatar objects.
The close() method will let you release handlers, as well as
doing everything clear() does.

(imported from commit 3a67c3f2226918cee10cf43598e0408fb186408a)
2013-08-01 11:05:40 -04:00
Steve Howell d505d494c8 avatar.set_up_file_input returns object now
The set_up_file_input() function now returns an object to the user
with a clear field.  This object will grow soon.

(imported from commit 7b3761eafddb392bd2c84a1685aa8d1811028a0f)
2013-08-01 11:05:39 -04:00
Steve Howell 784cab9df2 Use jQuery on() consistently in avatar.js.
(imported from commit c14105dbaa174ef9aec4fc11a12a44f25e74a246)
2013-08-01 11:05:39 -04:00
Steve Howell ab23c534b9 Use POST, not PATCH, for patching bots.
This is a temporary expedient measure to work around our
PATCH not supporting file uploads in our current Django setup.

(imported from commit c3146b23d5d7d134c2b80507eb87033ca375a4db)
2013-08-01 11:05:39 -04:00
Scott Feeney 38abee8e66 Refactor code to show/hide "All messages" link
Code prior to this commit was functionally working, but semantically
flawed — returning false does not short-circuit _.each like it does with
$.each. It now uses _.every, as suggested by Steve.

In addition I renamed the function to be more descriptive, added a
comment, and eliminated needless double negation.

(imported from commit b0666dfa01b2677b4eaf577fe9ced90ed0db2438)
2013-08-01 10:16:32 -04:00
Scott Feeney 1e642ae158 Use _.any instead of _.some
They are synonyms, and Zukeeper consensus is that _.any makes it clearer
what the function does.

(imported from commit 847383e27ccefeaff1ecff15f4cb4177c9e40c25)
2013-08-01 10:16:32 -04:00
Zev Benjamin 905354f7a1 For mit.edu, include .d instances in narrowed views
(imported from commit 502b36d1a62f3f8f7b956c701fd10f580e1927d7)
2013-07-31 18:30:28 -04:00
Zev Benjamin bae5924b53 Fix whitespace
(imported from commit 96937f8225bc7039f2a98163deb9b5b142c71c7f)
2013-07-31 18:30:28 -04:00
Zev Benjamin a637fadd18 Fix regexes for MIT narrows that include un- and -.d streams
The previous regex didn't escape the period in '.d' and was doing a
case-sensitive match to find the base stream name.

(imported from commit 43ef13733987e50dcead06b7bd3e768cb4395998)
2013-07-31 18:30:28 -04:00
Tim Abbott d6acd8fce9 Add support for narrowing to a single message ID.
This is mostly useful for sending someone a link to a single Humbug
message.

(imported from commit b0994a2bf503c84690b13ce89bbcf5bab829bf0c)
2013-07-31 14:59:05 -04:00
Tim Abbott ed6f5ac470 Fix time travel by adding new near: operator.
(imported from commit 727a68016090164b586cbe59e692676a00e8cd3a)
2013-07-31 14:59:01 -04:00
Scott Feeney 473a96fd1f Fix #1629 (wrong scroll pos on narrow)
(imported from commit ac78077f104b079406e745c3eb9ff11b759d033e)
2013-07-31 14:35:48 -04:00
Scott Feeney c56353138d Fix tracebacks on reload while composing
(imported from commit 5ba1c93b8af015197e77bd16ef9178a6e743a849)
2013-07-30 13:10:50 -04:00
Scott Feeney a35fff90cc Replace $.extend
(imported from commit 2c1ee3c2714d388f2a71398fe81c049cc54ff94d)
2013-07-30 12:12:59 -04:00
Scott Feeney 8703134a23 Replace $.each with _.each
In a few cases the $.each was doing something imperatively that was
terser and easier to understand by using a different Underscore method,
so a few of these I rewrote.

Some code was using the fact that jQuery sets `this` in the callback to
be the item; I rewrote those to use an explicit parameter.

Some code was using $(some selector).each(callback). I converted these
to _.each($(some selector), callback).

One function, ui.process_condensing, was written to be a jQuery $.each
callback despite being in a totally different module from code using it.
I noticed this and updated the function's args.

(imported from commit bf5922a35f257c168cc09ec1d077415d6ef19a03)
2013-07-30 12:12:58 -04:00
Scott Feeney 5842d5c335 Replace $.inArray with _.indexOf
(imported from commit 6bd9c87ac98b8951411fc050e1bff83684cf8618)
2013-07-30 12:12:03 -04:00
Scott Feeney 375b1f9eb3 Replace $.map with _.map
(imported from commit 97c7a6612d8d56d19f8650db0ea8906afc0f20ef)
2013-07-30 12:09:18 -04:00
Scott Feeney 88952fb2b1 Replace $.grep with _.filter
(imported from commit 3a8830f697551a91f94f06b37d01a3687d8c583d)
2013-07-30 12:06:22 -04:00
Steve Howell 6cf5b64b3c Update module.exports for various modules.
(This makes them play nice with node-style unit tests.)

(imported from commit 44fa97c9d38d0b7e82366b49db1425508b6aed67)
2013-07-30 08:54:23 -04:00
Steve Howell f11cc9e6a2 Extract search.get_suggestions().
(This makes testing a bit easier, plus it dedents some code.)

(imported from commit 80532990608cc51ca55d3354bd300734afd7942e)
2013-07-30 08:54:22 -04:00
Steve Howell 2275809103 Shorten names of internal functions in avatar.js.
Just have accept() and clear() for brevity sake.

(imported from commit 7bf9b4d89f1b7978ae7b07b5fba87b654c90e314)
2013-07-30 08:41:09 -04:00
Steve Howell 1c69b7ea46 Extract avatar.set_up_file_input.
(imported from commit c85087a4e098b1af2e4d26c97d0cb69c42d4f671)
2013-07-30 08:41:09 -04:00
Steve Howell e6609b3695 DRY up jQuery calls in avatar.js.
Extract some local variables to set up the next refactoring, where
we can parameterize the function.

(imported from commit 1c2801131c19a54713a0d5c2cc26c419412339b0)
2013-07-30 08:40:49 -04:00
Steve Howell e18b9ae3d7 Use get_file_input() to specify hidden file input for avatar uploads.
(imported from commit 898216219b36a65519439da73158da4e5996649b)
2013-07-30 08:40:49 -04:00
Steve Howell c5013c0ba1 Introduce validate_avatar function
(imported from commit 4d6d20e4b1c3b0998d0c40ca9b5c74cb7f3319e5)
2013-07-30 08:40:49 -04:00
Steve Howell 032415fcb4 Move bot avatar code to avatar.js (from settings.js).
This step of the refactoring really just moves the code.

(imported from commit 4d551c43d25723b2556448f47b6b61228e782f54)
2013-07-30 08:40:49 -04:00
Scott Feeney 209471a6c0 Fix disappearing stream sidebar chevron (#1587)
My mistake when refactoring popovers.js a month ago. Sorry everyone!

(imported from commit a588b44723a58fb01b6c3996d308e4e8ea11ec2f)
2013-07-29 19:23:09 -04:00
Steve Howell 546ae1023c Remove smartSpaceBar option from typeahead and search.
The option caused some race conditions on Firefox, and it is
really made moot by the naturalSearch option anyway.

(imported from commit dc7080c905ced9b2f4ad4275d82549acf09a59f7)
2013-07-29 16:42:14 -04:00
Steve Howell 46c4a6a9b3 Add unit test coverage to unread.js.
This covers most of the module's functionality, with special
emphasis on lines that use underscore.js (_.each and _.filter).

(imported from commit 074181a0273286a258504be634bdd1cead2eecd5)
2013-07-29 13:47:57 -04:00
Steve Howell 3d8ce28964 Use underscore in unread.js
(imported from commit 91befaaaff5d9a791a3c1bb4ff99f4085c27c4cb)
2013-07-29 13:47:57 -04:00
Tim Abbott bc4d7c687d Rename our custom JS events to use Zulip, not Zephyr.
(imported from commit 61ac456d394a6dbc14f3e9183a53313990db5059)
2013-07-29 12:11:26 -04:00
Tim Abbott 3bba0cc927 Move zephyr/static to just static.
It's not really a part of the server (aka the rest of zephyr/).

(imported from commit 27f6b6b064938ad927075a68d873e4b68710d279)
2013-07-29 12:11:26 -04:00