Commit graph

2094 commits

Author SHA1 Message Date
Luke Barnard
318d871097 Formatting 2017-01-30 16:13:57 +00:00
Luke Barnard
4e0889454a GET /teams from RTS instead of config.json
Now that the RTS contains config for teams, use GET /teams to get that information so that users will see be able to register as a team (but not yet auto-join rooms, be sent to welcome page or be tracked as a referral).
2017-01-30 15:50:31 +00:00
David Baker
f5458d34aa Fix inviting import fail 2017-01-27 21:57:34 +00:00
Luke Barnard
d9a8acd431 Redo team-based registration (#657)
For compatibility with referral campaign flows, re-implement team registration such that the team is selected through providing an email with a known team domain. The support email is now only shown when an email that _looks_ like a UK/US university email address, but is not known.
2017-01-27 16:31:36 +00:00
Luke Barnard
f462bd8f99 Expand status *area* unless status *bar* not visible (#655) 2017-01-26 18:07:42 +00:00
Luke Barnard
9c99dafba5 Guard onStatusBarVisible/Hidden with this.unmounted 2017-01-26 17:03:01 +00:00
Richard van der Hoff
2c7b3d9a02 UnknownDeviceDialog: Reword the warning 2017-01-26 14:55:58 +00:00
Richard van der Hoff
0a3d9fc17f Fix lint 2017-01-26 14:12:00 +00:00
Richard van der Hoff
67bd2cf9dd Merge branch 'matthew/warn-unknown-devices' into matthew/blacklist-unverified 2017-01-26 14:09:25 +00:00
David Baker
e2edecc55b Merge pull request #653 from matrix-org/dbkr/invite_look_up_emails
Look up email addresses in ChatInviteDialog
2017-01-26 11:35:06 +00:00
David Baker
c42b705497 Use a cancel function
rather than checking queryList each time
2017-01-26 10:54:07 +00:00
David Baker
23a25e550d Missed a function 2017-01-26 10:09:33 +00:00
David Baker
bf66f77acb Set state in _lookupThreepid 2017-01-26 10:08:44 +00:00
Richard van der Hoff
60d7575146 Merge branch 'matthew/warn-unknown-devices' of github.com:matrix-org/matrix-react-sdk into matthew/warn-unknown-devices 2017-01-25 23:17:57 +00:00
Matthew Hodgson
ebf6ba8994 explicitly set device known-ness 2017-01-25 23:52:56 +01:00
Richard van der Hoff
70190be65c Factor out common onSendMessageFailed 2017-01-25 22:23:21 +00:00
Richard van der Hoff
5da6ca8fc1 Refactor UnknownDeviceDialog
hopefully make this a bit more readable, and use our new BaseDialog.
2017-01-25 22:23:21 +00:00
Richard van der Hoff
5538ce7c30 Merge branch 'develop' into matthew/warn-unknown-devices 2017-01-25 22:22:50 +00:00
David Baker
e1e87807b5 Look up email addresses in ChatInviteDialog
So email addresses known to the IS get a display name & avatar
2017-01-25 18:51:28 +00:00
Kegsay
c3616fd208 Merge pull request #652 from matrix-org/kegan/rageshake-glue
Move BugReportDialog to riot-web
2017-01-25 17:20:43 +00:00
David Baker
12642bdf2b Merge pull request #651 from matrix-org/rav/roomheader_theming_fix
Fix dark theme styling of roomheader cancel button
2017-01-25 17:02:07 +00:00
Richard van der Hoff
a2dd1fa0a9 Merge branch 'develop' into matthew/warn-unknown-devices 2017-01-25 16:44:03 +00:00
Richard van der Hoff
21f3aeac8e Revert accidental change
This was an unrelated change which is being done on another branch anyway
2017-01-25 16:40:27 +00:00
Richard van der Hoff
5099f07562 Fix dark theme styling of roomheader cancel button 2017-01-25 16:33:29 +00:00
Kegan Dougal
bea6df88e0 Move BugReportDialog to riot-web 2017-01-25 16:33:00 +00:00
Richard van der Hoff
55dc2e0161 Factor out common CancelButton 2017-01-25 16:32:06 +00:00
Kegsay
e5fde759e6 Merge pull request #642 from matrix-org/kegan/rageshake-ui
Add bug report UI
2017-01-25 16:03:22 +00:00
David Baker
a3b938427d Merge pull request #625 from matrix-org/dbkr/user_search_feedback
Better feedback in invite dialog
2017-01-25 15:59:47 +00:00
Kegan Dougal
602ce37ba7 Merge branch 'develop' into kegan/rageshake-ui 2017-01-25 15:52:00 +00:00
Richard van der Hoff
dc7a169779 Merge pull request #647 from matrix-org/rav/megolm_backup_ui
Import and export for Megolm session data
2017-01-25 15:43:15 +00:00
David Baker
ced1c45a34 Doc state in getinitialstate 2017-01-25 15:23:50 +00:00
Richard van der Hoff
9cadc2f55f Merge pull request #613 from matrix-org/luke/fix-join-part-collapsing-causality
Overhaul MELS to deal with causality, kicks, etc.
2017-01-25 15:20:30 +00:00
Richard van der Hoff
ebe6cddd21 Merge remote-tracking branch 'origin/develop' into rav/megolm_backup_ui 2017-01-25 15:13:14 +00:00
Richard van der Hoff
69b55fd9d1 Merge pull request #650 from matrix-org/dbkr/fix_alt_up_down
Re-add dispatcher as alt-up/down uses it
2017-01-25 15:10:56 +00:00
David Baker
e9804086ca Point to InviteAddressType 2017-01-25 15:03:01 +00:00
Richard van der Hoff
adf8f50f6e Merge remote-tracking branch 'origin/develop' into rav/base_dialog 2017-01-25 15:01:11 +00:00
David Baker
b34f63d3e7 Re-add dispatcher as alt-up/down uses it
Alt-up/down still doesn't go through rooms in the right order,
but it should probably not error.
2017-01-25 14:59:18 +00:00
David Baker
fd8d5af63a Fix import of InviteAddressType
and rewrite to import while we're at it
2017-01-25 14:54:21 +00:00
David Baker
9020a7515c Correctly bail out on unknown address 2017-01-25 14:50:00 +00:00
Kegan Dougal
b00e090600 Do not show the bug report section if there is no bug_report_endpoint_url 2017-01-25 14:43:47 +00:00
David Baker
e567162d28 Merge pull request #648 from matrix-org/rav/fix_set_displayname
Fix SetDisplayNameDialog
2017-01-25 14:32:52 +00:00
Luke Barnard
f9ca2a8e59 Fix _renderCommaSeparatedList 2017-01-25 11:28:12 +00:00
David Baker
f66e412d3a Merge pull request #643 from matrix-org/luke/fix-typing-indication
Sync typing indication with avatar typing indication
2017-01-25 11:13:55 +00:00
Luke Barnard
b887d5b823 Much linting 2017-01-25 11:05:45 +00:00
David Baker
fc9987a827 Merge pull request #646 from matrix-org/matthew/password-reset-warning
Warn users of E2E key loss when changing/resetting passwords or logging out
2017-01-25 11:04:35 +00:00
Luke Barnard
8091cf7df8 Enumerate->label 2017-01-25 09:32:28 +00:00
Luke Barnard
f8e46819c5 Rename truncated->coalesced 2017-01-25 09:28:26 +00:00
Luke Barnard
3b8b2cf500 Document _getCanonicalTransitions 2017-01-25 09:18:47 +00:00
Richard van der Hoff
29b4dde878 Fix SetDisplayNameDialog
SetDisplayNameDialog got broken by the changes to support asynchronous loading
of dialogs.

Rather than poking into its internals via a ref, make it return its result via
onFinished.

Fixes https://github.com/vector-im/riot-web/issues/3047
2017-01-25 08:01:45 +00:00
Richard van der Hoff
770820e6fa Fix a bunch of lint complaints 2017-01-24 22:41:52 +00:00
Matthew Hodgson
6a40abbbf0 actually, move signout warning to UserSettings.js
also, kill off the inexplicably useless LogoutPrompt in favour of a normal QuestionDialog.
This in turn fixes https://github.com/vector-im/riot-web/issues/2152
2017-01-24 23:18:25 +01:00
Matthew Hodgson
6e55bb4956 actually, move signout warning to UserSettings.js
also, kill off the inexplicably useless LogoutPrompt in favour of a normal QuestionDialog.
This in turn fixes https://github.com/vector-im/riot-web/issues/2152
2017-01-24 23:15:00 +01:00
Richard van der Hoff
b85f53cadd Implement Megolm key importing 2017-01-24 21:50:24 +00:00
Richard van der Hoff
e23deac1bb Implement e2e export 2017-01-24 21:50:24 +00:00
Matthew Hodgson
5b61d00533 warn users that changing/resetting password will nuke E2E keys 2017-01-24 22:36:55 +01:00
Richard van der Hoff
79e1108564 Merge branch 'develop' into rav/base_dialog 2017-01-24 21:03:08 +00:00
Richard van der Hoff
72492fd909 Fix broken merge
I messed up the merge in 6dd46d5.
2017-01-24 20:55:10 +00:00
Richard van der Hoff
6dd46d532a Merge remote-tracking branch 'origin/develop' into rav/hotkey-ux 2017-01-24 20:47:24 +00:00
David Baker
6c263c1c89 Change what AddressTile takes to be Objects
Rather than just passing in a list of strings. This paves the way
for passing in display names & avatars of looked-up threepids.
2017-01-24 18:23:34 +00:00
Richard van der Hoff
56cf7a6af7 Create a common BaseDialog
I'm fed up with copying the boilerplate for modal dialogs the whole time.
2017-01-24 18:18:54 +00:00
Luke Barnard
a92fff9da7 Fix linting warnings 2017-01-24 17:18:56 +00:00
Luke Barnard
4186a769ca Default prop for whoIsTypingLimit 2017-01-24 17:16:26 +00:00
Kegan Dougal
97387db014 Reduce log spam: Revert a16aeeef2a
As per #riot-dev, this is no longer required.
2017-01-24 16:40:26 +00:00
Luke Barnard
9a360a48d2 Use the same property to limit avatars 2017-01-24 16:04:37 +00:00
Luke Barnard
7c66d1c867 Sync typing indication with avatar typing indication
Follow the same rules for displaying "is typing" as with the typing avatars.
2017-01-24 16:01:39 +00:00
Kegan Dougal
5991172182 Review comments 2017-01-24 15:51:53 +00:00
Kegan Dougal
3b9a112136 Add bug report UI 2017-01-24 14:47:11 +00:00
Luke Barnard
ce7434984b Expand timeline in situations when _getIndicator not null
The status bar will now be expanded when:
 - props.numUnreadMessages
 - !props.atEndOfLiveTimeline
 - props.hasActiveCall
2017-01-24 14:32:52 +00:00
Luke Barnard
bd106968ce Merge branch 'develop' into luke/fix-join-part-collapsing-causality
Conflicts:
	src/components/structures/MessagePanel.js
2017-01-24 14:22:18 +00:00
Luke Barnard
d690677bde Merge branch 'luke/fix-join-part-collapsing-causality' of github.com:matrix-org/matrix-react-sdk into luke/fix-join-part-collapsing-causality
Conflicts:
	src/components/views/elements/MemberEventListSummary.js
2017-01-24 14:17:11 +00:00
David Baker
5091bab657 Fix failed merge #2 2017-01-24 13:59:02 +00:00
David Baker
5f24fc3e5d Fix merge fail 2017-01-24 13:56:22 +00:00
David Baker
f1f6fc809c Merge remote-tracking branch 'origin/develop' into dbkr/user_search_feedback 2017-01-24 11:26:09 +00:00
David Baker
c47d3e04a5 Merge pull request #621 from matrix-org/dbkr/add_searching_known_users
Add 'searching known users' to the user picker
2017-01-24 10:51:23 +00:00
Luke Barnard
a06ecb87bc Hide RoomStatusBar when it displays nothing (#615)
Use CSS class `mx_RoomView_statusArea_expanded` to indicate an expanded status bar. Without this, the status bar may be hidden from view. A 10s debounce will prevent it from bouncing frequently.
2017-01-23 16:01:39 +01:00
David Baker
3cfa539230 Merge pull request #637 from matrix-org/luke/fix-typing-avatars-displays-me
Fix typing avatars displaying "me"
2017-01-23 12:43:34 +00:00
David Baker
506d37bbad Merge remote-tracking branch 'origin/develop' into dbkr/add_searching_known_users 2017-01-23 11:34:44 +00:00
David Baker
f64a4e0ecb Merge pull request #623 from matrix-org/dbkr/user_search_word_boundary
Make user search do a bit better on word boundary
2017-01-23 11:31:26 +00:00
Luke Barnard
d97fc0a99a Fix typing avatars displaying "me" 2017-01-23 10:25:33 +00:00
Matthew Hodgson
7bc3fc8696 make UnknownDeviceDialog work again, other than the mess of vector-im/vector-web#3020 2017-01-22 01:28:43 +01:00
Matthew Hodgson
d9c0513ee2 make it work 2017-01-21 22:49:29 +01:00
Matthew Hodgson
39c122fe4f fix local storage idiocy 2017-01-21 22:27:55 +01:00
Matthew Hodgson
532f4e59c9 literally blindly add verification buttons 2017-01-21 19:06:15 +01:00
Matthew Hodgson
071e364be2 improve the verify warning if blacklisting is unabled 2017-01-21 17:56:48 +00:00
Matthew Hodgson
c618880af9 oops 2017-01-21 17:43:46 +00:00
Matthew Hodgson
3071fc0ddc UI for blacklisting unverified devices per-room & globally
(written blind; untested as yet)
2017-01-21 17:39:39 +00:00
Matthew Hodgson
2e15e8f9b4 very barebones support for warning users when rooms contain unknown devices 2017-01-21 05:13:36 +00:00
Matthew Hodgson
937f13d578 fix a bunch of dark-theme buttons 2017-01-20 21:00:22 +00:00
Luke Barnard
0c5762b91d Implement "someone is typing" avatars (#631)
When users are typing, their avatars can be seen instead of "..." in the RoomView StatusBar
2017-01-20 17:51:35 +01:00
David Baker
18d4d3392a Fix a bunch of linting errors
eslint --fix and a few manual ones
2017-01-20 14:22:27 +00:00
Richard van der Hoff
a16aeeef2a Temporarily add more logging, to try to catch failures on travis 2017-01-20 13:06:06 +00:00
Richard van der Hoff
2d060c8d2e Fix error display in account deactivate dialog 2017-01-20 11:04:47 +00:00
Matthew Hodgson
b76b0f755d fix context menu bg 2017-01-20 02:47:47 +00:00
David Baker
bd0706f103 Merge pull request #626 from matrix-org/dbkr/sanitize_chatinvitedialog
Sanitize ChatInviteDialog
2017-01-19 18:23:36 +00:00
David Baker
afa384c4f3 Use null instead of false 2017-01-19 18:13:27 +00:00
Richard van der Hoff
2637ae3af3 Merge pull request #630 from matrix-org/rav/fix_themes
(hopefully) fix theming on Chrome
2017-01-19 17:34:36 +00:00
David Baker
a2ff1cd8e6 Factor out adding the input field to the list 2017-01-19 17:03:16 +00:00
David Baker
ee1f6c772e Remove duplicate case handled above
And fix typo where it was handled
2017-01-19 16:50:09 +00:00
David Baker
2a08abaa95 Keep old behaviour of submitting on enter
if input is empty
2017-01-19 16:35:40 +00:00
David Baker
d8bcc1f067 Merge remote-tracking branch 'origin/develop' into dbkr/sanitize_chatinvitedialog 2017-01-19 16:26:59 +00:00
Richard van der Hoff
ba2460aef4 Merge pull request #618 from matrix-org/rav/async_dialog
Allow Modal to be used with async-loaded components
2017-01-19 16:08:30 +00:00
Richard van der Hoff
a88f9fdd73 (hopefully) fix theming on Chrome
Jump through some hoops to make Chrome behave sensibly on non-default themes.
2017-01-19 15:36:57 +00:00
Kegsay
89fa47dc26 Merge pull request #622 from kyrias/commonmark-fix-escaping
Fix escaping markdown by rendering plaintext
2017-01-19 13:39:07 +00:00
David Baker
9e0c7a11d0 Merge pull request #628 from matrix-org/luke/feature-team-reg-auto-join-rooms
Implement auto-join rooms on registration
2017-01-19 11:44:37 +00:00
Johannes Löthberg
9c1c657a1e Markdown: delete remaining pre-split relics
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
2017-01-19 11:55:36 +01:00
David Baker
b58a67f6b1 Add more punctuation. Also s/let/const/ 2017-01-19 10:51:43 +00:00
David Baker
242f5e0301 PR feedback
* Doc & properly indent escapeRegExp
 * Add close bracket to the list of punctuation chars we search after
2017-01-19 10:24:21 +00:00
lukebarnard
e9eb38fd74 Update propTypes and do null checks 2017-01-19 11:05:08 +01:00
lukebarnard
e06dd6e34a Implement auto-join rooms on registration
Also: This fixes registration with a team: only the email localpart was being used to register.

When a registration is successful, the user will be joined to rooms specified in the config.json teamsConfig:

"teamsConfig" : {
  "supportEmail": "support@riot.im",
  "teams": [
    {
      "name" : "matrix",
      "emailSuffix" : "matrix.org",
      "rooms" : [
        {
          "id" : "#irc_matrix:matrix.org",
          "autoJoin" : true
        }
      ]
    }
  ]
}

autoJoin can of course be set to false if the room should only be displayed on the (forthcoming) welcome page for each team, and not auto-joined.
2017-01-19 10:56:04 +01:00
Matthew Hodgson
4e5689082d correctly load synced themes without NPE 2017-01-18 20:06:54 +00:00
Matthew Hodgson
4df968ecdf fix css snafu 2017-01-18 20:06:44 +00:00
David Baker
7b7728c93a Make behaviour of ChatInviteDialog more consistent
* Pressing enter now always adds whatever was in the input box
   to the invite list, if it's a valid address (previously it
   added it to the list of it was a search result but submitted
   the form straight away if there were no results).
 * Remove isValidAddress as it was only used in the context of
   testing whether its return value was true or null (where null
   meant "unsure") so just use getAddressType instead.
2017-01-18 18:32:38 +00:00
Johannes Löthberg
30bd01cdf2 Markdown: Split up render function into toHTML/toPlaintext
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
2017-01-18 19:29:11 +01:00
David Baker
f105ec2794 Attempt to sanitize ChatInviteDialog a bit
* Use binds rather than onFoo functions which aren't actually
   handler functions themselves but return them
 * Rename onKeyUp to moveSelectionDown etc,, reserving onKeyUp
   for "a key has been released" rather than, "the up arrow key
   has been pressed"
2017-01-18 17:51:39 +00:00
Matthew Hodgson
fc63067237 improve commentary 2017-01-18 16:36:27 +00:00
David Baker
de621902fc Better feedback in invite dialog
Show feedback if you enter a valid but unknown email address
or mxid

Fixes https://github.com/vector-im/riot-web/issues/2933
2017-01-18 15:21:50 +00:00
Matthew Hodgson
3d30553b7f review fixes, plus unbreak to work with new webpack layout 2017-01-18 14:06:47 +00:00
Matthew Hodgson
a0bbe3a306 Merge branch 'develop' into matthew/postcss 2017-01-18 12:52:59 +00:00
Luke Barnard
5ef5204c8c Implement simple team-based registration (#620)
* Implement simple team-based registration

Config required goes in the `teams` top-level property in config.json. This consists of an array of team objects:
```json
{
  "name": "University of Bath",
  "emailSuffix": "bath.ac.uk"
}
```
These can be selected on registration and require a user to have a certain email address in order to register as part of a team. This is for vector-im/riot-web#2940. The next step would be sending users with emails matching the emailSuffix of a team to the correct welcome page as in vector-im/riot-web#2430.
2017-01-18 12:48:28 +01:00
lukebarnard
5dd1512ff2 Move aggregation code to dedicated function 2017-01-18 10:59:19 +01:00
lukebarnard
484549e50b Refactor a few things and document everything 2017-01-18 10:26:25 +01:00
Johannes Löthberg
c819b433a2 Make old message composer use new markdown
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
2017-01-17 20:37:27 +01:00
Matthew Hodgson
8288eb730c a rather hacky implementation of theme switching 2017-01-17 19:13:23 +00:00
David Baker
a87e7d6617 Make user search do a bit better on word boundary 2017-01-17 18:17:51 +00:00
lukebarnard
3ba9f50873 Move functions around, remove redundancies, add docs 2017-01-17 19:07:45 +01:00
lukebarnard
9574a0b663 Remove pointless length guard 2017-01-17 18:56:57 +01:00
Johannes Löthberg
893a5c971f Fix escaping markdown by rendering plaintext
We still need to parse "plaintext" messages through the markdown
renderer so that escappes are rendered properly.

Fixes vector-im/riot-web#2870.

Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
2017-01-17 16:23:58 +01:00
David Baker
0b67fd5b4e Add 'searching known users' to the user picker
So it's more obvious it's only finding people you've already seen

Fixes https://github.com/vector-im/riot-web/issues/2931
2017-01-17 14:48:50 +00:00
Matthew Hodgson
a18d94099e switch to using <span/> for edit button 2017-01-17 14:11:15 +00:00
Matthew Hodgson
203172c886 typos 2017-01-17 14:11:01 +00:00
lukebarnard
45655f4de3 Modified desc for invitation rejections, withdrawals 2017-01-17 12:01:19 +01:00
lukebarnard
aa6e168505 Remove comment 2017-01-16 18:58:53 +01:00
lukebarnard
5ab287fa1a Use pre-calculated displaynames to handle dupes 2017-01-16 18:57:49 +01:00
lukebarnard
a79dc886ba Order sequences by occurance of the first event in each sequence 2017-01-16 18:46:17 +01:00
Richard van der Hoff
ac22803ba0 Allow Modal to be used with async-loaded components
Add Modal.createDialogAsync, which can be used to display asynchronously-loaded
React components. Also make EncryptedEventDialog use it as a handy
demonstration.
2017-01-16 17:18:38 +00:00
lukebarnard
4be444d524 Move shouldComponentUpdate 2017-01-16 15:12:00 +01:00
lukebarnard
82d6805a71 Canonicalise certain transition pairs, handle arbitrary consecutive transitions
Transition pairs joined,left and left,joined are now transformed into single meta-transitions "joined_and_left" and "left_and_joined" respectively. These are described as "joined and left", "left and rejoined".

Treat consecutive sequences of transitions as repetitions, and handle any arbitrary repetitions of transitions:

...,joined,left,joined,left,joined,left,...

is canonicalised into
...,joined_and_left, joined_and_left, joined_and_left,...

which is truncated and described as
... , joined and left 3 times, ...

This also works if there are multiple consecutive sequences separated by other transitions:

..., banned, banned, banned, joined, unbanned, unbanned, unbanned,...

becomes
... was banned 3 times, joined, was unbanned 3 times ...
2017-01-16 14:49:07 +01:00
lukebarnard
fb68fff536 Refactor renderCommaSeparated for reuse 2017-01-16 13:45:42 +01:00
Jani Mustonen
b323551f22 Adhered to code review 2017-01-13 19:36:41 +02:00
Jani Mustonen
5e013860ee Definition for AccessibleButton 2017-01-13 19:36:41 +02:00
Jani Mustonen
959163f2ef Proper accessible buttons 2017-01-13 19:36:41 +02:00
Jani Mustonen
041196d729 Added quick search functionality 2017-01-13 19:36:40 +02:00
Jani Mustonen
d2ff2715ce Buttonified almost everything. Stylesheet is broken. 2017-01-13 19:36:40 +02:00
Jani Mustonen
8d79716421 Turned the links to buttons to comply with MDN's recommendations 2017-01-13 19:36:40 +02:00
Jani Mustonen
ad072cc179 Turned buttons from divs to links. Makes it possible for screen readers and hotkeys to recognize the buttons. 2017-01-13 19:36:40 +02:00
Luke Barnard
77ae041407 Order names by order of first events for users 2017-01-13 16:40:33 +00:00
Kegan Dougal
dcd0acb2b5 Review comments 2017-01-13 15:17:34 +00:00
Kegan Dougal
e196cfaf91 Show the error dialog when requests to PUT power levels fail
This is why I dislike Q.
2017-01-13 14:51:01 +00:00
Luke Barnard
d2d78919ce Overhaul MELS to deal with causality, kicks, etc.
The MELS can now deal with arbitrary sequences of transitions per user, where a transition is a change in membership. A transition can be joined, left, invite_reject, invite_withdrawal, invited, banned, unbanned or kicked.

Repeated segments (modulo 1 and 2), such as joined,left,joined,left,joined will be handled and will be rendered as " ... and 10 others joined and left 2 times and then joined". The repeated segments are assumed to be at the beginning of the sequence. This could be improved to handle arbitrary repeated sequences.
2017-01-12 18:55:53 +00:00
Matthew Hodgson
cc8b3d4ba4 spell out email invites better 2017-01-12 13:46:19 +00:00