Commit graph

869 commits

Author SHA1 Message Date
lilia
c9b4ae6e80 Save 'video/quicktime' files as .mov
Sometimes .mov files arrive with content type video/quicktime, but must
be saved to .mov in order for osx to recognize them as videos and open
the appropriate default program, display thumbnails, etc...

// FREEBIE
2017-04-18 16:27:50 -07:00
lilia
a27ea20f3e Improve unsupported file type handling
Make arbitrary files look nicer and display the filename.

If an audio or video element fails to load for any reason, timeout after
a few seconds and render it as an arbitrary file. Also short circuit to
this treatment for common audio and video file types that we know are
going to fail, e.g., proprietary formats from apple.

// FREEBIE
2017-04-18 16:27:50 -07:00
lilia
27a1c9f18a Populate attachment file size
// FREEBIE
2017-04-18 12:08:37 -07:00
lilia
fc514aa96f Add support for attachment file names
Send, receive, and save attachment filenames. Use them as suggested
names when saving files.

// FREEBIE
2017-04-18 11:48:56 -07:00
lilia
44a4ff3b52 Refactor install view
Let install view manage the connection to the provisioning socket as
well as cleaning up the window on completion, simplifying options.js.
Call `remove` so that the view stops listening when the window closes.
Move view script and template to background page.
Adds ability to hide nav if this isn't our first run.

// FREEBIE
2017-04-13 13:15:42 -07:00
lilia
df65585e71 Network status listens to some global events
Listen for reconnectTimer to display reconnection info. Listen for
unauthorized to update network status immediately after a failed login,
rather than waiting for the normal 5s interval to time out.

// FREEBIE
2017-04-12 20:43:16 -07:00
lilia
d3492960a6 Display info in network status when unlinked
When we can't connect due to being unlinked, network status indicator
will show an appropriate informational message and a button to open the
installer window to relink.

// FREEBIE
2017-04-12 20:43:16 -07:00
lilia
587e5265c5 Only re-render network status when it changes
// FREEBIE
2017-04-12 20:43:16 -07:00
Sam Vevang
ed4991974b set up a new view for displaying the network status
// FREEBIE
2017-04-08 00:10:56 -07:00
alecglassford
ef4b4da2a3 Make search clear button ("x") persist w/o hover
This makes the "x" in the search bar always visible when there is
text in the search box, even if the mouse is not hovering, hopefully
making for a clearer UI around search and resolving issue #741

The implementation adds the "x.svg" as a background image to the search
box when it is classed with .active, in addition to the
-webkit-search-cancel-button, which is still there for the actual
functionality but only appears on mouse hover (one tiny snag is that
coloring appears slightly different on hover, at least on my screen -
don't know if this is a problem).

I accounted for both ltr and rtl text-direction by using
getComputedStyle(...).direction to detect from the input's dir="auto"
- if there's a more elegant way to do this, please suggest. An ideal
solution would use the :dir pseudo-class but it's not implemented
in Chrome yet - https://developer.mozilla.org/en-US/docs/Web/CSS/:dir

For now, I added the direction-checking to inbox_view.js. I see that
input.search is also used in new_group_update_view.js and
recipient_input_view.js but neither of these views seem to be in use (?)
and they don't set the .active class anyway, so I ignored them.

Update: Amended version a few hours later - fixed and manually tested
color and spacing for iOS and Android Dark themes. Also made some new
SASS variables to make things DRYer and fixed my tab size.
2017-04-08 00:06:48 -07:00
lilia
e4b9c51f88 Rework expiring messages management
// FREEBIE
2017-02-22 16:18:01 -08:00
lilia
0e31644c28 Remove spurious update to conversation on delivery receipts
Previously this would trigger the conversation to refresh it's last
message.

// FREEBIE
2017-02-22 15:41:12 -08:00
lilia
ace59147ab Reduce unnecessary updates on conversations at startup 2017-02-22 01:22:44 -08:00
lilia
6509646bdb Set expireTimer to null to unset
// FREEBIE
2017-02-22 01:17:20 -08:00
lilia
cd0fe7037b Add replayable error for signed key failure
Disable message sending if signed key updates fail too many times, but
allow the user to retry sending.

// FREEBIE
2017-02-16 18:06:19 -08:00
haffenloher
e8de2f0c52 Increase image constraints to 6 MB / 4096 px
Matches WhisperSystems/Signal-Android@d2be49af

Closes #1055

// FREEBIE
2017-02-08 17:05:33 -08:00
beejaygee
76c165a10a Add copy and paste for images
Switch comparison operator to ===

Move to stricter parsing of clipboard items
2017-02-07 19:26:09 +08:00
Blake Griffith
1e498294e0 Add attachment_views_test.js tests 2017-02-06 21:23:35 -08:00
lilia
aa55b6a538 Confirm device name with enter key
Use form and submit elements for their built in mouse and keyboard event
handlers.

// FREEBIE
2017-02-06 20:10:40 -08:00
karissa
eb5c95e287 Add a few missing translatable strings to conversation search view 2017-02-03 20:48:05 -08:00
Asa Ayers
bda0430805 Add an option to play audio notifications 2017-02-02 09:00:14 -06:00
Bernhard Steindl
e2cb45c1da Push picture max edge to 2048 and max size to 4 MB
Closes #1032 and catches up with Android
2017-01-25 20:40:25 -08:00
lilia
9ef61d43f4 Update conversation lastMessage from database
Don't set lastMessage, let it update itself as needed, such as when
first rendering a conversation list item, and when its messages are
sent, received, or destroyed.
2017-01-25 20:40:25 -08:00
lilia
a623f909f2 Move key change advisory content to the model
Return this content from a helper method so it can be used to populate
the last message on conversations.
2017-01-25 20:40:25 -08:00
lilia
260f50c104 Add id attr to key change advisory elements
The id attribute is needed to ensure that message elements are inserted
in the correct place in the DOM
2017-01-25 20:40:25 -08:00
lilia
41216f1378 Add timestamps to attachment filenames 2017-01-25 20:40:24 -08:00
lilia
05ed7c3822 Merge timer update functions 2017-01-25 20:40:24 -08:00
Ikarulus
53cd3af78b Added a dark theme
I added a dark theme in order to solve #328.
This may fix #328 at least partially.
2016-12-02 00:41:42 +01:00
lilia
0854b19371 Revert "Don't load group contacts unnecessarily"
This reverts commit 6699571910.

Not quite ready for primetime.
2016-11-16 22:25:36 +01:00
lilia
6699571910 Don't load group contacts unnecessarily
There are some cases when we want to initialize a group object without
loading its contacts, such as while processing delivery receipts. We
really only need to load the contacts for a group/convo when we are
rendering it, so let the front end handle those cases (which most of
them do already).
2016-11-16 13:33:04 +01:00
lilia
35270dbbb4 Use timeout-based animation for hourglasses
CSS animations are convenient but costly if you have hundreds of them.

Fixes #945
2016-10-30 16:53:17 +09:00
Benedikt Constantin Radtke
520be3d5db Fixed bubble timestamp update timer breakdown
TimestampView's getRelativeTimeSpanString called moment() twice while
calculating the timeout. If there was a minute/hour/day wrap between
these 2 calls, the calculated delay was 0 and thus no timer was
scheduled, since if (this.delay) evaluated to false.

Fixes: #857, #460

// FREEBIE
2016-10-28 14:26:51 +09:00
Benedikt Constantin Radtke
add159dde9 Localized the message detail view's timestamps
Momentjs will now format the timestamps depending on the locale.

Fixes: #954

// FREEBIE
2016-10-27 00:49:04 +02:00
lilia
e86142d07c Hide verification QR code
The scannable fingerprint format has changed, leaving our qr codes out
of date and thus unscannable.
2016-10-22 02:24:54 +09:00
lilia
b5f5c4604c Fix missing hourglass on some expiring messages
Resolves a race condition between marking messages read and
loading/rendering those messages in the frontend.

Fixes #942
2016-10-12 10:37:10 +09:00
lilia
657fa2725f Adjust hourglass vertical alignment 2016-10-11 22:52:40 +09:00
lilia
15a9423a17 Change Identity to Safety Numbers in conversation menu
Fixes #935
2016-10-08 11:06:20 +09:00
2-4601
669338c717 i18n 'Theme'
// FREEBIE
2016-10-07 19:27:05 +09:00
paolo.ingls@gmail.com
d4f7b9984b Fixed bug920
//FREEBIE
2016-10-07 19:23:45 +09:00
lilia
51e902c26f Remove dead code 2016-10-07 11:02:26 +09:00
lilia
674eeb8313 Remove refs to appWindow
We only need the regular window, not the AppWindow interface, which is
specific to chrome apps.
2016-10-07 11:02:26 +09:00
lilia
9da4cdefd7 Style fix 2016-10-07 11:02:26 +09:00
Paolo Inglese
7cd45714a5 Font size should be adjustable
//FREEBIE
2016-10-07 11:02:26 +09:00
lilia
fcffcd35af DRY 2016-10-07 09:29:53 +09:00
2-4601
81e1b84129 Fix 2nd person conjugation in exp. timer messages
// FREEBIE
2016-10-07 09:25:19 +09:00
lilia
34888160bb Fix re-appearing disappearing message ui
Fix a bug where entering the message detail view and then going back
would cause the timer menu to appear.
2016-10-06 02:56:33 +09:00
lilia
94c1ac6f09 Fix message insertion for the first element inserted 2016-10-05 22:43:31 +09:00
lilia
4ee2652367 Fix wrong contact in some timer updates
Mistakenly showed 'You' for timer updates inferred from incoming
messages.
2016-10-05 22:31:30 +09:00
lilia
790407d42e Add qr codes 2016-10-05 19:11:39 +09:00
lilia
f05d693994 Switch from fingerprints to safety numbers 2016-10-05 19:11:39 +09:00
lilia
7fe708d195 Insert keychange advisories
On click, these open a verification panel for the relevant contact,
within this conversation.

// FREEBIE
2016-10-05 19:11:39 +09:00
lilia
1fe90ecdcb Add frontend for safety numbers approval setting
Adds the checkbox under settings.

// FREEBIE
2016-10-05 19:10:20 +09:00
lilia
5899654ea5 Remove log message 2016-10-05 19:09:21 +09:00
lilia
de744a6c55 Fix messages being inserted in the wrong place
Usually new elements are inserted in a predictable order relative to the
sort order of the models/collection, but it's not garaunteed. This fixes
up message element insertion to handle the general case where elements
can be added in any order and must be displayed in correct order as
determined by the collection's sort function. In the worst case, we'll
have to iterate over the entire list of elements to find the right spot,
but in practice most of the time we can short circuit based on the index
of the model or by looking for the predecessor or successor of the
element in question.
2016-10-05 19:09:21 +09:00
lilia
0bba096510 Use 'You' instead of your own phone number 2016-10-05 19:09:20 +09:00
lilia
56aee5e8ef Update conversation snippets automatically
Fixes stale snippets after the message has expired
2016-10-05 19:09:20 +09:00
lilia
2b2c6ab040 Frontend for timer updates and timer indicator 2016-09-29 16:17:01 -07:00
lilia
4cd2c03687 Add clock svg style 2016-09-28 17:20:03 -07:00
lilia
e809a0cf8b Breakout timer rendering into its own view
Make width and height constant.
2016-09-28 17:20:03 -07:00
lilia
bd713352e3 Hourglass can start at any percentage
This breaks the css-purity of our mixin but is necessary in order to
apply the initial offset of the hourglass animation dynamically, since
jquery can't manipulate arbitrary css on psuedo elements.
2016-09-28 17:20:02 -07:00
lilia
5f92ccd524 Render animated hourglass when messages are expiring 2016-09-28 17:20:02 -07:00
lilia
1383dc141f Ensure that expired messages are removed from the frontend 2016-09-28 17:20:02 -07:00
lilia
96fd017890 Support for incoming expiring messages
When initialized, or when expiration-related attributes change, expiring
messages will set timers to self-destruct. On self-destruct they trigger
'expired' events so that frontend listeners can clean up any collections
and views referencing them.

At startup, load all messages pending expiration so they can start their
timers even if they haven't been loaded in the frontend yet.

Todo: Remove expired conversation snippets from the left pane.
2016-09-28 17:20:02 -07:00
lilia
5b5a430114 Support i18n with multiple links
We can now pass a variable number of hrefs into i18n_with_links rather
than just one.
2016-09-27 13:34:54 -07:00
lilia
9b645f90c8 Remove Android requirement from install flow
// FREEBIE
2016-09-26 10:43:51 -07:00
lilia
b0c59233f3 Add test fixtures
Test page loads fixtures and renders the inbox view. This may be useful
for smoke testing style changes or generating screenshots with
pseudo-realistic data.

Includes a couple small changes to get rendering working outside the
app.
2016-09-23 19:51:42 -07:00
lilia
c16e80c5e4 Let key verification view lazy-load keys
// FREEBIE
2016-09-20 13:45:21 -07:00
lilia
edd6f58539 Update display when contact colors change
// FREEBIE
2016-09-12 11:44:52 -07:00
lilia
487f75dd27 Fix lint
// FREEBIE
2016-09-08 11:57:34 -07:00
lilia
f610233ef6 Add support for syncing blocked numbers
// FREEBIE
2016-09-07 13:04:45 -07:00
lilia
141cdef2a4 Generalize toast view template
// FREEBIE
2016-09-07 13:04:45 -07:00
lilia
ff490994ab Render emoji in group name in group updates
// FREEBIE
2016-09-01 16:01:08 -07:00
lilia
baff77c509 Revert "Remove Android requirement from install flow"
This reverts commit 4b9f7d518e.
Put this back when iOS desktop support is ready for general release.
2016-09-01 14:04:46 -07:00
lilia
9deaa95e8c Strip unicode null from deviceNames
Not sure how or why but sometimes deviceNames arrive on the server
containing a null char.

// FREEBIE
2016-09-01 13:19:27 -07:00
lilia
f042378a37 Upgrade emoji support and switch to apple emoji
Use emojijs for replacing unicode with image tags for display. We were
already using it to replace colons with unicode. Additionally it has
a companion data repo that is kept up to date with images from all
the common image sets.

// FREEBIE
2016-09-01 11:51:53 -07:00
lilia
4b9f7d518e Remove Android requirement from install flow
// FREEBIE
2016-08-31 15:04:01 -07:00
lilia
b5191e78c3 More themeing
Restyle message input and welcome screen
Cleanup search, headers

// FREEBIE
2016-08-30 18:31:03 -07:00
lilia
5333f89d9d Fix svg icon colors
// FREEBIE
2016-08-30 18:31:02 -07:00
lilia
6c05a71424 Tune up ios bubble style
// FREEBIE
2016-08-30 18:31:02 -07:00
lilia
8fbb0d05f5 Add settings ui for theme
// FREEBIE
2016-08-30 18:31:02 -07:00
lilia
7b9894d688 Refactor css to support theming
Move away from inline style attributes for setting contact colors.
Apply colors by name via css classes instead. Also lays groundwork
for syncing contact colors.

// FREEBIE
2016-08-30 18:31:02 -07:00
lilia
3531667207 Fix closing recorder when clicking away
// FREEBIE
2016-08-25 11:40:40 -07:00
lilia
87f4029210 Fix lint
// FREEBIE
2016-08-24 16:56:24 -07:00
lilia
3aa72d2244 Address large font size edge cases
Fix some visual bugs occuring at large font size:
  * Contact names break onto the next line after their avatars in
    message detail screen
  * Settings menu font-size failed to scale
  * Handle Content overflow in modals.

// FREEBIE
2016-08-24 16:47:39 -07:00
lilia
b330b80484 Change font size on ctrl+scroll
Fixes #864

// FREEBIE
2016-08-24 16:10:02 -07:00
lilia
9fa7e7f462 Remove unused view
// FREEBIE
2016-08-24 16:08:29 -07:00
lilia
645e05c2b9 Add support for new fingerprint format
This will be ready to roll whenever Android/iOS is.

// FREEBIE
2016-08-24 01:50:46 -07:00
lilia
4f46a164ba Add voice notes
// FREEBIE
2016-08-23 16:16:31 -07:00
lilia
9ab64ec44d Allow localization of month-day format string
The short month-day format ex: 'Aug 8', is not built-in to momentjs, so
we need to localize it.

// FREEBIE
2016-08-18 10:41:05 -07:00
lilia
67c7a06c28 Use momentjs for timestamp localization
Let momentjs handle proper pluralization of relative times. This comes
at the sacrifice of displaying 'minutes' in the conversation list
timestamp rather than 'min'. Note that we don't use moment's fromNow
instance method so as to preserve the rounding logic that matches the
Android client.

// FREEBIE
2016-08-11 12:22:32 -07:00
lilia
4d9b6917d7 Fix timestamp tests
These were failing because chrome's i18n functions aren't available in
test.

// FREEBIE
2016-08-05 17:28:16 -07:00
lilia
688b297050 Move window.chrome reference to chromium.js
// FREEBIE
2016-08-05 17:13:55 -07:00
lilia
fed8f62617 Remove untranslatable strings from locale file
// FREEBIE
2016-08-05 13:41:23 -07:00
lilia
6a3a724dc4 Add momentjs locales
// FREEBIE
2016-08-05 13:20:39 -07:00
Benedikt Radtke
e836bfd3f7 Added basic localization for timestamps
This commit implements basic localization for the timestamps in conversations and the conversation list.

// FREEBIE
2016-08-04 17:40:13 -07:00
lilia
3a50a892dc Don't sort if already sorted
// FREEBIE
2016-07-28 18:39:55 -07:00
lilia
748215e285 Fix style
// FREEBIE
2016-07-14 11:09:03 -07:00
Benedikt Constantin Radtke
2870c1fff2 Fixed fastforwarding closing videos' fullscreen mode
This commit stops the MessageView from adding the attachment more than once. Previously an attachment was appended to the MessageView every time an update
event was emitted, which happens when forwarding.

// FREEBIE
2016-07-14 11:03:14 -07:00
lilia
8a153e942e Fix lightbox
// FREEBIE
2016-06-30 16:56:51 -07:00
lilia
5bff1d2cab Scope media pausing to the open conversation
// FREEBIE
2016-06-30 12:54:00 -07:00
Benedikt Radtke
d5b003a15e Fixed media pausing behaviour when clicking the conversation list
This commit changes the inbox to stop video and audio elements when selecting a new conversation, and to not stop such elements when the same
conversation was selected (fixes #391).

// FREEBIE
2016-06-30 12:47:06 -07:00
lilia
f670061669 Pressing escape closes the lightbox
// FREEBIE
2016-06-30 12:28:36 -07:00
lilia
a069939f65 Refactor attachment saving for DRYness
// FREEBIE
2016-06-30 12:28:36 -07:00
Benedikt Radtke
a1345c52b4 Added Save-As dialog for unsupported filetypes
Despite the "click to save"-description of unsupported file types, clicking them did not save them.
This commit implements a Save-As dialog instead of opening the file in chrome.

// FREEBIE
2016-06-30 00:18:36 -07:00
lilia
9091233950 Open images in a lightbox
Adds file-write permission for saving to disk from lightbox.

Fixes #810

// FREEBIE
2016-06-20 11:55:23 -07:00
lilia
8e1d884a10 Add button for re-importing contacts from phone
Add a section under settings for performing a contact sync from your
mobile device. This just re-runs the same import operation that occurs
at install/link time.

// FREEBIE
2016-06-16 16:43:07 -07:00
lilia
3cd80d3f1e Remove tool tip from unregistered user errors
// FREEBIE
2016-05-26 10:59:43 -07:00
lilia
58c3fe047e Make error messages clickable
// FREEBIE
2016-05-25 20:39:43 -07:00
lilia
b2f07984df i18n unregistered user errors
// FREEBIE
2016-05-25 20:33:14 -07:00
lilia
b6f785737c Restyle error icons, move them outside the bubble 2016-05-25 20:32:00 -07:00
lilia
292260d973 Remove timestamp logging
// FREEBIE
2016-05-23 18:25:03 -07:00
2-4601
d861797d66 i18n 'Permanently delete this conversation?'
// FREEBIE
2016-05-05 12:54:15 -07:00
lilia
1d60dc38fb Rename axolotl storage
// FREEBIE
2016-04-22 13:43:30 -07:00
lilia
1fe5d63015 Update protocol libs
Rename storage functions

// FREEBIE
2016-04-21 18:36:16 -07:00
lilia
d5dfffd9da Darken the scrollbar on hover
// FREEBIE
2016-04-21 12:06:40 -07:00
lilia
7b29a567b5 More consistent timestamps
* Apply the same rounding to in message bubbles and conversation list.
  Also make them consistent with Android's relative times. Fixes #682
* Show full timestamps when hovering on relative time
* Compute timestamp update delays more precisely:
  Set timestamps to self-update as soon as they are able to change
  rather than a fixed time since the last update.
* Refactor for customizable/localizable relative times
* Update timestamp tests
* Log timestamp update intervals to help debug #460
2016-04-21 12:06:39 -07:00
lilia
21bfb61b7a Maintain scroll position when textarea resizes
Fixes #770

// FREEBIE
2016-04-18 19:15:36 -07:00
lilia
3ac7552d2f Fix errant change event handler from firing
A change in the text field was firing the previewImages handler.

// FREEBIE
2016-04-18 19:15:36 -07:00
lilia
47320fbbc5 Fix file input bug introduced in 28c602a
Fix bug where clicking the attachment button to select a file would
immediately send any text already entered into the message input.

// FREEBIE
2016-04-15 14:40:40 -07:00
lilia
bb2868f1ec Debounce updates to notifications and other events
Wait for one second of silence before displaying new notifications,
updating the unread count and conversation list previews.

Fixes #470
2016-04-11 14:55:38 -07:00
lilia
1f4587795e Add link to github on debug log
// FREEBIE
2016-04-09 20:55:21 -07:00
lilia
f3de290f7c Make debug log link focusable/selectable
Add button to open in a new tab. Stye as input group.

// FREEBIE
2016-04-09 20:53:39 -07:00
2-4601
e874b61839 Fix typo of quality argument in image compression
The quality value should be a float in the range 0.0 to 1.0.
Other values (e.g. 50) are discarded silently and a default is used.

Fixes #713

// FREEBIE
2016-04-09 14:17:47 -07:00
lilia
2506b2115d Log when fetching messages
// FREEBIE
2016-04-08 15:41:46 -07:00
lilia
9aa429e18a Add frontend support for expiring releases
When a release expires, it gets a persistent banner notification to
upgrade, and an ephemeral toast warning when trying to send a message.

// FREEBIE
2016-04-03 21:11:50 -07:00
lilia
d8d34e7afc Icon upgrade
Also remove unused images.

// FREEBIE
2016-04-01 13:59:57 -07:00
lilia
1aa975e199 Differentiate active vs selected conversation states
// FREEBIE
2016-04-01 11:37:25 -07:00
lilia
8c03d3e088 Fix sorting of the last element
// FREEBIE
2016-03-27 15:29:53 -07:00
lilia
07a0463b65 Fix conversation list self-resorting
When deleting all messages in a conversation, the entry in the left pane
should be inserted into the alphabetical portion of the list. To keep it
in this collection, do not nullify active_at.

To ensure the list view is keeping itself correctly sorted, make sure
that resorting behavior is triggered any time a relevant attribute is
changed.

This fixes deleted conversations jumping to the top of the list, and
conversation order scrambling when getting a group or contact sync
message from our master device.

Fixes #734

// FREEBIE
2016-03-25 14:32:57 -07:00
lilia
76652c2622 Update style and copy on key changes
// FREEBIE
2016-03-24 13:20:50 -07:00
lilia
512c5bf739 Incoming bubbles have sender's color background
// FREEBIE
2016-03-23 17:41:24 -07:00
lilia
5a9358efc9 Reorder object members
Group click events together, put custom events at the bottom.

// FREEBIE
2016-03-23 15:09:05 -07:00
lilia
198cc70cef Remove unusued event handlers
The conversation view now handles displaying and listening to the back
button.

// FREEBIE
2016-03-23 15:06:23 -07:00
lilia
6fe9c3f964 Nest key verification inside conflict dialogs
// FREEBIE
2016-03-23 15:04:42 -07:00
lilia
3901bcb8df Style resend button as an inline link
For messages that failed to send due to network errors, this change
allows retrying them directly from the main conversation view rather
than only from the message detail view.

// FREEBIE
2016-03-22 15:38:22 -07:00
lilia
08da29969c Fix menu behavior
Opening the global menu should close the conversation menu and vice
versa.

// FREEBIE
2016-03-22 11:01:37 -07:00
lilia
d24eaa655a Tweak styles on key verification view
// FREEBIE
2016-03-21 18:42:05 -07:00
lilia
b57f26bac4 Ignore clicks on the placeholder and its contents
// FREEBIE
2016-03-21 17:46:09 -07:00
lilia
d3b035121d Clean up bottom bar styles
// FREEBIE
2016-03-21 17:17:39 -07:00
lilia
234f937bc7 Conversation subscreens share a header
// FREEBIE
2016-03-21 15:37:53 -07:00
lilia
d391f07c1e Change right header color
// FREEBIE
2016-03-21 11:03:50 -07:00
lilia
a925657c45 Fix global menu close handler
Previously, clicking on a conversation menu would not close the global
menu.

// FREEBIE
2016-03-20 23:34:56 -07:00
lilia
b094607e0d Highlight bottom bar when focused
// FREEBIE
2016-03-20 23:15:21 -07:00
lilia
8bb8ed8151 Change left pane header color
// FREEBIE
2016-03-20 21:01:45 -07:00
lilia
7310afd1b4 Replace message list loading spinner with bar
// FREEBIE
2016-03-18 17:59:54 -07:00
lilia
647c2761e0 Move restart button into global menu
// FREEBIE
2016-03-18 16:21:55 -07:00
lilia
18a5ce8e54 Restyle conversation panel
// FREEBIE
2016-03-18 13:09:45 -07:00
lilia
760bfffb50 Show all contacts all the time
Contacts without conversation identity appear in alphabetical order at
the end of the inbox.

// FREEBIE
2016-03-18 11:21:11 -07:00
lilia
b4960b29d8 Remove newContact attribute
This was used as a flag by a UI that no longer exists. Now it
erroneously gets saved when creating a conversation from a bare phone
number.

// FREEBIE
2016-03-18 11:21:11 -07:00
lilia
7fb4d3d8aa Load all inbox convos before rendering
This is a better alternative to the fix in 0434c4b, which causes
problems when creating a new conversation from entering a phone number.

// FREEBIE
2016-03-17 20:58:56 -07:00
lilia
0434c4bc53 Fixes #663 Conversation list loads in reverse order
The onChangeActiveAt listener promotes newly activated conversations to
the top of the inbox. By firing on an 'add' event, if the conversation
list happened to load after the inbox frontend was initialized, each new
entry would be incorrectly moved to the top, effectively reversing the
list.

// FREEBIE
2016-03-12 15:34:33 -08:00
lilia
1b72ef6170 Restore notifications heading
// FREEBIE
2016-03-11 11:49:21 -08:00
Blake Griffith
0ceb8e7038 i18n notification's settings dialog
FREEBIE
2016-03-11 11:46:10 -08:00
Blake Griffith
24e4d9c615 'off' -> 'disable notifications' in settings
FREEBIE
2016-03-11 11:46:10 -08:00
lilia
7578991f4e Remove emoji logging
// FREEBIE
2016-03-11 11:01:13 -08:00
Sam Lanning
662020ce68 Add title text for emoji in messages.
Fixes #250

// FREEBIE
2016-03-09 12:46:33 -08:00
lilia
e91f646920 Fix initial post-sync timestamps
Fixes #669

// FREEBIE
2016-02-24 17:11:59 -08:00
lilia
cc0b8e835a Don't show left groups in list of all contacts
// FREEBIE
2016-02-22 17:11:16 -08:00
lilia
ef9559d844 Add tests for filtering left groups from search
// FREEBIE
2016-02-22 17:11:16 -08:00
lilia
7e8ce5eb54 Omit left groups from search
Unless they contain messages.

// FREEBIE
2016-02-22 17:11:16 -08:00
lilia
f940676357 Ignore attempts to post empty debug logs
Fixes #697

// FREEBIE
2016-02-22 13:59:34 -08:00
lilia
a962d97bfb Fix debug log submission loading UX
This flow broke a bit with transition to modal debug log.

Restructure such that the loading class can be applied to an appropriate
element inside the modal. Ensure that the input elements are hidden when
submit is clicked, the result elements are shown when the log upload is
completed.

// FREEBIE
2016-02-22 12:48:06 -08:00
lilia
7f8c76faca Make debug log as big as possible
Tweak style to make the modal reasonably wide/tall, and use flexbox
to automatically expand the textarea.

// FREEBIE
2016-02-22 12:41:49 -08:00
lilia
636c0f2a60 Put debug log in a modal
Also dedupe close-button style

// FREEBIE
2016-02-19 17:34:59 -08:00
lilia
33fde3d4e7 Dedupe modal styles
// FREEBIE
2016-02-19 17:34:59 -08:00
lilia
74aeddcbda Add missing view file
// FREEBIE
2016-02-18 16:13:53 -08:00
lilia
173e037fa6 Fix minor style errors
And keep it that way, by making jscs config more opinionated.

// FREEBIE
2016-02-18 13:45:22 -08:00
lilia
a3c6061480 Add Notification Settings
Fixes #471

// FREEBIE
2016-02-18 12:22:43 -08:00
lilia
4ab2e25df6 Refactor Contact and Conflict views
Untangle these two views into their component parts, consolidating all
the key conflict logic in the key conflict view. Contact view now simply
renders basic contact info and miscellaneous errors but not conflicts or
message errors.

// FREEBIE
2016-02-18 12:22:43 -08:00
lilia
1bd0855d93 Remove duplicate display of network errors
Network errors render as a resend dialogue at the top of the message
detail and need not be re-reported in the contact list or errors
section.

// FREEBIE
2016-02-18 12:22:42 -08:00
lilia
f221921127 Tweak conflict style
// FREEBIE
2016-02-18 12:22:42 -08:00
lilia
28c763992a Move error indicators on message bubbles
// FREEBIE
2016-02-18 12:22:42 -08:00
lilia
5340791868 Display key conflict dialog inline
One less modal.

// FREEBIE
2016-02-18 12:22:42 -08:00
lilia
ad66da9fb5 Move identity conflicts to top of message detail
Also restyle them as with network errors

// FREEBIE
2016-02-18 12:22:42 -08:00
lilia
f5436a5123 Clicking on message status icon opens detail view
Additionally, hovering over it will apply cursor: pointer. Previously
only the timestamp exhibited this behavior.

// FREEBIE
2016-02-18 12:22:41 -08:00
lilia
4198987723 Display a message when provisioning socket fails
Fixes #464

// FREEBIE
2016-02-09 16:23:17 -08:00
lilia
7e82d1295c Handle attachment upload errors
Adds a new kind of replayable error that handles retry of pre-encryption
failures, e.g., attachment upload.

Fixes #485

// FREEBIE
2016-02-09 13:21:32 -08:00
lilia
080c233a93 Add timestamp update interval test
Break out delay computation into its own function and add tests,
including a regression test for #646.

// FREEBIE
2016-01-27 12:24:50 -08:00
codedust
9b390baea0 Fix a bug that causes 100% CPU load in timestamp_view.js
When `millis_since` becomes larger than one week, `delay` becomes
negative and is set to Zero. This causes an infinite loop and therefore
100% CPU usage (single thread).

// FREEBIE
2016-01-27 11:47:03 -08:00
lilia
b0def76801 Remove unused code
Well that never worked.

Closes #458

// FREEBIE
2016-01-26 14:56:16 -08:00
Lorenz Hübschle-Schneider
e876d8f6ed Display relative timestamps in conversation list
This mimicks Signal-Android's relative timestamps.
Previously, only the date was displayed.

Fixes #284
2016-01-26 10:54:40 -08:00
Sam Lanning
0569d4c889 Replace conversation panel js resizing with flex styling.
// FREEBIE
2016-01-25 14:37:03 -08:00
Sam Lanning
c4a9ac94b4 Improve Confirmation Dialog
Some basic modifications to the Confirmation Dialog:
* Always attached to <body> regardless of view that called it.
* Always centered horizontally on screen.
* A black semi-transparent overlay is now displayed over everything, and under
  the dialog.
* Various other style changes.

fixes #389

// FREEBIE
2016-01-25 14:33:38 -08:00
lilia
43071d94d6 Log invalid number inputs
// FREEBIE
2016-01-21 13:59:04 -08:00
lilia
05681ce35b Don't render placeholder markup unless necessary
Rather than always rendering divs for the key and placeholder, render
the placeholder only if the key is missing.

// FREEBIE
2016-01-19 19:49:27 -08:00
jakob
6c7f2cf0fc Show help text for unknown contact identity
Adds a new message string "theirIdentityUnknown".

Fixes #576

// FREEBIE
2016-01-19 18:56:33 -08:00
2-4601
ea0e013e81 Add a trifle of i18n to KeyVerificationView
Two strings were left behind:
- "Their identity (they read)"
- "Your identity (you read)"

I saved them.

// FREEBIE
2016-01-17 15:36:58 -08:00
Sam Lanning
ac25b62fdc Improve implementation of i18n for Install Flow following comments on #611
* Move install flow i18n logic to install_view.js (from options.js)
* Switch to using placeholders (instead of jQuery) for i18n messages with html.
* Switch to using moustache template instead of jQuery for i18n substitution.

// FREEBIE
2016-01-17 15:10:15 -08:00
Sam Lanning
0825d3e22f Implement i18n for Install Flow
Fixes #600

// FREEBIE
2016-01-17 15:10:15 -08:00
lilia
cdd139b44c Refresh group contacts when rendering member list
Fix #581

// FREEBIE
2016-01-12 11:06:14 -08:00
Felix Epp
a65166ae3b Fix #583 from/to label translatable
I just added i18n calls and the corresponding keys for en + de.
2016-01-11 10:46:33 -08:00
lilia
ceaf94e05b Rename variable for consistency
// FREEBIE
2016-01-08 06:19:09 -08:00
lilia
c6956f81d0 i18n DebugLogView
// FREEBIE
2016-01-02 02:51:25 -08:00
lilia
1d6e391dd6 Prefer single quotes
// FREEBIE
2016-01-02 02:51:25 -08:00
lilia
0e2d2d60c2 i18n KeyConflictDialogue
// FREEBIE
2016-01-02 02:51:25 -08:00
lilia
3172c49436 i18n ContactView
Part of the MessageDetailView

// FREEBIE
2016-01-02 02:51:25 -08:00
lilia
d502f1bdee i18n KeyConflictView
Also refactor generic error view to make this simpler.

// FREEBIE
2016-01-02 02:51:25 -08:00
lilia
ccdbfc3e12 i18n AttachmentView
// FREEBIE
2016-01-02 02:51:24 -08:00
lilia
47e33a14ac i18n UnsupportedFileTypeToast
// FREEBIE
2016-01-02 02:51:24 -08:00
lilia
42f15011fa i18n FileSizeToast
// FREEBIE
2016-01-02 02:51:24 -08:00
lilia
4066223d72 i18n SocketView
// FREEBIE
2016-01-02 02:51:24 -08:00
lilia
836a7cb8c5 i18n InboxView
// FREEBIE
2016-01-02 02:51:24 -08:00
lilia
85eb5c4d59 i18n KeyVerificationView
// FREEBIE
2016-01-02 02:51:24 -08:00
lilia
95e47dace1 i18n GroupMemberListView
// FREEBIE
2016-01-02 02:51:24 -08:00
lilia
73ea415e95 i18n ConfirmationDialogView
// FREEBIE
2016-01-02 02:51:24 -08:00
lilia
ea9fa00658 i18n MessageDetailView
// FREEBIE
2016-01-02 02:51:24 -08:00
lilia
0a43e9e8b2 i18n EndSessionView
// FREEBIE
2016-01-02 02:51:24 -08:00
lilia
02cc6623ea i18n ConversationView
// FREEBIE
2016-01-02 02:51:24 -08:00
lilia
d03d6fb7a5 Fix autolinking for urls with non-English characters
Fixes #559

https://url.spec.whatwg.org/#url-code-points

// FREEBIE
2016-01-01 06:29:26 -08:00
lilia
881aa1685d Fix up unsupported attachment rendering
Rather than simply displaying an inactionable error, render a link that
allows the user to save the unsupported attachment.

// FREEBIE
2015-12-21 17:57:35 -08:00
David Baldwynn
8251db6ae6 Added error message for unsupported attachment type (issue #419) 2015-12-21 00:19:32 -08:00
lilia
04359c9184 Remove received_at from message detail on outgoing messages
Only show sent_at for outgoing messages, matching Android.

The received_at timestamp reflects the time a message was saved locally.
It is necessary on both incoming and outgoing messages for sorting
purposes, but can be confusing in the context of an outgoing message
detail view, since users don't think about themselves "receiving" their
own messages, and may even interpret this as the time that a message was
received by their conversation partner's device.

// FREEBIE
2015-12-20 23:45:35 -08:00
lilia
ed4015f919 Return early from previewImages for unsupported files
// FREEBIE
2015-12-20 22:16:54 -08:00
lilia
fa6d6974ed Discard unsupported files
Fixes #534

// FREEBIE
2015-12-20 22:14:39 -08:00
lilia
a137415b7a Fix standalone registration
// FREEBIE
2015-12-10 10:36:14 -08:00
lilia
77caa63321 Normalize views' template fetching pattern
Typically, a view can specify its templateName and then use the default
render method on Whisper.View, except in some special cases like message
view or message detail where other operations are performed during
render.

// FREEBIE
2015-12-09 18:58:52 -08:00
lilia
61a57a753b Provide user feedback when number is invalid
While typing a number, the new contact element is faded out. When the
number becomes valid it is opaque. If the element is clicked while
invalid, it displays 'Invalid number' and waits for the input to change
again. A new conversation is only opened if the number is valid.

// FREEBIE
2015-12-09 18:58:52 -08:00
lilia
a258f1a66b Refactor number parsing and validation
Refactor libphonenumber.validateNumber into libphonenumber.parseNumber,
which encapsulates the try-catch pattern used in number parsing and
returns an object of info about the input number rather tha throwing
since we expect to get some invalid number inputs the user is typing.

In the conversation model,
  * Separate phone number validation from search token updating.
  * Perform token update before save if the number was valid.
  * Stop storing unneeded number variants as conversation properties.

// FREEBIE
2015-12-09 18:58:51 -08:00
lilia
7dd0fb70b5 Remove unused code
Here lies the remains of the old compose flow, which must eventually be
restored for group creation flow, but will likely be rewritten entirely.

// FREEBIE
2015-12-09 18:58:51 -08:00
lilia
3d98b54027 Create contact from number with common punctuation
The 'Create new contact' option should now appear for numbers including
parens and other common punctuation.

// FREEBIE
2015-12-09 18:58:51 -08:00
lilia
ae52c047bf Clean up open-event logic with new convos and search results
Search view triggers an open event when a valid phone number is entered
and the 'Create new contact' card is clicked.

Inbox view should listen and respond to this event. It should also
disregard select events on the new contact element since those are fired
before phone number validation.

Finally, the search view can stop listening to select events because the
inbox view is already doing so.

// FREEBIE
2015-12-09 18:58:51 -08:00
lilia
0b7742ecd7 Create contact by number with no country code or +
Search box finds or creates a conversation given a phone number in
local (to the user's region) or international format.

Previously you had to enter e164 format to set up the conversation
correctly.

If the number is not valid, do not open the conversation.

TODO: user feedback on invalid numbers.

// FREEBIE
2015-12-09 18:58:50 -08:00
OdysseasKr
f2d2e08fa2 Fix code styling 2015-12-09 18:57:50 -08:00
OdysseasKr
652d0963fc Add drag and drop support for text
By adding the drag and drop support for media files, the default
event handlers were overwritten. Thus drag and drop did not support
text. Now, the drag and drop listeners revert to the default behaviour
when the user does not drag a file.

Resolves: #478
2015-12-09 18:57:50 -08:00
OdysseasKr
cbbb8dfa24 Add drag and drop for attachments
Files can be dragged and dropped on the bottom in order to be added as
attachments.

Resolves: #260
2015-12-07 15:32:14 -08:00
lilia
c1aada4f0f Don't request background page from background page
This file is loaded by the background page, which means it is already
bound to the background page's global context. This was not true at some
time in the distant past but is true now.

// FREEBIE
2015-12-07 12:36:30 -08:00
lilia
85285a1094 Inline a one-line function only used in one place
// FREEBIE
2015-12-05 19:33:11 -08:00
lilia
68f2505996 Display phone number in conversation header
Fixes #436

// FREEBIE
2015-12-04 12:15:12 -08:00
lilia
db773dd8a7 Fix selected state transition on firstRun
// FREEBIE
2015-11-28 15:50:44 -08:00
lilia
8d214b73d9 Render conversation placeholder hint in place
// FREEBIE
2015-11-28 14:42:25 -08:00
lilia
891a5e54ad Add hint for users with no groups or contacts
If you have no contacts or groups, display a hint about phone numbers.

// FREEBIE
2015-11-27 22:26:56 -08:00
lilia
7bf94c33d5 Show all contacts when inbox is empty 2015-11-27 22:26:55 -08:00
lilia
152f59cc95 Restyle first run hint
// FREEBIE
2015-11-27 22:26:55 -08:00
lilia
d4e0c11ebc Show a hint on startup if the inbox is empty
Fixes #403

// FREEBIE
2015-11-27 11:36:46 -08:00
lilia
50602fb8e5 Remove unnecessary jquery insertion
This element is rendered in place already.

// FREEBIE
2015-11-23 16:13:31 -08:00
lilia
2457d51fd4 Ignore search queries that are all whitespace
// FREEBIE
2015-11-23 11:37:55 -08:00
lilia
73ab95b8a3 Serialize search queries
Fixes #395

// FREEBIE
2015-11-20 16:11:41 -08:00
OdysseasKr
83298b8979 Mark conversation as read if open and window focused
Messages that are received in the active conversation while the window
is focused, are automatically marked as read.

The conversation appears as unread for a split second as the incoming message
arrives but it gets marked as read as soon as the message is displayed.
2015-11-19 10:40:07 -08:00
ody
156c7c3b3d Add unread count in window title
The window title now shows the global number of unread messages as
"Signal (1)". This way the user can see the number of unread messages
in the task bar and when alt-tabbing.

Resolves: #384
2015-11-19 10:40:07 -08:00
lilia
765668b3d3 Clear message collections when the window is closed
We don't need to keep them in memory if we're done viewing them,
plus it avoids having to re-render a large collection when we re-open a
conversation. Now that we only load a sensible number of messages at a
time, caching them between usages is less valuable. Removing them from
the collection should free them for garbage collection.

// FREEBIE
2015-11-16 16:38:12 -08:00
lilia
2fc78ddd7d Fix scroll position jumping when images load
Messages with images or media were causing the scroll position to jump
around when they loaded, because rendering them changed the height of their
elements from 0 to full-height sometime after they were inserted into
the DOM.

Now when rendering attachments, we wait for them to load so they can
render at full height immediately, then warn our parent message list
before and after a potential height change, so the scroll position can
be saved and reset.

// FREEBIE
2015-11-15 15:32:35 -08:00
lilia
2ee8cae8d4 Move some initial setup to the 'opened' event
Avoid inbox views digging too deep into conversation views.

// FREEBIE
2015-11-15 14:59:21 -08:00
lilia
2861fa26a7 Implement infinite scrolling message lists
Only load the most recent messages when initially rendering a
conversation. Scrolling to the top of a message list loads older
messages.

This required some slight refactoring of how we insert message elements
into the dom. If the message is added to the end of the collection,
append it at the end. Otherwise, assume it is an older message and
prepend it.

When adding elements to the top, reset the scrollPosition to its
previous distance from scrollHeight. This keeps the current set of
elements fixed in the viewport.

// FREEBIE
2015-11-15 14:56:58 -08:00
lilia
4418be19d4 Update conversation header avatar if it changes
// FREEBIE
2015-11-12 12:10:54 -08:00
lilia
16dc7abe69 Display unreadCount badges in conversation list
// FREEBIE
2015-11-09 16:59:52 -08:00
lilia
f860278b89 Add avatars to conversation headers
So as not to look repetitive, hide the per-message avatars in one-on-one
conversations.

// FREEBIE
2015-11-09 11:48:14 -08:00
lilia
f0dcf44b9f Use onClosed instead of onSuspend
Renames extension.windows.beforeUnload to onSuspend, to match the
underlying chrome api call. onClosed fires when the frontend app window
is closed, while onSuspend fires when the background page is closed or
refreshed (which amounts to an app restart).

Frontend views are initialized iff the inbox window is opened, and so
should always be listening to onClosed in order to know when they are no
longer needed.

// FREEBIE
2015-11-08 10:49:31 -08:00
lilia
e5c6541e6c Validate number before showing step 4
// FREEBIE
2015-11-07 23:24:29 -08:00
lilia
a569e34b33 Refactor new message notification and frontend updates
Create a cleaner seperation between generating notifications
and updating frontend conversation views. The former is now
handled by `conversation.notify` while the latter is achieved
by triggering an event on the conversation model, which will
only be acted on if there are any views listening for it.

Additionally, instead of re-fetching the entire message history,
which is overkill, just add or update the new/modified message.
This will help speed up the newmessage event handler and also
help avoid unnecessary re-rendering when resolving key conflicts.

// FREEBIE
2015-11-07 14:11:13 -08:00
lilia
4136e3633c Fix incoming key conflict behaviors
Follow up to ddd2e67eb5
but for incoming messages.

* Conflict state sometimes failed to be removed even though the
  conflict was resolved.
* Messages failed to re-render after a conflict. We want to
  re-render only the error state on outgoing messages, to avoid
  flickering attachments. On incoming messages, we need to call
  render to populate the message text, avatar, etc...

// FREEBIE
2015-11-06 17:50:43 -08:00
lilia
c34f8e330d Clear timestamp timeouts if the window closes
// FREEBIE
2015-11-06 16:47:30 -08:00
lilia
2ce890b845 Update message bubble timestamps as needed
Display format consistent with Android:

* relative time for everything from today
* Day of week + time for within the past 7 days
* Static Month Day time for everything older

Each timestamp will only update as often as needed to stay accurate,
which is once a minute, once an hour, once a week, or never.

// FREEBIE
2015-11-06 15:24:01 -08:00
lilia
ddd2e67eb5 Fix re-rendering when resolving conflicts with media
* Don't open message detail views from message detail views
* When message errors change, re-render the error state, but
  not the message markup and contents.
* Fix renderErrors bug not removing the error class correctly.

// FREEBIE
2015-11-05 20:11:28 -08:00
lilia
14cb6b58a2 Create install flow
* Refactor options.js into a view
* Break up install flow into a series of screens
* Remove bootstrap
* Make installer window static size, mostly to facilitate positioning

// FREEBIE
2015-11-05 13:29:26 -08:00
lilia
6717390e83 Catch cancelation of confirmation dialog
Avoid 'Uncaught (in promise)' error in the console.

// FREEBIE
2015-11-02 17:04:46 -08:00
lilia
0f023ac4bf Focus the message field when conversation opens
Fixes #317

// FREEBIE
2015-10-30 11:14:38 -07:00
lilia
287aa49252 After choosing a file, focus the message field
Allow the user to edit the message and/or hit enter to send the image
without having to click.

// FREEBIE
2015-10-30 11:02:58 -07:00
lilia
78a2b74297 Restyle attachment previews
Closes #380

// FREEBIE
2015-10-29 18:19:51 -07:00
lilia
fe2b152186 Change target for appending file previews
// FREEBIE
2015-10-29 11:04:21 -07:00
lilia
9011a85b56 Change selector for opening a file input
// FREEBIE
2015-10-29 10:58:28 -07:00
lilia
c77391b3f2 Sinewave animation for pending requests
Tryin it on for size.

// FREEBIE
2015-10-28 13:57:32 -07:00
lilia
cb93ad4cff Avoid opening message-detail twice
Previously, clicking the timestamp on an error bubble would open two
message detail views.

// FREEBIE
2015-10-26 17:00:21 -07:00
lilia
47befdbf61 Messages bubbles with errors are clickable
For messages with errors, clicking anywhere inside the bubble takes you
to the message detail view.

// FREEBIE
2015-10-23 17:43:51 -07:00
lilia
ff3b23e452 Make sure group updates get emojified
Render group update content prior to processing emoji, so that emoji in
group titles get processed correctly.

Fixes #368

// FREEBIE
2015-10-23 16:04:40 -07:00
lilia
e842ade196 Slow your roll, socket status updates
Avoid a 1 sec flash of "Disconnected" if connection is dropped only
momentarily.

// FREEBIE
2015-10-22 10:12:34 -07:00
lilia
2e32c7bbc3 Small refactor of attachment views
Bind the sub-view to some data when we initialize it, rather than
passing it in on render. That means the image view click handler will
only ever open the blob we bound it to, even if its src attr changes for
some reason, which should never happen, but if it does, it's nice to
guard against opening arbitrary urls found in the dom.

// FREEBIE
2015-10-21 10:52:20 -07:00
Odysseas
49585c8c57 Add feature to open image attachments
Images that are attached to messages, either sent or received
can be opened in a new tab by clicking on them.

The previous approach that used Anchors to open the image
attachmets failed in various systems because:
 - Chrome on Windows recognised "blob" as protocol and tried
   to find an app for it
 - Chromium on Ubuntu didn't open a new window to load the URL

The new approach adds a "click" listener to the IMG element and
opens the link using window.open (which seems to be working globaly).

Resolves: #252
2015-10-21 10:26:14 -07:00
Deirdre Connolly
861bc416e6 Update attachment size limits to match mobile clients
Per WhisperSystems/TextSecure@8a1428e, bump GIF limit to 5MB, and
audio/video limit to 100MB. Update toast to notify in correct
human-readable units. The only kB size limit is for images, and will
trigger only if after scaling up to 4 times, the rescaled image did not
come in under the size limit without unacceptable quality loss.

Closes #354
2015-10-20 12:29:52 -07:00
lilia
389b9a026d Initial restyle
Added background gradient and restyled conversation elements as floating
panels and cards.

// FREEBIE
2015-10-16 18:14:50 -07:00
lilia
2f8d973366 Restore native window chrome
// FREEBIE
2015-10-16 12:52:10 -07:00
lilia
f70c22f898 Add search field to inbox
Using the search field produces a filtered view of all contacts and
groups containing the input. To make this fast and scalable, add an
index on a 'tokens' array containing words from the conversation name
and different forms of phone number.

Closes #365

// FREEBIE
2015-10-15 13:33:07 -07:00
lilia
a93b8cea72 Collapse multiple retry buttons
If you're going to retry one, you might as well retry everyone.

// FREEBIE
2015-10-10 16:59:52 -07:00
lilia
b1c933ccd4 Don't show myself in the message detail contacts list
// FREEBIE
2015-10-08 06:13:36 -07:00
lilia
87d4f0d5d8 Fix non-disappearing resend button
The resend button should disappear once you've clicked it. This was not
happening because the message detail view held a cached copy of the old
message errors. Fix by re-reading the errors when we re-render.

// FREEBIE
2015-10-05 15:07:55 -07:00
lilia
a32f3ff1f6 More work on replayable errors
Expose a button that does that retries outgoing messages if possible.

// FREEBIE
2015-10-02 18:31:07 -07:00
lilia
b42626923c Don't double-render key conflict errors
// FREEBIE
2015-10-02 12:35:28 -07:00
lilia
4cc7a30107 Remove error class when no more message errors
// FREEBIE
2015-10-02 12:15:25 -07:00
lilia
bbb5b24d6b Fix disappearing conversation bug
Opening two message-detail views in two separate conversations would
disappear one of the conversations. Fixed by better encapsulating the
sub-views of a conversation.

// FREEBIE
2015-10-02 11:21:11 -07:00
lilia
e1c9e28b4c Add comment
// FREEBIE
2015-10-01 10:55:04 -07:00
lilia
a802322d44 Display a default message for incoming message errors
An exception to the previous commit, for incoming messages we should not
show a mysterious empty bubble. Instead there is some generic
non-technical error message.

// FREEBIE
2015-09-30 15:24:34 -07:00
lilia
929c16090b Move error messages to message detail view
Change how message errors are rendered. Errors associated with a number
will be shown under that number in the detail view rather than piling up
in the message bubble.

// FREEBIE
2015-09-30 14:27:18 -07:00
lilia
0f8aff12c5 Refactor contact rendering in message detail view
DRY

// FREEBIE
2015-09-30 14:21:52 -07:00
lilia
9ff95c7e61 DRY up group update sending
// FREEBIE
2015-09-23 16:45:07 -07:00
lilia
4a482243d0 Simplify event arguments
// FREEBIE
2015-09-21 10:32:35 -07:00
lilia
960754ef04 Restyle compose button
Move it to a tool bar at the top of the conversation list. This is also
where a search bar will live someday.

Fixes #357

// FREEBIE
2015-09-18 13:08:52 -07:00
lilia
93a5d01127 Delete old code
We don't have any more 'default' css classes. Default avatar data is
simply provided by a model for rendering in a view.

// FREEBIE
2015-09-16 22:19:04 -07:00
lilia
fd29ac8d2c Promote groups to top of inbox when we update them
// FREEBIE
2015-09-16 18:01:39 -07:00
lilia
73983118dc Render emoji in conversation title // Fixes #359
// FREEBIE
2015-09-16 16:40:11 -07:00
lilia
36ec4300cf Fix broken group avatar preview
Fixes #355

// FREEBIE
2015-09-16 12:29:16 -07:00
lilia
90e9216e19 Add UI for submitting debug logs
Fixes #343

// FREEBIE
2015-09-16 11:28:37 -07:00
lilia
9809894fd2 Automatically mark the open conversation read
If a conversation view is visible, it will automatically mark the
conversation read.

// FREEBIE
2015-09-15 20:50:00 -07:00
lilia
fa0e2584f4 Fix new threads not appearing at top of inbox
When messages from someone not in your inbox arrived, that thread would
appear at the bottom of the inbox instead of the top.

// FREEBIE
2015-09-15 16:45:52 -07:00
lilia
15d84199c2 Include ourselves in member list for a new group
Otherwise, the next incoming group update will show "<your number>
joined the group".

// FREEBIE
2015-09-15 13:58:17 -07:00
lilia
4b0c70fb44 Resolve multiple conflicts independently
When resolving multiple conflicts in a conversation, failure to resolve
one should not block any others.

// FREEBIE
2015-09-15 11:12:47 -07:00
lilia
a390e37abc Fixup change:active_at handling when setting null
When a conversation goes from active to not active, it should be removed
the view rather than promoted.

// FREEBIE
2015-09-14 16:29:03 -07:00
lilia
b81d93177a Fix double selected states
Previously, when changing selection from an unread to a read
conversation, the unread conversation would not be deselected.

// FREEBIE
2015-09-14 15:31:29 -07:00
lilia
d89e3ccdc4 Don't fetch messages from the background
Only fetch them from a frontend view. If the conversation is not open,
we don't need to load the messages, and if we do load them, they will
render before we've done the initial contact info loading (as
implemented in 74e96ce).

Fixes #344

// FREEBIE
2015-09-14 13:49:20 -07:00
lilia
bd5f43bdb1 Avoid excessive re-rendering of the inbox list
This listener is doing way more work than necessary to update the dom by
removing all the list items and re-creating them. This also causes the
bug where selected state is cleared when new messages arrive, not to
mention binding new event listeners without unbinding the old ones.

Fix by simply promoting an element to the top of the list when it's
active_at value changes, rather than re-rendering the whole list. This
could backfire if the value gets changed to an earlier timestamp but for
now we assume that won't happen.

// FREEBIE
2015-09-14 13:49:20 -07:00
lilia
e80fa187ba Upsize svg identicons
The chrome.notifications api renders iconUrls at full bleed, as opposed
to the Web Notifications api, which adds padding. This was causing our
identicons to look a bit over stretched.

Fixed by rendering them a bit larger and with some padding.

// FREEBIE
2015-09-14 13:49:19 -07:00
lilia
1a30d003f5 Fetch group contacts before fetching new messages
Messages must wait for sender info to arrive before rendering.

// FREEBIE
2015-09-14 13:49:09 -07:00