Commit graph

1170 commits

Author SHA1 Message Date
David Baker
98c03869a7 Display an error message if room not found
Fixes https://github.com/vector-im/vector-web/issues/1012
2016-06-24 15:34:07 +01:00
Richard van der Hoff
a1dd427420 Implement device blocking
This is the react-sdk part of
https://github.com/matrix-org/matrix-js-sdk/pull/146. It adds 'Block'/'Unblock'
buttons to the device list, and updates the deviceVerified listeners to listen
for deviceVerificationChanged instead.

Also adds an extra <div> to the deviceinfo section to help me with the
CSS.
2016-06-23 17:30:04 +01:00
Richard van der Hoff
e046f5359f CreateRoom: remove reference to encryption module
The CreateRoom structure isn't currently used, but contained a reference to the
(now defunct) encryption module; remove the reference for now.
2016-06-23 14:08:45 +01:00
Richard van der Hoff
cdaf317f1d Merge pull request #321 from matrix-org/rav/encrypt_room_setting
RoomSettings: add encryption setting
2016-06-23 13:40:30 +01:00
Richard van der Hoff
3a21958faf RoomSettings: add encryption setting
Add a knob to RoomSettings which will send the appropriate event to enable
encryption in the room.
2016-06-23 12:21:31 +01:00
Richard van der Hoff
7a7d7c0e02 Fix a pair of warnings from RoomSettings
- initialise the 'publish' checkbox correctly so react doesn't grumble about it
  turning from uncontrolled into controlled

- PowerSelector's 'controlled' property isn't really required, so mark it as
  such.
2016-06-23 11:15:55 +01:00
Richard van der Hoff
a04f03669c RoomSettings: refactor permissions calculations
The logic for calculating who had permission for what was impenetrable (and
wrong, in parts), so rewrite it to be a bit clearer.
2016-06-23 10:36:16 +01:00
Matthew Hodgson
5195140ff8 reposition Login spinner 2016-06-21 19:50:03 +01:00
Richard van der Hoff
2ddfccdab3 Merge pull request #318 from matrix-org/dbkr/fix_default_hs
Fix https://github.com/vector-im/vector-web/issues/1679
2016-06-21 17:55:27 +01:00
David Baker
d3265ab970 Redundant getDeafultHs()
This now can never be falsey so no point checking it
2016-06-21 17:46:55 +01:00
Aviral Dasgupta
a74db3a815 Get basic keyboard selection working 2016-06-21 18:33:39 +05:30
Aviral Dasgupta
fb6eec0f7d Hide/show autocomplete based on selection state 2016-06-21 15:46:20 +05:30
David Baker
213e284edf Fix https://github.com/vector-im/vector-web/issues/1679 2016-06-21 11:05:37 +01:00
Aviral Dasgupta
442291c0a4 Merge branch 'develop' of github.com:matrix-org/matrix-react-sdk into feature-autocomplete 2016-06-21 04:09:22 +05:30
David Baker
fc06ebcc63 Fix view_next_room 2016-06-20 18:43:56 +01:00
David Baker
4c214119b2 Fix PR feedback 2016-06-20 18:05:58 +01:00
David Baker
d8dedae084 Fix /join to be consistent with the other code
Plus a number of other tidyups:

 * Fix /join to dispatch a view_room for the room alias
   with the additional auto_join parameter
 * Make RoomView automatically join the room if the auto_join
   parameter is true and the user isn't already in it
 * Tidy up RoomView's peeking code, also fixing
   https://github.com/vector-im/vector-web/issues/1220
   in react-sdk (although it still requires a synapse change
   to actually fix, but react-sdk does 'the right thing').
 * Remove duplication of usage text from /join command
 * Amalgamate MatrixChat::_viewRoom's many, many parameters
   into an object and sort out case consistency a little.
2016-06-20 16:30:51 +01:00
Aviral Dasgupta
4af983ed90 Style changes and improvements in autocomplete 2016-06-20 13:52:55 +05:30
David Baker
8103a795ec Merge pull request #316 from matrix-org/rav/fix_react_version_number
UserSettings: fix the displayed version of the react-sdk
2016-06-17 17:13:35 +01:00
Richard van der Hoff
f6835baa9c UserSettings: fix the displayed version of the react-sdk 2016-06-17 17:09:52 +01:00
Richard van der Hoff
1d42443c0c Merge pull request #314 from matrix-org/dbkr/show_canonical_alias
Show canonical alias in URL bar
2016-06-17 17:03:18 +01:00
David Baker
6adce649eb Use the first alias is there's no canonical alias 2016-06-17 16:56:34 +01:00
Richard van der Hoff
ad00abe9c0 Support for making devices unverified
Because its useful for testing

Requires support from js-sdk, and (ideally) css from vector-web
2016-06-17 16:24:23 +01:00
David Baker
3b5378fa53 Show canonical alias in URL bar
Use https://github.com/matrix-org/matrix-js-sdk/pull/140 to get the canonical alias, because that's a thing now.
2016-06-17 15:17:45 +01:00
Aviral Dasgupta
b9d7743e5a Emoji provider, DDG working, style improvements 2016-06-17 04:58:09 +05:30
Aviral Dasgupta
769b3f0c2a Merge branch 'develop' into feature-autocomplete 2016-06-17 00:37:39 +05:30
Richard van der Hoff
0cc4497ef0 Merge pull request #307 from matrix-org/dbkr/fix_peeking
Fix peeking and member list vanishing
2016-06-16 11:13:20 +01:00
Aviral Dasgupta
8b1332cd29 Use different keys for new MessageComposerInput 2016-06-16 14:46:09 +05:30
Aviral Dasgupta
3f1b57b35b Fix cursor bug, persist editor mode & rte default 2016-06-15 00:13:34 +05:30
David Baker
5199cd04a2 Merge pull request #292 from aviraldg/feature-rte
Rich Text Editor
2016-06-14 15:27:39 +01:00
Aviral Dasgupta
ba69e4365d more RTE fixes 2016-06-14 19:28:51 +05:30
Aviral Dasgupta
8cb086ef31 use constants for keycodes in RTE 2016-06-14 19:14:09 +05:30
David Baker
40b1b99c38 underscore prefix internal method 2016-06-14 14:40:03 +01:00
David Baker
a95d8b5ed6 Move init logic into componentWillMount
to simplify getInitialState
2016-06-14 14:38:45 +01:00
David Baker
0ef5cc891e Add currentRoomId / Alias to getInitialState
with docs
2016-06-14 14:10:49 +01:00
David Baker
b8eee08d69 Fix member list vanishing
Add a callback to RoomView that it can give the room ID to once it's resolved it, since this lookup is now the responsibility of the roomview and only the roomview. The view_room action now has either an alias or an ID, not both. Also fix RoomView to load the room properly and not try to peek when it shouldn't.
2016-06-14 12:56:37 +01:00
Richard van der Hoff
e973d18085 Hide e2e features if not enabled
Don't show the device info in the MemberInfo and UserSettings unless the user
has ticked the 'labs' box.
2016-06-14 11:57:08 +01:00
David Baker
aaefdf19c5 Fix MatrixChat syntax fail 2016-06-14 11:57:07 +01:00
David Baker
11a38fce48 Fix peeking
Sorts out more of the room joining mess. currentRoom which held the room ID is now more appropriately called currentRoomId. RoomView will now take a roomID or alias as before but will now look up the room ID as required if given the alias. Also, now look up the alias every time you click on it so it's never stale, rather than looking in your current rooms for a room that thinks it has that ID.
2016-06-14 11:37:04 +01:00
Aviral Dasgupta
34be17cc7e use rte labs setting 2016-06-14 00:10:43 +05:30
Aviral Dasgupta
74527a439c Merge branch 'develop' into feature-rte 2016-06-13 23:57:10 +05:30
Aviral Dasgupta
5831a68e11 Labs improvements 2016-06-13 23:25:31 +05:30
Aviral Dasgupta
727e6daaae Fix key attr placement in UserSettings 2016-06-13 22:11:21 +05:30
Aviral Dasgupta
c3a9658392 Add experimental "Labs" section to settings 2016-06-13 22:04:12 +05:30
Aviral Dasgupta
4bc8ec3e6d room, user, ddg autocomplete providers (wip) 2016-06-12 17:02:46 +05:30
Aviral Dasgupta
0df201c483 Merge branch 'develop' into feature-autocomplete 2016-06-12 14:10:23 +05:30
Pedro Ferreira
8f45f168d5 Fix highlighting behaviour on switch
Hopefully made the code a little bit clearer.
2016-06-12 01:08:31 +02:00
Pedro Ferreira
a5a3e4e915 Basic Markdown highlighting 2016-06-12 01:07:16 +02:00
Aviral Dasgupta
c0d7629980 get /commands working again 2016-06-12 00:11:27 +05:30
Aviral Dasgupta
b960d220d2 cleanup, better comments, markdown hotkeys 2016-06-11 22:24:09 +05:30
Aviral Dasgupta
e4217c3fb7 rte improvements, markdown mode 2016-06-11 15:52:08 +05:30
David Baker
719928f389 Remove view_room_alias
As it was basically the same as view_room. Use view_room instead which will handle whether we pass an ID or an alias into RoomView
2016-06-10 15:12:42 +01:00
Aviral Dasgupta
bf8e56e04c Merge branch 'develop' of github.com:matrix-org/matrix-react-sdk into feature-rte 2016-06-10 04:43:44 +05:30
Aviral Dasgupta
4e0720db12 Fix MessageComposerInput.setLastTextEntry 2016-06-10 00:03:40 +05:30
Aviral Dasgupta
29cdd1fc41 user and room decorators, history & typing notifs 2016-06-09 23:53:09 +05:30
David Baker
b60ab9d695 Remove XXX now it's fixed (yay!) 2016-06-09 18:50:18 +01:00
David Baker
72b3ce200d Make the room directory join rooms by alias
Also makes some improvement on the multiple code path mess for joining rooms
2016-06-09 18:49:06 +01:00
David Baker
049e3a968b Merge pull request #303 from matrix-org/rav/factor_out_createroom
Factor out common parts of room creation
2016-06-09 11:05:22 +01:00
David Baker
888c0611e8 Merge pull request #302 from matrix-org/rav/guest_device_spinner
Fix spinner-of-doom in member info for guests
2016-06-09 11:03:40 +01:00
Richard van der Hoff
de36aa63fb Factor out common parts of room creation
Take the duplicated code out of MatrixChat and MemberInfo, and put it in a
separate 'createRoom' module
2016-06-09 10:58:25 +01:00
Richard van der Hoff
2352661513 MemberInfo: remove spinner if device query fails
If the request to /keys/query fails (for example, because we are a guest), we
need to remove the spinner.
2016-06-09 10:57:19 +01:00
David Baker
98ef793809 Default IS should be vector.im now 2016-06-09 10:56:14 +01:00
David Baker
bb405563c8 Fix default servers 2016-06-09 10:54:56 +01:00
Richard van der Hoff
ef764c112e Merge pull request #300 from matrix-org/rav/device_verification
Support for marking devices as verified
2016-06-09 10:44:42 +01:00
David Baker
05404efa34 Remove if (this.props.config)
Since it now defaults to the empty dictionary (and if you pass null in, you deserve everything you get).
2016-06-09 09:53:37 +01:00
Richard van der Hoff
1dfb3f71ae Merge branch 'develop' into rav/device_verification 2016-06-08 21:34:47 +01:00
Richard van der Hoff
85770feb31 device verification: use a js-sdk event
We'll probably want to be able to bubble up device verifications from the
js-sdk at some point, so let's use a js-sdk event for this.
2016-06-08 21:25:42 +01:00
David Baker
c123f02842 Make the config optional 2016-06-08 18:45:46 +01:00
Richard van der Hoff
7ce49c752f Wire up events to update UI on device verification
Use the dispatcher to update event tiles and memberdeviceinfo when a device is
marked as verified.
2016-06-08 18:35:43 +01:00
Richard van der Hoff
1616431d27 EventTile: add classes to indicate verifiedness
Add a couple of CSS classes to event tiles to reflect whether encrypted events
have been verified or not.
2016-06-08 17:02:42 +01:00
Richard van der Hoff
f3e66e6fd2 Add device info to member info
Requires e81ce23 in matrix-js-sdk
2016-06-08 17:02:42 +01:00
Richard van der Hoff
086698cd11 Add device info to user settings
Requires e81ce23 from matrix-js-sdk
2016-06-08 17:02:42 +01:00
David Baker
7e8c8dd336 Remove SdkConfig
just take a config in MatrixChat, pass the individual things down through the chain.

This may become unwieldy: let's see how it goes.
2016-06-08 14:54:34 +01:00
David Baker
b54376aa2a Add singleton object to hold SDK configuration 2016-06-07 21:49:06 +01:00
David Baker
aca0e060a4 Also change velocity-vector commit & requires
Because it needs a versiob where the package name is actually updated and the requires need to use the right package name
2016-06-07 20:47:37 +01:00
David Baker
943d7e18e1 Add _ to internal member 2016-06-07 19:55:24 +01:00
David Baker
d5a522fdfe Second attempt at fixing the Velocity memory leak
1) Correct fix for Velociraptor (we need to find the DOM node and pass that in)
2) Do the same leak fix for the read marker
3) Update the dependency to our fork which is fixed to make the call we do to release memory actually work.
4) Remove the velocity-ui-pack dependency which is unnecessary because velocity-ui is included in the velocity package
2016-06-07 18:22:01 +01:00
Matthew Hodgson
f8b3128645 invite input box wording for amandine 2016-06-02 23:33:55 +01:00
Matthew Hodgson
1b3c8481f6 fix dialog prompt an embarassing bug where if 3pid invites triggered a dialog they'd get wedged 2016-06-02 21:07:47 +01:00
Matthew Hodgson
532e93d7cb fix up trailing whitespace and put the buttons in the right order 2016-06-02 21:07:04 +01:00
Matthew Hodgson
e20a1acb88 label our versions sensibly 2016-06-02 19:22:11 +01:00
Matthew Hodgson
487f3c72dd fix new 3pid invite UI 2016-06-02 16:59:44 +01:00
Matthew Hodgson
1d31463140 set email branding after registration 2016-06-02 13:14:52 +01:00
Matthew Hodgson
83fd02bdfa specify a brand when registering accounts 2016-06-02 11:51:26 +01:00
Matthew Hodgson
3b34311e05 implement new UX for 3pid invites 2016-06-01 23:42:34 +01:00
Matthew Hodgson
0747ca3923 ignore @ prefixes when sorting memberlist 2016-06-01 14:00:20 +01:00
Aviral Dasgupta
b979a16199 initial version of autocomplete 2016-06-01 16:54:21 +05:30
Matthew Hodgson
272afe39dc do not list rooms by default 2016-06-01 02:03:53 +01:00
Matthew Hodgson
c3fc76cdaa warn guests to register nicely to upload files 2016-05-31 23:59:36 +01:00
Matthew Hodgson
e1ba7df66e fix the Add button for email addies 2016-05-31 23:50:53 +01:00
Matthew Hodgson
2662ca36f9 fix tag unsetting https://github.com/vector-im/vector-web/issues/1499 - HOW DID THIS EVER WORK?!?! 2016-05-31 23:50:47 +01:00
Matthew Hodgson
b74d690035 Merge pull request #290 from matrix-org/matthew/multipreview
multiple URL preview support
2016-05-31 19:42:21 +01:00
Matthew Hodgson
b3638f9169 PR review 2016-05-31 19:42:00 +01:00
Aviral Dasgupta
96526c22c5 Merge branch 'develop' into feature-rte 2016-05-29 20:50:33 +05:30
Aviral Dasgupta
fe76eb9f73 minor improvements
- use <p> for unstyled blocks
- fix return key bug
- editor placeholder
2016-05-28 12:02:35 +05:30
David Baker
118eec8cc0 Add a fallback home server to log into
If login fail with a credential error on the default HS, try
logging in on the fallback one.
2016-05-27 14:57:43 +01:00
Matthew Hodgson
d5e6e961fd fix url previews firing incorrectly on Matrix.org 2016-05-27 10:09:17 +01:00
Aviral Dasgupta
001011df27 Initial version of rich text editor 2016-05-27 10:15:55 +05:30
Matthew Hodgson
39a3d6fdd4 multiple URL preview support 2016-05-24 00:54:20 +01:00
Matthew Hodgson
817a3debec debug HS & IS 2016-05-18 11:42:51 +01:00
Matthew Hodgson
1459478ee0 use right check for end of timeline
and avoid bad interactions with forward pagination. thanks @richvdh
2016-05-17 21:32:20 +01:00
Matthew Hodgson
24adf2847e better comment 2016-05-17 20:32:38 +01:00
Matthew Hodgson
7879be1704 implement basic local echo for resetting unread message count when opening a room without a scroll offset. hopefully largely fixes https://github.com/vector-im/vector-web/issues/967 2016-05-17 20:28:11 +01:00
Matthew Hodgson
fd09d5c570 switch badge count to per-conversation, and add per-room badges 2016-05-17 11:14:12 +01:00
Matthew Hodgson
62a1100fca Merge pull request #289 from matrix-org/dbkr/email_notifs
Support for enabling email notifications
2016-05-10 16:39:37 +02:00
Matthew Hodgson
b86af8939a fix usersettings cancel fail on new accounts 2016-05-05 15:30:56 +01:00
David Baker
fab7111fd7 Merge remote-tracking branch 'origin/develop' into dbkr/email_notifs 2016-04-29 11:09:02 +01:00
Matthew Hodgson
3cf12f8626 fix typo 2016-04-28 15:43:42 +01:00
Richard van der Hoff
ca0c697b6e Avoid rerendering during Room unmount
might speed up room changing by a few milliseconds
2016-04-22 17:06:53 +01:00
Richard van der Hoff
0fd0b0c5f3 Whitespace fixes
Fix some trailing whitespace
2016-04-22 17:05:48 +01:00
David Baker
c3365f993b Merge remote-tracking branch 'origin/develop' into dbkr/email_notifs 2016-04-22 16:25:09 +01:00
Richard van der Hoff
afb301ffb7 Reduce timeline limit to 250 events
... maybe this will help improve responsiveness in firefox.
2016-04-22 11:08:39 +01:00
Matthew Hodgson
d72d9260d4 Merge pull request #284 from matrix-org/matthew/hide_preview_heuristics
add heuristics to hide URL previews...
2016-04-21 18:54:34 +01:00
Matthew Hodgson
4d399a3640 Refactor out isLinkPreviewable 2016-04-21 18:00:39 +01:00
Matthew Hodgson
ee11838537 fix comment paren 2016-04-21 17:19:24 +01:00
Matthew Hodgson
c5a76dec1c add heuristics to hide URL previews other than for URLs where the user has explicitly identified the target as a link: i.e. by including a URI scheme prefix, or by including URI path components, or by doing an explicit markdown hyperlink. ignore previews of URLs within pre or code blocks 2016-04-21 17:14:27 +01:00
Richard van der Hoff
30f273c611 Merge pull request #283 from matrix-org/rav/issue_1427
Fix bug which stopped us scrolling down after we scrolled up
2016-04-21 14:26:42 +01:00
Richard van der Hoff
2f435f4836 Fix bug which stopped us scrolling down after we scrolled up
Make sure that, if we scroll up enough to move the timelinewindow away from the
end of the timeline, we reset the canForwardPaginate flag.
2016-04-21 14:20:12 +01:00
David Baker
3381e2b057 Merge remote-tracking branch 'origin/develop' into dbkr/email_notifs 2016-04-21 10:12:27 +01:00
Richard van der Hoff
fa34dee091 Rewrite Read-receipt animation
... hopefully fixing https://github.com/vector-im/vector-web/issues/1437 in the
process.

The idea here is that, when we remove a read-receipt from the DOM, we stash its
position in a map. Then, when the read-receipt appears again attached to
another event, we know where to start the transition.
2016-04-20 23:06:53 +01:00
Richard van der Hoff
d953ac4e6b Don't relayout scrollpanels every time something changes
Gemini's habit of reflowing everything everytime anything changes at all makes
for an unresponsive app. Turn it off everywhere we use gemini.
2016-04-20 12:25:19 +01:00
Richard van der Hoff
86a5e1f38d Reduce number of renders on received events
TimelinePanel rerenders are expensive, so we want to do as few as possible. So,
when we get a new timeline event, make sure that we update the RM and add the
new event at the same time.
2016-04-19 23:45:51 +01:00
Richard van der Hoff
dcd81da856 Fix test failures introduced by last PR 2016-04-19 21:10:23 +01:00
Richard van der Hoff
568e7aef8b Avoid rerendering EventTiles when not necessary
Each individual eventtile isn't particularly expensive, but when you have 500
of them, they start adding up. Shuffle some of the stuff into MessagePanel, so
that we can shouldComponentUpdate EventTiles properly.
2016-04-19 19:41:43 +01:00
Richard van der Hoff
a6bcbd4f61 Speed up processing of TimelinePanel updates on new events
Avoid twiddling state flags, so that we can avoid redundant re-renders.
2016-04-19 18:29:25 +01:00
Richard van der Hoff
683faf571f Fix syntax error which prevented build
Remove a spurious } which was introduced in PR #275
2016-04-19 13:32:14 +01:00
Matthew Hodgson
8517b6558b Merge pull request #275 from matrix-org/matthew/memberlist-sort
Fix many thinkos in sorting the MemberList
2016-04-18 19:15:20 +01:00
Richard van der Hoff
7b405d0d9c Don't setState after unmounting a component
Fix a warning which happens if a LinkPreviewWidget is unmounted before the
preview request completes.

Also add missing .done to promise chain
2016-04-18 14:52:41 +01:00
Matthew Hodgson
a95c45eb96 final(?) PR fixes 2016-04-18 14:48:55 +01:00
Matthew Hodgson
60f92fd15b PR feedback 2016-04-18 14:07:20 +01:00
Matthew Hodgson
b2d0950a46 oops, remove debug logging 2016-04-18 01:45:46 +01:00
Matthew Hodgson
b949e78683 Improve ordering of memberlist by absolutizing lastActive correctly
Change ordering of memberlist to not try to compare lastActive of 'currentlyActive' users, as lastActive may will be a complete lie as it only gets updated when currentlyActive transitions to false (i think?)
Remove order by online/idle/offline in favour of "currently active, ordered by power and then alphabetic name, followed by last active, followed by offline"
Add commented-out code to track last-spoken-within-a-room ordering.
Fix kludges due to SYJS-28 (depends on JS PR landing)
2016-04-18 01:35:40 +01:00
Matthew Hodgson
eeb9abdf81 trailing whitespace 2016-04-18 01:34:45 +01:00
Richard van der Hoff
716eb1eb1b Drop workaround for object.onLoad
https://github.com/facebook/react/pull/5781 has been fixed in React 15.0, so
drop our workaroud for it.
2016-04-17 21:46:27 +01:00
Richard van der Hoff
336d91dadb Merge pull request #272 from matrix-org/rav/fix_roomname
Make sure that we update the room name
2016-04-17 18:12:18 +01:00
Matthew Hodgson
f4573bae49 remove premie optimisation of tintablesvg shouldComponentUpdate 2016-04-17 00:28:20 +01:00
Matthew Hodgson
8db14bde60 switch Tinter from using dispatch to a synchronous update when changing the colourscheme, to avoid CSS getting out of sync with SVG colours 2016-04-16 01:00:10 +01:00
Matthew Hodgson
4fb31662e1 fix tooltip offset 2016-04-15 22:24:12 +01:00
Matthew Hodgson
19770563f4 add cancelButton to simpleHeader 2016-04-15 22:16:19 +01:00
Matthew Hodgson
009781dac7 prep for RightPanel full collapse 2016-04-15 18:45:40 +01:00
Matthew Hodgson
f625e2d693 fix up UserSettings a bit and add fading 2016-04-15 18:30:13 +01:00
Matthew Hodgson
a06b420942 wire up searchbox filtering 2016-04-15 17:55:00 +01:00
Matthew Hodgson
7c8d7e5361 move memberlist bottom into rightpanel 2016-04-15 15:53:14 +01:00
Richard van der Hoff
8680afe46f Make sure that we update the room name
It turns out that RoomState.events is fired before Room.name is updated; make
sure that we pick up the latter and do the update.
2016-04-15 10:01:39 +01:00
Matthew Hodgson
26f135c7b0 fix 'undefined' class bug on TintableSvg 2016-04-14 21:44:05 +01:00
Matthew Hodgson
2d71d4422e make selected room more skinnable 2016-04-14 21:11:10 +01:00
Matthew Hodgson
0741e8a5c1 fix testing UI hack 2016-04-14 19:11:20 +01:00
Matthew Hodgson
81d5e16225 fix @aviraldg thinko on needing a key on arrays :) 2016-04-14 19:11:09 +01:00
Matthew Hodgson
21fd5078f9 fix NPE on getEventTileOps 2016-04-14 17:39:45 +01:00
Richard van der Hoff
3fd9b29422 Merge pull request #271 from matrix-org/rav/avoid_codepoint_at
Hack around absence of String.codePointAt on PhantomJS
2016-04-13 16:37:00 +01:00