Commit Graph

212 Commits

Author SHA1 Message Date
Tim Abbott bb80c0cc24 compose_state: Extract insert_syntax_and_focus.
This moves the existing emoji picker code to a new library.
2017-10-30 17:12:56 -07:00
Vishnu Ks d8f8e29ff5 frontend: Show link to delete files in quota exceeded error. 2017-09-14 06:04:09 -07:00
Tim Abbott eb6d736df3 compose: Fix local rendering of previews.
Apparently, local rendering of previews had broken sometime in the
last few months in a refactoring that resulted in us passing a string,
rather than an object, into markdown.js.
2017-08-27 09:33:52 -07:00
Steve Howell 3f06f28ad7 sending messages: Extract sent_messages.js.
This commit extract send_messages.js to clean up code related
to the following things:

    * sending data to /json/report_send_time
    * restarting the event loop if events don't arrive on time

The code related to /json/report changes the following ways:

    * We track the state almost completely in the new
      send_messages.js module, with other modules just
      making one-line calls.

    * We no longer send "displayed" times to the servers, since
      we were kind of lying about them anyway.

    * We now explicitly track the state of each single sent
      message in its own object.

    * We now look up data related to the messages by local_id,
      instead of message_id.  The problem with message_id was
      that is was mutable.  Now we use local_id, and we extend
      the local_id concept to messages that don't get rendered
      client side.  We no longer need to react to the
      'message_id_changed' event to change our hash key.

    * The code used to live in many places:
        * various big chunks were scattered among compose.js,
          and those were all moved or reduced to one-line
          calls into the new module
        * echo.js continues to make basically one-line calls,
          but it no longer calls compose.report_as_received(),
          nor does it set the "start" time.
        * message_util.js used to report received events, but
          only when they finally got drawn in the home view;
          this code is gone now

The code related to restarting the event loop if events don't arrive
changes as follows:

    * The timer now gets set up from within
      send_messages.message_state.report_server_ack,
      where we can easily inspect the current state of the
      possibly-still-in-flight message.

    * The code to confirm that an event was received happens now
      in server_events.js, rather than later, so that we don't
      falsely blame the event loop  for a downstream bug.  (Plus
      it's easier to just do it one place.)

This change removes a fair amount of code from our node tests.  Some
of the removal is good stuff related to us completing killing off
unnecessary code.  Other removals are more expediency-driven, and
we should make another sweep at ramping up our coverage on compose.js,
with possibly a little more mocking of the new `send_messages` code
layer, since it's now abstracted better.

There is also some minor cleanup to echo.resend_message() in this
commit.

See #5968 for a detailed breakdown of the changes.
2017-08-01 08:58:56 -07:00
Steve Howell 90c5b53da3 Remove send_times_log feature.
We no longer use this in development.
2017-07-31 14:57:34 -07:00
Tim Abbott 6a50e13156 uploads: Remove legacy /json/upload_file endpoint.
This migrates Zulip to use the equivalent API endpoint that has been
present for a while.
2017-07-31 13:08:06 -07:00
Tim Abbott 4f4d28477d markdown: Rename markdown.contains_bugdown.
This name was confusing, since "bugdown" doesn't exactly suggest
"backend markdown processor" to people.
2017-07-28 17:51:33 -07:00
hollywoodno f7d1abaa25 compose.js: Prevent sending empty messages in preview mode.
This commit specifically addresses the issue when in preview mode,
while "enter sends" is enabled. Previously the messages were just
sent, now they must pass validation.

Fixes #5574.
2017-07-25 22:33:22 -04:00
Cory Lynch d32e89aae4 jQuery: Remove broken use of "removeAttr".
This function no longer sets properties to false, so the supported
way of doing this is to instead use prop(foo, false). Some tests
had to be fixed to accommodate this.
2017-07-24 10:54:47 -07:00
Steve Howell 0e25055c1d Add explicit message field for locally_echoed.
We now set locally_echoed to true for messages that are
locally echoed, and we change some of our code to look
for this flag.
2017-07-21 11:38:25 -07:00
Steve Howell 475eb21a5e Revert commits related to client_message_id.
I pushed a bunch of commits that attempted to introduce
the concept of `client_message_id` into our server, as
part of cleaning up our codepaths related to messages you
sent (both for the locally echoed case and for the host
case).

When we deployed this, we had some strange failures involving
double-echoed messages and issues advancing the pointer that appeared
related to #5779.  We didn't get to the bottom of exactly why the PR
caused havoc, but I decided there was a cleaner approach, anyway.
2017-07-14 12:13:35 -07:00
Steve Howell bc67f6a8ca Add sent_messages.track_messages().
This change has us tracking messages as soon as we start
sending the message to the server.  The next step is to
reconfigure the timeouts a bit to deal with the server not
responding.
2017-07-13 23:42:27 -04:00
Steve Howell 9ee2be4a0d Use client_message_id as key for sent_messages lookups.
We now use a client-side message id to track the state of our
sent messages.  This sets up future commits to start tracking
state earlier in the message's life cycle.

It also avoids ugly reify logic where we capture an event to
update our data structure to key on the server's message id
instead of the local id.  That eliminates the node test as well.

Another node test gets deleted here, just because it's not
worth the trouble with upcoming refactorings.
2017-07-13 23:42:27 -04:00
Steve Howell 7e88fb25b3 Move sent_messages callbacks into transmit_message().
This mostly sets the stage for a subsequent commit to start
using client_message_id as the key into sent_messages.

It has the nice side effect of making it more explicit that
certain things should always happen when transmit_message()
succeeds.

This commit does regress our node test coverage a bit.
2017-07-13 23:42:27 -04:00
Steve Howell 68f8ba0449 Generate client_message_id() sequentially.
This commit starts to decouple client_message_id from local_id.

We don't really take advantage of the decoupling in this
commit--in fact, it's a bit of a pain at first.  But this should
be a fully working checkpoint commit.
2017-07-13 23:42:27 -04:00
Steve Howell 25b59d0044 Extract sent_messages.message_state class.
This class helps us encapsulate the state of a message, with all
the dates/flags that get sent as part of /json/report_send_time.
2017-07-13 23:42:27 -04:00
Steve Howell f6d670ae3d Extract sent_messages.js.
This is mostly straightforward moving of code out of compose.js.

The code that was moved currently supports sending time
reports for sent messages, but we intend to grow out the new
module to track more state about sent messages.

The following function names in this commit are new, but their
code was basically pulled over verbatim:

    process_success (was process_send_time)
    set_timer_for_restarting_event_loop
    clear
    initialize

All the code in the new module is covered by previous tests that
had been written for compose.js.  This commit only modifies
a few things to keep those tests.

The new module has 100% node coverage, so we updated `enforce_fully_covered`.
2017-07-13 23:42:27 -04:00
Steve Howell 8fbb55df85 Introduce client_message_id on the server.
We are deprecating local_id/local_message_id on the Python server.
Instead of the server knowing about the client's implementation of
local id, with the message id = 9999.01 scheme, we just send the
server an opaque id to send back to us.

This commit changes the name from local_id -> client_message_id,
but it doesn't change the actual values passed yet.

The goal for client_key in future commits will be to:
    * Have it for all messages, not just locally rendered messages
    * Not have it overlap with server-side message ids.

The history behind local_id having numbers like 9999.01 is that
they are actually interim message ids and the numerical value is
used for rendering the message list when we do client-side rendering.
2017-07-13 23:42:27 -04:00
Aditya Bansal 85289163a4 compose.js: Refactor to extract of a helper func in test_on_events. 2017-07-11 12:14:09 -04:00
Aditya Bansal 783f75ef10 compose.js: Add a setup statement in an on() test. 2017-07-11 12:14:09 -04:00
Aditya Bansal 2479e74867 compose.js: Add coverage for message_id_changed event on document. 2017-07-09 08:49:45 -04:00
Aditya Bansal 51257ee93d compose.js: Add coverage for uploadFinished() function. 2017-07-09 08:49:45 -04:00
Aditya Bansal 18d2be0d5c compose.js: Add coverage for uploadError() function. 2017-07-09 08:49:45 -04:00
Aditya Bansal 43aaab3adf compose.js: Add coverage to progressUpdated() function. 2017-07-09 08:49:45 -04:00
Aditya Bansal 1f6ad92121 compose.js: Add coverage for uploadStarted() function. 2017-07-09 08:49:45 -04:00
Aditya Bansal d9a0217cfe compose.js: Add coverage for undo_markdown_preview_clicked event. 2017-07-09 08:49:45 -04:00
Aditya Bansal f67c9ae9d7 compose.js: Add coverage for markdown_preview_compose_clicked event. 2017-07-09 08:49:45 -04:00
Aditya Bansal 0b363b427f compose.js: Add coverage for attach_files_compose_clicked event. 2017-07-09 08:49:45 -04:00
Aditya Bansal ed3ab27908 compose.js: Add coverage to compose_invite_close_clicked event. 2017-07-09 08:49:45 -04:00
Aditya Bansal f9cbd015cb compose.js: Add coverage for compose_invite_users_clicked event. 2017-07-09 08:49:45 -04:00
Steve Howell 1cf18cfbeb compose: Avoid render for duplicate mentions.
There is no reason to render the template for compose mention
warnings if the user is already in the widget.

This commit also restructures the unit test significantly to more
carefully exercise each case, particularly in regard to when
templates get rendered.
2017-07-09 08:30:46 -04:00
Aditya Bansal bea44fb28a compose.js: Add coverage to compose_all_everyone_confirm_clicked.
(Steve Howell also helped.)
2017-07-08 10:50:48 -04:00
Aditya Bansal 777581a1e4 compose.js: Add coverage for usermention_completed.zulip event. 2017-07-08 10:42:20 -04:00
Steve Howell 7376934a77 zjquery: Add $.create() method.
This commit add $.create(), which allows you to create a
jQuery object that just has a name to identify it, as opposed
to some selector or HTML fragment.  It's useful for things that
are really used as stubs.

This also fixes a bunch of the existing tests to use $.create().

Before this fix, you could actually just do $('some-stub'), but
now we enforce that the input to $() looks like a valid selector
or HTML fragment, and we make some exceptions for things like
window-stub and document-stub.
2017-07-08 10:32:32 -04:00
Aditya Bansal e99067cfc3 compose.js: Add node test coverage for abort_xhr() function. 2017-07-07 12:01:41 -04:00
Aditya Bansal d9009f0c84 node tests: Add test_trigger_submit_compose_form().
(Steve Howell also contributed to this.)
2017-07-07 12:01:26 -04:00
Aditya Bansal ada54d4574 compose.js: Add node test coverage for update_fade().
(Steve Howell made small changes.)
2017-07-07 11:57:43 -04:00
Aditya Bansal cf2a9b74d5 compose.js: Add node test coverage to initialze() function.
(Steve Howell contributed to this as well.)
2017-07-07 11:19:02 -04:00
Aditya Bansal a6082a2b95 compose.js: Add coverage for transmit_message() function. 2017-07-07 08:29:33 -04:00
Aditya Bansal f7e37d37b3 compose.js: Add coverage for finish() function. 2017-07-07 07:50:02 -04:00
Aditya Bansal c17efffa6a compose.js: Add coverage for enter_with_preview_open() function. 2017-07-07 07:50:02 -04:00
Aditya Bansal 55f05a5f53 compose.js: Add coverage for send_message() function. 2017-07-06 17:44:27 -04:00
Aditya Bansal 74f40a0a58 compose.js: Add node test coverage for report_as_received() function. 2017-06-30 19:57:15 +05:30
Aditya Bansal 4b3c2931ea compose.js: Add test coverage for mark_rendered_content_disparity(). 2017-06-30 19:57:15 +05:30
Aditya Bansal 7e585acfa5 compose.js: Add coverage for send_message_success() function. 2017-06-30 19:57:15 +05:30
Aditya Bansal 7f4781e17d compose.js: Add test coverage for update_email(). 2017-06-30 19:57:15 +05:30
Aditya Bansal 3d043d0109 compose.js: Add coverage for get_invalid_recipient_emails(). 2017-06-30 19:57:15 +05:30
Aditya Bansal 9437895c9e compose.js: Add coverage for validate_stream_message() function. 2017-06-30 19:57:15 +05:30
Aditya Bansal a103949c2b i18n.js: Fix issue of i18n stub not returning 'translated: ' prefix. 2017-06-29 15:18:08 -04:00
Aditya Bansal 4d84be16ca i18n.js: Fix issue with i18n being cleaned up in namespace cleanup. 2017-06-29 15:18:08 -04:00
Aditya Bansal cc34e3d382 compose.js: Add coverage for validate_stream_message_address_info(). 2017-06-29 18:02:25 +05:30
Aditya Bansal 92b43c7965 compose.js: Add test for validate_stream_message_address_info().
In this commit we add only one test for the case of unsubscribed
streams in validate_stream_message_address_info() function."
2017-06-28 07:45:21 -04:00
Aditya Bansal 6c787ac569 compose.js: Add test for validate_stream_message_address_info().
In this commit we only add a single test for the case of subscribed
stream to validate_stream_message_address_info() function.
2017-06-28 07:45:21 -04:00
Aditya Bansal 63401833b4 compose.js: Add node test coverage for validate function. 2017-06-28 07:45:21 -04:00
Steve Howell c999bdf823 compose: Distinguish get_message_type() from composing().
We now only call compose_state.composing() in a boolean context,
where we simply care whether or not the compose box is open.  The
function now also returns true/false.

Callers who need to know the actual message type (e.g. "stream" or
"private") now call compose_state.get_message_type().
2017-04-24 12:42:06 -07:00
Steve Howell 70b7d4c00b Extract compose_state.js.
This is mostly just moving methods out of compose.js.

The variable `is_composing_message`, which isn't a boolean, has
been renamed to `message_type`, and there are new functions
set_message_type() and get_message_type() that wrap it.

This commit removes some shims related to the global variable
`compose_state`; now, `compose_state` is a typical global
variable with a 1:1 relationship with the module by the same
name.

The new module has 100% line coverage, most of it coming
via the tests on compose_actions.js.  (The methods here are
super simple, so it's a good thing that the tests are somewhat
integrated with a higher layer.)
2017-04-18 12:26:58 -07:00
Steve Howell dd0c50f0df Extract compose_actions.js.
This module extracts these two functions that get called by
several other modules:

    start()
    cancel()

It is a little bit arbitrary which functions got pulled over
with them, but it's generally functions that would have only
been called via start/cancel.

There are two goals for splitting out this code.  The first
goal is simply to make `compose.js` have fewer responsibilities.
The second goal is to help break up circular dependencies.
The extraction of this module does more to clarify
dependencies than actually break them.  The methods start()
and cancel() had actually been shimmed in an earlier commit,
and now they no longer have a shim.

Besides start/cancel, most of the functions here are only
exported to facilitate test stubbing.  An exception is
decorate_stream_bar(), which is currently called from
ui_init.js.  We probably should move the "blur" handler out
of there, but cleaning up ui_init.js is a project for another
day.

It may seem slightly odd that this commit doesn't pull over
finish() into this module, but finish() would bring in the
whole send-message codepath.  You can think of it like this:

* compose_actions basically just populates the compose box
* compose.finish() makes the compose box do its real job,
  which is to send a message
2017-04-14 13:09:19 -07:00
Sampriti Panda 32e76c2c60 drafts: Move snapshot_message from compose to drafts
Previously drafts called compose.snapshot_message which would then
get the message object from compose.create_message_object. This method often
checked for the validity of stream/user recipients which would often cause tracebacks.

The new method in drafts.snapshot message just gets the data from the fields and
stores them in the draft model without any additional checking.
2017-03-30 10:20:37 -07:00
Tim Abbott 8b9e78e486 compose: Extract and test get_focus_area. 2017-03-21 17:24:40 -07:00
Steve Howell 16a37754cf Add recipient() and composing() shims. 2017-03-18 15:52:50 -07:00
Steve Howell df2abf0529 Populate message.to_user_ids in compose.js. 2017-02-26 16:18:02 -08:00
Steve Howell 6c39b4775c node test: Add tests for compose.js. 2017-02-26 16:18:02 -08:00