Compare commits

...

299 Commits

Author SHA1 Message Date
David Baker
aad2069a51 v0.13.1 2017-11-17 16:09:48 +00:00
David Baker
bac8b34e26 Prepare changelog for v0.13.1 2017-11-17 16:09:48 +00:00
David Baker
6ebab2cb8d v0.13.1 2017-11-17 16:05:26 +00:00
David Baker
538e1d2446 Released js-sdk & react-sdk 2017-11-17 16:05:01 +00:00
Luke Barnard
dff791d478 Add Slovak to included languages 2017-11-17 15:07:20 +00:00
Luke Barnard
629a18ebef v0.13.0 2017-11-15 11:09:31 +00:00
Luke Barnard
7e5f80c9f7 Prepare changelog for v0.13.0 2017-11-15 11:09:30 +00:00
Luke Barnard
898bb6f9d8 v0.13.0 2017-11-15 11:08:37 +00:00
Luke Barnard
02c2e1a14c Bump js/react SDKs to releases 0.9.0 & 0.11.0 2017-11-15 11:03:20 +00:00
Luke Barnard
ad0cb6f0a8 v0.13.0-rc.3 2017-11-14 14:22:29 +00:00
Luke Barnard
29ddf98592 Prepare changelog for v0.13.0-rc.3 2017-11-14 14:22:28 +00:00
Luke Barnard
5e8ddc6d7c v0.13.0-rc.3 2017-11-14 14:21:44 +00:00
Luke Barnard
e1c762dcaa Bump react-sdk version to 0.11.0-rc.3 2017-11-14 14:20:21 +00:00
Luke Barnard
ef9f2f7ce6 v0.13.0-rc.2 2017-11-10 16:53:03 +00:00
Luke Barnard
d9bb6c52b4 Prepare changelog for v0.13.0-rc.2 2017-11-10 16:53:03 +00:00
Luke Barnard
ea0cfa92b4 v0.13.0-rc.2 2017-11-10 16:52:24 +00:00
Luke Barnard
150fa43735 Bump react-sdk dep 2017-11-10 16:51:05 +00:00
Luke Barnard
718f48ba04 Merge branch 'develop' into release-v0.13.0 2017-11-10 16:50:11 +00:00
Luke Barnard
73e7581fc6 Merge pull request #5566 from vector-im/luke/groups-enable
Make groups a fully-fleged baked-in feature
2017-11-10 16:24:19 +00:00
Luke Barnard
277a6dee10 Make groups a fully-fleged baked-in feature 2017-11-10 15:38:50 +00:00
Luke Barnard
5c9dd17d21 v0.13.0-rc.1 2017-11-10 13:44:55 +00:00
Luke Barnard
b494b458bb Prepare changelog for v0.13.0-rc.1 2017-11-10 13:44:55 +00:00
Luke Barnard
0630d856f8 v0.13.0-rc.1 2017-11-10 13:44:08 +00:00
Luke Barnard
1008ede4d1 Bump matrix-react/js-sdk deps 2017-11-10 13:42:31 +00:00
Richard Lewis
cf1beb1d94 Fix right marign. 2017-11-10 00:16:41 +00:00
Richard Lewis
d0fe0499aa Merge pull request #5561 from vector-im/rxl881/widgetStyling
Fix app tile margins.
2017-11-09 23:56:08 +00:00
Richard Lewis
bfa4f59f3d Lint space. 2017-11-09 22:47:23 +00:00
Richard Lewis
63f520b5ee Fix app tile margins. 2017-11-09 22:45:35 +00:00
Luke Barnard
a0b0b6f053 Merge pull request #5549 from vector-im/rxl881/roomTopic
Fix wrapping of long room topics (and overlap with apps)
2017-11-09 17:40:55 +00:00
Luke Barnard
88cd46bfcf Merge pull request #5555 from vector-im/rxl881/widgetrendering
Don't display widget iframes whilst loading.
2017-11-09 17:36:56 +00:00
Luke Barnard
7094df900a Merge pull request #5558 from RiotTranslateBot/weblate-riot-web-riot-web
Update from Weblate.
2017-11-09 17:01:21 +00:00
Peter Vágner
1f524f3085 Translated using Weblate (Slovak)
Currently translated at 100.0% (217 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/sk/
2017-11-09 16:49:31 +00:00
bldrzzy
405504dca4 Translated using Weblate (Polish)
Currently translated at 98.6% (214 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/pl/
2017-11-09 16:49:31 +00:00
Marek Suchánek
2bb13fba7e Translated using Weblate (Czech)
Currently translated at 100.0% (217 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/cs/
2017-11-09 15:53:39 +00:00
Richard Lewis
d45940f204 Don't display widget iframes whilst loading. 2017-11-09 10:02:00 +00:00
Xose M
81b085fbb8 Translated using Weblate (Galician)
Currently translated at 100.0% (217 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/gl/
2017-11-09 06:21:33 +00:00
Jeff Huang
910a5f7e6c Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (217 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/zh_Hant/
2017-11-08 22:56:35 +00:00
Richard Lewis
092ec1cc6c Prevent long topics from overflowing fixed height header. 2017-11-08 20:03:35 +00:00
Richard Lewis
106430f7b6 Move margin to AppTile elements so that it is only present with app tiles.
Comment unused classes.
2017-11-08 19:48:53 +00:00
Richard Lewis
76570a0f14 Make long topics overflow in to a second, hidden column. 2017-11-08 17:02:17 +00:00
Richard Lewis
e7fbad2236 Increase height to avoid content from overflowing (mx_RoomHeader_name.height + mx_RoomHeader_topic.max-height) 2017-11-08 16:44:45 +00:00
Peter Vágner
e90419e40d Translated using Weblate (Slovak)
Currently translated at 100.0% (217 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/sk/
2017-11-08 12:11:57 +00:00
Peter Vágner
16991a8f68 Added translation using Weblate (Slovak) 2017-11-08 12:10:20 +00:00
Weblate
b788e759da Merge remote-tracking branch 'origin/develop' into develop 2017-11-08 10:24:01 +00:00
Luke Barnard
3ee45b21b8 Merge pull request #5543 from vector-im/luke/groups-inviter-profile
Adjust CSS for GroupView
2017-11-08 10:23:57 +00:00
Weblate
8af90b052b Merge remote-tracking branch 'origin/develop' into develop 2017-11-08 10:04:44 +00:00
Luke Barnard
60de1dbffb Merge pull request #5546 from vector-im/luke/groups-add-rooms-with-visibility
CSS for adding rooms to a group with visibility
2017-11-08 10:04:38 +00:00
Weblate
38b5b27aa9 Merge remote-tracking branch 'origin/develop' into develop 2017-11-07 18:52:43 +00:00
Matthew Hodgson
c7dba61d92 Merge pull request #5511 from turt2live/travis/more-pinned-css
CSS for pinned indicators
2017-11-07 18:52:39 +00:00
Luke Barnard
26d9677bbe CSS for adding rooms to a group with visibility
Also, make chat invite error looks slightly more normal
2017-11-07 18:49:28 +00:00
Travis Ralston
beddf3a2cb Get rid of accidental merge stuff
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-11-07 11:05:29 -07:00
Travis Ralston
144cbd144e Merge branch 'develop' into travis/more-pinned-css 2017-11-07 11:04:22 -07:00
Luke Barnard
1bdc666197 Adjust CSS for GroupView
Part of showing the group inviter profile: https://github.com/matrix-org/matrix-react-sdk/pull/1585
2017-11-07 16:43:02 +00:00
Weblate
a72cc77e24 Merge remote-tracking branch 'origin/develop' into develop 2017-11-07 15:54:51 +00:00
Krombel
4c22f9a549 Translated using Weblate (German)
Currently translated at 100.0% (217 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-11-07 15:54:50 +00:00
Luke Barnard
f280fe3c66 Merge pull request #5540 from vector-im/luke/group-rooms-tooltip
Implement general-purpose tooltip "(?)"-style
2017-11-07 15:54:46 +00:00
Luke Barnard
4c0e956cc1 Name things in a sane way 2017-11-07 15:13:17 +00:00
Luke Barnard
e1d16acddb Implement general-purpose tooltip "(?)"-style 2017-11-07 14:09:04 +00:00
Krombel
a45ae588e5 Translated using Weblate (German)
Currently translated at 100.0% (217 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-11-07 13:34:54 +00:00
Weblate
c8edaf1ba9 Merge remote-tracking branch 'origin/develop' into develop 2017-11-07 10:44:07 +00:00
Matthew Hodgson
9ff1fe8a72 Merge pull request #5535 from vector-im/luke/groups-new-group-settings
CSS for improving group creation UX, namely setting long description
2017-11-07 10:43:59 +00:00
Luke Barnard
aa4feb0563 Info plinth CSS variables 2017-11-06 18:57:08 +00:00
Luke Barnard
d87d6cbc64 CSS for improving group creation UX, namely setting long description 2017-11-06 18:38:47 +00:00
Weblate
3633f55e20 Merge remote-tracking branch 'origin/develop' into develop 2017-11-06 15:49:46 +00:00
Luke Barnard
a8bdde9f55 Merge pull request #5531 from vector-im/dbkr/composer_at_room_pills
CSS for room notif pills in composer
2017-11-06 15:49:41 +00:00
David Baker
e1eba559fe CSS for room notif pills in composer 2017-11-06 15:12:28 +00:00
Weblate
01401fe4f8 Merge remote-tracking branch 'origin/develop' into develop 2017-11-06 14:10:32 +00:00
Walter
ba1ab9bdd1 Translated using Weblate (Ukrainian)
Currently translated at 99.5% (216 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/uk/
2017-11-06 14:10:32 +00:00
Bamstam
25782404d4 Translated using Weblate (German)
Currently translated at 98.6% (214 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-11-06 14:10:32 +00:00
David Baker
a1512af9f9 Merge pull request #5520 from vector-im/luke/right-panel-no-group
Do not init a group store when no groupId specified
2017-11-06 14:10:27 +00:00
Luke Barnard
cd26f63315 Do not init a group store when no groupId specified
(in RightPanel), otherwise the store will happily send requests to the server for the `undefined` group.
2017-11-06 10:16:03 +00:00
Szimszon
68bb61d281 Translated using Weblate (Hungarian)
Currently translated at 100.0% (217 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/hu/
2017-11-05 18:49:35 +00:00
Andrey
b4b4fefffb Translated using Weblate (Russian)
Currently translated at 100.0% (217 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ru/
2017-11-04 08:11:22 +00:00
Kévin C
2b49b68ba5 Translated using Weblate (French)
Currently translated at 100.0% (217 of 217 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/fr/
2017-11-04 07:26:28 +00:00
Travis Ralston
5a1498dec3 CSS for pinned indicators
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-11-03 20:01:54 -06:00
Weblate
441aa91831 Merge remote-tracking branch 'origin/develop' into develop 2017-11-03 23:10:35 +00:00
Matthew Hodgson
31c5122fa6 Merge pull request #5293 from turt2live/travis/pinned-led-css
CSS for new pinned events indicator
2017-11-03 23:10:31 +00:00
Weblate
f290569487 Merge remote-tracking branch 'origin/develop' into develop 2017-11-03 23:10:05 +00:00
Matthew Hodgson
c0b343c89f Merge pull request #5471 from vector-im/t3chguy/devtools-1
T3chguy/devtools 1
2017-11-03 23:10:00 +00:00
Weblate
a42414eabd Merge remote-tracking branch 'origin/develop' into develop 2017-11-03 22:44:46 +00:00
Matthew Hodgson
c90834114b Merge pull request #5498 from vector-im/luke/css-use-margin-in-room-dir-perms
Use margin to separate "perms" in the room directory
2017-11-03 22:44:41 +00:00
Weblate
038b3ed1eb Merge remote-tracking branch 'origin/develop' into develop 2017-11-03 16:14:59 +00:00
Luke Barnard
5d9a1b42a6 Merge pull request #5505 from vector-im/luke/groups-add-style-to-create-group-dialog
Add CSS for CreateGroupDialog to give group ID input suffix and prefix style
2017-11-03 16:14:54 +00:00
Luke Barnard
290a501523 Use prefixed class names to avoid collisions with other libraries 2017-11-03 16:02:25 +00:00
Luke Barnard
67bc346ebb Add CSS for CreateGroupDialog to give group ID input suffix and prefix style 2017-11-03 15:39:24 +00:00
Weblate
8518e2b056 Merge remote-tracking branch 'origin/develop' into develop 2017-11-03 14:40:10 +00:00
Luke Barnard
04c866ce9c Fix #5359 - unbreakable topics not breaking
The room directory CSS has `word-break: break-word` applied to the entire mx_RoomDirectory, which is questionable. For now, add the same rule to RoomDetailList
2017-11-03 14:39:24 +00:00
Weblate
f59ea648f0 Merge remote-tracking branch 'origin/develop' into develop 2017-11-03 14:11:16 +00:00
Luke Barnard
3192c345be rethemedex
Needed, having removed _GroupInviteTile.scss
2017-11-03 14:11:07 +00:00
Weblate
6432792d86 Merge remote-tracking branch 'origin/develop' into develop 2017-11-03 13:54:01 +00:00
Luke Barnard
22b82182a7 Merge pull request #5504 from vector-im/luke/fix-groups-invites-appearance
Fix group invites such that they look similar to room invites
2017-11-03 13:53:56 +00:00
Luke Barnard
c60ff5d283 Fix group invites such that they look similar to room invites
- Remove CSS for GroupInviteTile - the component should be using RoomTile CSS
 - Added extra tiles to roomCount of RoomSubList header

Part of fixing https://github.com/vector-im/riot-web/issues/5226
2017-11-03 12:17:49 +00:00
Weblate
a3d15e05b1 Merge remote-tracking branch 'origin/develop' into develop 2017-11-03 12:03:16 +00:00
Luke Barnard
2c4c6e82bb Merge pull request #5501 from vector-im/luke/groups-fix-my-groups-layout
CSS for Your Communities scrollbar
2017-11-03 12:03:10 +00:00
Luke Barnard
4d11e739b5 Comment 0px height and margin on joinBox 2017-11-03 11:42:06 +00:00
Luke Barnard
f6974407e3 CSS for Your Communities scrollbar
and also attempt to fix GroupTile flex weirdness.
2017-11-03 11:22:29 +00:00
Weblate
61287b5f08 Merge remote-tracking branch 'origin/develop' into develop 2017-11-02 15:37:58 +00:00
David Baker
69a82f7859 Merge pull request #5497 from vector-im/luke/groups-room-info
Add toggle to alter visibility of room-group association
2017-11-02 15:37:52 +00:00
Luke Barnard
ee71c72685 Use margin to separate "perms" in the room directory
instead of a space.
2017-11-02 15:13:55 +00:00
Luke Barnard
06ce467876 Add CSS for group room visibility label alignment 2017-11-02 15:05:08 +00:00
Luke Barnard
c01ea56676 Add toggle to alter visibility of room-group association 2017-11-02 13:40:07 +00:00
Weblate
ac89b5dc5e Merge remote-tracking branch 'origin/develop' into develop 2017-11-02 12:53:34 +00:00
Luke Barnard
fb8e41a9c1 Merge pull request #5494 from vector-im/dbkr/pillify_at_room
CSS for room notification pills
2017-11-02 12:53:29 +00:00
Weblate
7ab3be0a11 Merge remote-tracking branch 'origin/develop' into develop 2017-11-02 11:07:06 +00:00
David Baker
2e8f960ee3 Merge pull request #5493 from vector-im/luke/groups-room-info
Implement simple GroupRoomInfo
2017-11-02 11:07:00 +00:00
David Baker
65ea7a8460 Use more spercific selector instead of !important 2017-11-02 10:37:25 +00:00
Kévin C
819122c111 Translated using Weblate (French)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/fr/
2017-11-01 20:04:22 +00:00
David Baker
cd84d86fd1 CSS for room notification pills 2017-11-01 19:45:59 +00:00
Luke Barnard
2163a54617 Implement simple GroupRoomInfo
See matrix-org/matrix-react-sdk#1563
2017-11-01 17:32:01 +00:00
Weblate
62d249442e Merge remote-tracking branch 'origin/develop' into develop 2017-10-31 18:02:38 +00:00
Kévin C
007ff8d177 Translated using Weblate (French)
Currently translated at 96.2% (207 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/fr/
2017-10-31 18:02:37 +00:00
Richard Lewis
56c6a15ddf Merge pull request #5458 from vector-im/rxl881/widgetTitleBorder
Add back bottom border to widget title bar
2017-10-31 18:02:32 +00:00
Richard Lewis
04d1a72307 Undo comitted changes to package-lock.json 2017-10-31 18:02:04 +00:00
Weblate
ea785aa888 Merge remote-tracking branch 'origin/develop' into develop 2017-10-31 13:52:25 +00:00
David Baker
841503f907 Merge pull request #5478 from vector-im/luke/css-header-name-clickable-for-members
Prevent group name looking clickable for non-members
2017-10-31 13:52:19 +00:00
Luke Barnard
ba1ad84d59 Prevent group name looking clickable for non-members 2017-10-31 10:56:14 +00:00
Weblate
1ffa7ae906 Merge remote-tracking branch 'origin/develop' into develop 2017-10-31 10:29:24 +00:00
Walter
2d69595beb Translated using Weblate (Ukrainian)
Currently translated at 99.5% (214 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/uk/
2017-10-31 10:29:24 +00:00
Enrico Bacis
cd6a3d2293 Translated using Weblate (Italian)
Currently translated at 96.7% (208 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/it/
2017-10-31 10:29:23 +00:00
Bamstam
d86841c1c8 Translated using Weblate (German)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-10-31 10:29:23 +00:00
grrgui
58b9b04e35 Translated using Weblate (French)
Currently translated at 96.2% (207 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/fr/
2017-10-31 10:29:23 +00:00
Jan Kudrik
71fc072301 Translated using Weblate (Czech)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/cs/
2017-10-31 10:29:22 +00:00
Luke Barnard
07a17829ea Merge pull request #5472 from vector-im/t3chguy/fix_typecheck_warn
Fix instanceof check, was checking against the Package rather than class
2017-10-31 10:29:18 +00:00
Michael Telatynski
c39044f397 Merge branch 'develop' of github.com:vector-im/riot-web into t3chguy/fix_typecheck_warn 2017-10-30 15:27:20 +00:00
Michael Telatynski
71c8dca91a Fix instanceof check, was checking against the Package rather than class
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2017-10-30 15:12:03 +00:00
Michael Telatynski
6da2f88dc5 Devtools styling tweaks
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2017-10-30 13:32:31 +00:00
Michael Telatynski
ea9b630082 Refactor and add Account Data stuffs
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2017-10-30 12:44:50 +00:00
Richard Lewis
19320c37df Add back bottom border to widget title bar 2017-10-27 19:57:05 +01:00
Weblate
159343dd23 Merge remote-tracking branch 'origin/develop' into develop 2017-10-27 15:10:38 +00:00
Luke Barnard
c74e6c3c0c Merge pull request #5455 from vector-im/luke/groups-fix-invite-button
Use correct group store state when rendering "Invite to this community"
2017-10-27 16:10:33 +01:00
Weblate
4c7d07c109 Merge remote-tracking branch 'origin/develop' into develop 2017-10-27 14:40:14 +00:00
Krombel
c971aab453 Translated using Weblate (German)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-10-27 14:40:14 +00:00
Luke Barnard
3dcc397f67 Fix AuxPanel floating in the middle
When there is no RoomView_body to push it to the top of the flex container
2017-10-27 15:40:03 +01:00
Debendra Oli
0a81419978 Added translation using Weblate (Nepali) 2017-10-27 14:00:39 +00:00
Luke Barnard
7bae7fe9e5 Use correct group store state when rendering "Invite to this community"
This required slight rework of how RightPanel uses the group store, and now it knows an unfortunate amount about the group store. Food for thought on stores in general, I think.
2017-10-27 14:33:28 +01:00
Weblate
52ae5ba5dc Merge remote-tracking branch 'origin/develop' into develop 2017-10-27 08:15:28 +00:00
Jan Kudrik
de3a384513 Translated using Weblate (Czech)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/cs/
2017-10-27 08:15:27 +00:00
Matthew Hodgson
3df1808fd0 Merge pull request #5453 from VickyKoblinski/es6-notifications
Leverages ES6 in Notifications
2017-10-27 09:15:22 +01:00
Vicky Koblinski
d188fdb9fe Changes requires to imports for consistancy, removes 'use strict' 2017-10-26 21:23:16 -04:00
Vicky Koblinski
7588814ec5 Leverages ES6 and fixes typo 2017-10-26 20:37:15 -04:00
Weblate
ffd526af1a Merge remote-tracking branch 'origin/develop' into develop 2017-10-26 08:55:24 +00:00
Andrey
0453b1c422 Translated using Weblate (Russian)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ru/
2017-10-26 08:55:23 +00:00
Jan Kudrik
15466f02ed Translated using Weblate (Czech)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/cs/
2017-10-26 08:55:22 +00:00
Luke Barnard
507cef3ba4 Merge pull request #5437 from vector-im/luke/feature-optionally-mirror-local-video
Re-PR #4412
2017-10-26 09:55:17 +01:00
Luke Barnard
044519f9ea Add more specific css class to allow for optional flipping 2017-10-25 18:18:37 +01:00
Luke Barnard
5db44bd4ae Merge branch 'develop' into TheLastProject-reverse-video 2017-10-25 18:06:16 +01:00
Weblate
007177b7ba Merge remote-tracking branch 'origin/develop' into develop 2017-10-25 15:54:00 +00:00
Luke Barnard
bc3df74c2f Merge pull request #5410 from lub/patch-1
fix comma error of features example
2017-10-25 16:53:55 +01:00
Weblate
3fc0c455fa Merge remote-tracking branch 'origin/develop' into develop 2017-10-25 15:52:03 +00:00
Bamstam
4a8729dd1d Translated using Weblate (German)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-10-25 15:52:02 +00:00
Luke Barnard
f6a920a018 Merge pull request #5387 from vector-im/t3chguy/devtools-filter-case-sens
Devtools: make filtering case-insensitive
2017-10-25 16:51:57 +01:00
Weblate
7e7acb6922 Merge remote-tracking branch 'origin/develop' into develop 2017-10-25 14:41:14 +00:00
Luke Barnard
a627784c41 Merge pull request #5432 from vector-im/luke/fix-group-members-info-icon-highlight
Highlight group members icon in group member info
2017-10-25 15:41:09 +01:00
Weblate
fcfec1694e Merge remote-tracking branch 'origin/develop' into develop 2017-10-25 14:30:43 +00:00
Bamstam
a3b82bcd3d Translated using Weblate (German)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-10-25 14:30:43 +00:00
Luke Barnard
7c7ae3a31f Merge pull request #5422 from vector-im/luke/fix-interactable-greyed-ui
Use CSS to stop greyed Right/LeftPanel UI from being interactable
2017-10-25 15:30:38 +01:00
Luke Barnard
cd0888ce5a Highlight group members icon in group member info 2017-10-25 15:27:50 +01:00
Luke Barnard
9679051269 Introduce mx_RoomView_body for fadable things in the RoomView
Part of simplifying use of mx_fadable
2017-10-25 15:16:28 +01:00
Luke Barnard
0561c5bd4f Swap ui_opacity for panel_disabled
Simplify the API for disabling panels in the UI. `mx_fadable_faded` is applied instead of setting opacity.
2017-10-25 10:29:57 +01:00
Ruben Barkow
313f4f03b7 Translated using Weblate (German)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-10-24 22:18:57 +00:00
Weblate
3bff844a62 Merge remote-tracking branch 'origin/develop' into develop 2017-10-24 16:48:15 +00:00
Luke Barnard
a747a78e06 CSS to allow multi-line "Add rooms to this community" 2017-10-24 17:48:06 +01:00
Luke Barnard
bd15a88c89 Use CSS to stop greyed Right/LeftPanel UI from being interactable 2017-10-24 17:10:29 +01:00
Weblate
e2b80e9e80 Merge remote-tracking branch 'origin/develop' into develop 2017-10-24 16:01:07 +00:00
Luke Barnard
858e1fa341 Fix #5361
Make it possible to click on the camera icon under group icon
2017-10-24 17:00:57 +01:00
Weblate
a58ea58380 Merge remote-tracking branch 'origin/develop' into develop 2017-10-24 14:51:12 +00:00
Balaji
e2924d30df Translated using Weblate (Tamil)
Currently translated at 78.6% (169 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ta/
2017-10-24 14:51:12 +00:00
David Baker
f258b3253f Merge pull request #5417 from vector-im/luke/groups-settings-privileged-only
CSS for preventing editing of UI requiring user privilege if user unprivileged
2017-10-24 15:51:07 +01:00
Luke Barnard
01d6577abd CSS for preventing editing of UI requiring user privilege if user unprivileged 2017-10-24 15:27:11 +01:00
Weblate
43f1951f37 Merge remote-tracking branch 'origin/develop' into develop 2017-10-24 10:19:34 +00:00
Luke Barnard
1704a2fb9c Merge pull request #5409 from vector-im/luke/fix-privileged-group-ui-1
Only show UI for adding rooms/users to groups to privileged users
2017-10-24 11:19:30 +01:00
Luke Barnard
6a0ecfba7f Merge branch 'develop' into luke/fix-privileged-group-ui-1 2017-10-24 11:09:05 +01:00
Weblate
6e5ae0c664 Merge remote-tracking branch 'origin/develop' into develop 2017-10-24 10:03:49 +00:00
David Baker
ff5fbd4863 Merge pull request #5407 from vector-im/luke/fix-invite-to-community
Only show "Invite to this community" when viewing group members
2017-10-24 11:03:44 +01:00
lub
b5629ac3e6 fix comma error of features example
Signed-off-by: Simon Körner <github@lubiland.de>
2017-10-24 11:43:15 +02:00
Luke Barnard
f1a700ef99 Only show UI for adding rooms/users to groups to privileged users 2017-10-24 10:38:40 +01:00
Luke Barnard
cc1fb8ac94 Only show "Invite to this community" when viewing group members 2017-10-24 10:22:13 +01:00
Weblate
d91c652590 Merge remote-tracking branch 'origin/develop' into develop 2017-10-23 16:11:26 +00:00
Richard Lewis
8672939f0c Merge pull request #5397 from vector-im/rxl881/deleteWidget
Add trash can icon for delete widget
2017-10-23 17:11:21 +01:00
Richard Lewis
c8f89fbc9b Added delete widget icon. 2017-10-23 17:07:25 +01:00
Jan Kudrik
61e06d8cf3 Translated using Weblate (Czech)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/cs/
2017-10-23 15:38:52 +00:00
Weblate
e05ec68a61 Merge remote-tracking branch 'origin/develop' into develop 2017-10-23 13:55:46 +00:00
Matthew Hodgson
c7d18ff52e improve flair cosmetics 2017-10-23 14:55:36 +01:00
Matthew Hodgson
508a850dec add features example to config.sample.json 2017-10-23 14:54:38 +01:00
Weblate
ec12b8ee93 Merge remote-tracking branch 'origin/develop' into develop 2017-10-23 13:46:36 +00:00
Luke Barnard
0e20b20fb2 Fix CSS for room avatar "remove" icon 2017-10-23 14:46:28 +01:00
Weblate
052c00bd86 Merge remote-tracking branch 'origin/develop' into develop 2017-10-23 13:08:14 +00:00
Bamstam
146a75f7e7 Translated using Weblate (German)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-10-23 13:08:13 +00:00
Luke Barnard
d9fa11d03a Fix MyGroups placeholder colours on dark theme 2017-10-23 14:08:02 +01:00
Michael Telatynski
b16d4280b7 delint
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2017-10-23 11:42:06 +01:00
Michael Telatynski
eb45b00b32 fix bad tab completion
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2017-10-23 11:40:25 +01:00
Michael Telatynski
84d1f838f0 make filtering case-insensitive
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2017-10-23 11:39:21 +01:00
Jeff Huang
16cd69f7dd Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/zh_Hant/
2017-10-23 01:09:22 +00:00
Andrey
9d56f7e214 Translated using Weblate (Russian)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ru/
2017-10-20 19:35:53 +00:00
Weblate
5898a972a8 Merge remote-tracking branch 'origin/develop' into develop 2017-10-20 17:16:37 +00:00
Luke Barnard
14b5006645 Merge pull request #5375 from vector-im/luke/groups-my-groups-placeholder
CSS to improve MyGroups in general, and add placeholder
2017-10-20 18:16:33 +01:00
Luke Barnard
94454333d5 CSS to improve MyGroups in general, and add placeholder 2017-10-20 17:38:38 +01:00
Weblate
b33998c1f9 Merge remote-tracking branch 'origin/develop' into develop 2017-10-20 16:11:26 +00:00
Richard Lewis
63bcca1c7d Merge pull request #4881 from vector-im/rxl881/parallelshell
Rxl881/parallelshell
2017-10-20 17:11:20 +01:00
Krombel
060b5d100f Translated using Weblate (German)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-10-20 15:35:27 +00:00
Szimszon
3e435e4581 Translated using Weblate (Hungarian)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/hu/
2017-10-20 13:51:09 +00:00
Weblate
95b5bcc6b0 Merge remote-tracking branch 'origin/develop' into develop 2017-10-20 13:03:53 +00:00
Krombel
25a7fb07a3 Translated using Weblate (German)
Currently translated at 99.5% (214 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-10-20 13:03:52 +00:00
David Baker
b72d35e0df Merge pull request #5371 from vector-im/dbkr/fix_custom_server_text
Custom server text was i18ned by key
2017-10-20 14:03:48 +01:00
David Baker
667556f3ce Custom server text was i18ned by key
And therefore got replaced by the key by the i18n script
2017-10-20 13:48:00 +01:00
Luke Barnard
483762cc35 Merge pull request #5370 from vector-im/dbkr/prunei18n_oct17
Run prunei18n
2017-10-20 11:56:48 +01:00
David Baker
a76fdc750a Run prunei18n 2017-10-20 11:40:05 +01:00
David Baker
1f9b5b25cb Merge pull request #5369 from RiotTranslateBot/weblate-riot-web-riot-web
Update from Weblate.
2017-10-20 11:31:51 +01:00
Weblate
0e3fbb6770 Merge branch 'develop' of https://github.com/vector-im/riot-web into develop
Conflicts:
	src/i18n/strings/de_DE.json
	src/i18n/strings/hu.json
	src/i18n/strings/ru.json
	src/i18n/strings/zh_Hant.json
2017-10-20 10:29:12 +00:00
Luke Barnard
cc0a6d5c94 Merge pull request #5339 from vector-im/dbkr/prunei18n
Add script to prune unused translations
2017-10-20 11:21:57 +01:00
Richard Lewis
449af3c2e1 Update deps. 2017-10-20 10:27:59 +01:00
Richard Lewis
b2288e6525 Fix deps. 2017-10-20 09:45:29 +01:00
Luke Barnard
c6f75fbf37 Adjust CSS in MyGroups, justify-content:space-around 2017-10-19 18:08:52 +01:00
Szimszon
7369719492 Translated using Weblate (Hungarian)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/hu/
2017-10-19 16:41:38 +00:00
Luke Barnard
62fd98245d Merge pull request #5360 from vector-im/luke/groups-my-groups
CSS for improved MyGroups page
2017-10-19 17:41:34 +01:00
Luke Barnard
8317bcbb9f CSS for improved MyGroups page 2017-10-19 17:27:21 +01:00
David Baker
b2e9b36978 Merge pull request #5346 from vector-im/dbkr/dialog_pad_right
Add padding-right to Dialogs
2017-10-19 16:19:40 +01:00
David Baker
ea459c84ba Other dialog subclasses have padding-right 2017-10-19 15:48:56 +01:00
David Baker
86226bc22d Add padding-right to Dialogs
The "groups will be public" warning was apparently the first thing
long enough to reach the right hand edge
2017-10-19 15:32:28 +01:00
Luke Barnard
289743c5fe Merge pull request #5344 from vector-im/dbkr/error_warning_color
Add div.warning and use the scss var
2017-10-19 15:31:03 +01:00
Luke Barnard
acb678afbd Merge pull request #5343 from vector-im/luke/groups-are-communities
Groups->Communities
2017-10-19 15:30:39 +01:00
David Baker
42ca840fef Add div.warning and use the scss var
rather than the css color name
2017-10-19 15:17:09 +01:00
David Baker
fc87fd2bb4 Merge pull request #5342 from vector-im/dbkr/add_rooms_button_no_swallow_clicks
Make the 'add rooms' button clickable
2017-10-19 15:07:52 +01:00
Luke Barnard
e5df06b2ab Groups->Communities 2017-10-19 15:07:22 +01:00
David Baker
9d8b59e082 Make the 'add rooms' button clickable
SVG was swallowing pointer events
2017-10-19 14:54:56 +01:00
Bamstam
7395d866f6 Translated using Weblate (German)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-10-19 13:40:12 +00:00
Matthew Hodgson
c4de42c6af switch back to tint-friendly luke room icons 2017-10-19 15:40:00 +02:00
David Baker
00f902cab1 Add script to prune unused translations 2017-10-19 12:11:53 +01:00
Luke Barnard
ae9263fa59 Merge pull request #5338 from vector-im/dbkr/i18n_script
Switch to gen-i18n script
2017-10-19 11:25:40 +01:00
David Baker
f712804018 Add note about it apparently segfaulting on node 6 2017-10-19 11:13:42 +01:00
David Baker
4e31aea402 Switch to gen-i18n script 2017-10-19 10:53:02 +01:00
Richard Lewis
568cd0aac6 Update parallelshell to ^3.02 2017-10-19 10:12:00 +01:00
Richard Lewis
ae3229b40c Add package-lock.json to VC 2017-10-19 10:11:33 +01:00
Krombel
987072b25a Translated using Weblate (German)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-10-19 09:08:54 +00:00
David Baker
6910b83c20 Merge pull request #5334 from vector-im/dbkr/use_t_normally
Use _t as _t
2017-10-19 10:08:51 +01:00
David Baker
42ddafcfd4 comment 2017-10-19 10:03:47 +01:00
Luke Barnard
4711356c3f Merge pull request #5330 from vector-im/matthew/cosmetics
fix groupview header editing visuals (pt 1)
2017-10-19 09:20:46 +01:00
David Baker
137cf32d3b Use _t as _t
Rather than through a languageHandler object. This way our
translation script knows about it.
2017-10-18 19:39:51 +01:00
Matthew Hodgson
7bb0ed4a66 fix room add icon 2017-10-18 19:56:39 +02:00
Matthew Hodgson
6b589c4945 fix room icon up 2017-10-18 19:40:31 +02:00
Matthew Hodgson
fe490341d0 replace placeholder groups icon with a themable one 2017-10-18 19:28:19 +02:00
Matthew Hodgson
6e24f4ba09 fix editing visuals 2017-10-18 17:31:46 +01:00
Travis Ralston
f3b1c6cc5b Add newlines to end of file
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-10-18 08:50:34 -06:00
Luke Barnard
e5c128fcb8 Move group ui buttons to group settings 2017-10-18 13:47:59 +01:00
Luke Barnard
7c399974ce Merge pull request #5316 from vector-im/t3chguy/bump_eslint_plugin
bump version to prevent eslint errors
2017-10-17 17:16:54 +02:00
Michael Telatynski
6ccacfee46 bump version to prevent eslint errors
got bumped in react-sdk, missed here

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2017-10-17 14:44:41 +01:00
Luke Barnard
2effdfb840 CSS: GroupView headershould be at least 70px in height 2017-10-17 11:56:51 +01:00
Szimszon
55b14d5d5d Translated using Weblate (Hungarian)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/hu/
2017-10-16 20:19:05 +00:00
Luke Barnard
f24fd61ae0 Merge pull request #5303 from vector-im/luke/groups-invited-users
CSS for invited group members section
2017-10-16 18:32:56 +02:00
Luke Barnard
85307ffd23 CSS for invited group members section 2017-10-16 17:21:40 +01:00
David Baker
e85f205e8f Merge pull request #5302 from vector-im/luke/fix-overflow-entity-tile
Handle long names in EntityTiles by overflowing correctly
2017-10-16 16:42:44 +01:00
Luke Barnard
fdf07f6d89 Handle long names in EntityTiles by overflowing correctly 2017-10-16 16:32:09 +01:00
Luke Barnard
027b751bbc Merge pull request #5296 from vector-im/dbkr/electron_disable_labs
Disable labs in electron
2017-10-16 16:36:06 +02:00
David Baker
8716f93a6d Disable labs in electron
as we now disable labs in release Riot
2017-10-16 15:22:17 +01:00
David Baker
2401f21336 Merge branch 'master' into develop 2017-10-16 15:00:55 +01:00
Luke Barnard
102651332a Merge pull request #5295 from vector-im/luke/groups-room-directory-esque
CSS for Modifying GroupView UI matrix-org/matrix-react-sdk#1475
2017-10-16 13:52:38 +02:00
Luke Barnard
12ebe91f83 "Add room..." -> "Add rooms..." 2017-10-16 11:53:35 +01:00
Luke Barnard
0807a2a26d rethemendex.sh 2017-10-16 11:47:34 +01:00
Luke Barnard
2cefa58d5d CSS for Modifying GroupView UI matrix-org/matrix-react-sdk#1475 2017-10-16 11:44:38 +01:00
Travis Ralston
18faa2d8ba CSS for new pinned events indicator
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-10-15 21:18:39 -06:00
Krombel
498ae90040 Translated using Weblate (German)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-10-15 20:22:05 +00:00
Jeff Huang
da67a2c078 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/zh_Hant/
2017-10-15 05:57:19 +00:00
Andrey
f9186ae8fc Translated using Weblate (Russian)
Currently translated at 100.0% (215 of 215 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ru/
2017-10-15 05:31:08 +00:00
Weblate
b71bcb4e9b Merge remote-tracking branch 'origin/develop' into develop 2017-10-15 00:02:53 +00:00
Matthew Hodgson
f143315618 Merge pull request #5142 from turt2live/travis/pinned_messages
Message/event pinning
2017-10-15 01:02:49 +01:00
Bamstam
4a5e2e347b Translated using Weblate (German)
Currently translated at 100.0% (210 of 210 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
2017-10-14 23:11:20 +00:00
Travis Ralston
6926c96f36 Hide pinning messages behind a labs settings
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-10-14 16:41:44 -06:00
Matthew Hodgson
6f819606c1 Merge pull request #4054 from ollieh/issues/3771
Sorting of networks within a protocol based on name
2017-10-14 23:21:51 +01:00
Travis Ralston
3e066d3aef Merge branch 'develop' into travis/pinned_messages 2017-10-14 16:11:17 -06:00
Matthew Hodgson
2667ed2561 Merge pull request #4988 from vector-im/t3chguy/hide_notification_body
allow hiding of notification body for privacy reasons
2017-10-14 23:07:31 +01:00
Matthew Hodgson
5bb2992f93 Merge pull request #5281 from turt2live/travis/display-name-lightbox
Don't use MXIDs on the lightbox if possible
2017-10-14 22:46:13 +01:00
Matthew Hodgson
b70bd1987a Merge pull request #5267 from turt2live/travis/alone_warning_css
CSS for lonely room message
2017-10-14 22:44:58 +01:00
Matthew Hodgson
5c1e2a8a82 Merge pull request #5037 from turt2live/travis/code_block_border
Bring back dark theme code block border
2017-10-14 22:32:45 +01:00
Matthew Hodgson
6f81142bde Merge pull request #5282 from turt2live/travis/unset_avatar
CSS for remove avatar buttons
2017-10-14 22:11:02 +01:00
Travis Ralston
56e775c56a Remove user avatar button CSS 2017-10-13 21:14:08 -06:00
Travis Ralston
c7723ba0b0 Remove room avatar button CSS
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-10-13 20:56:39 -06:00
Travis Ralston
1adb63ac74 Don't use MXIDs on the lightbox if possible
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-10-13 20:18:55 -06:00
Travis Ralston
783aebe5eb CSS for lonely room message
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-10-11 21:13:55 -06:00
Travis Ralston
2d153a72c1 Split up CSS; use .catch instead of .then
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 13:33:14 -06:00
Travis Ralston
078ee54edf Move the PinnedEventsPanel to the react-sdk
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 13:15:21 -06:00
Travis Ralston
2d5acfc0bc Filter pinned events before rendering
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 11:30:52 -06:00
Travis Ralston
b0190f6a65 i18n for remaining strings
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 11:22:06 -06:00
Travis Ralston
0a3bc1c667 Don't try to show redacted messages
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 11:21:44 -06:00
Travis Ralston
aff02885de Don't fail if an event doesn't belong to a room.
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 11:21:21 -06:00
Travis Ralston
965a25ba84 Fix bug where rooms missing m.room.pinned_events could not pin messages
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 11:08:22 -06:00
Travis Ralston
f7389b70aa Hide the pin option in the context menu if the user can't pin messages
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 11:01:17 -06:00
Travis Ralston
efdb4b02c6 i18n for 'Jump to message' button
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 10:55:52 -06:00
Travis Ralston
59a253af37 Don't show the unpin button if the user can't unpin the message.
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 10:53:44 -06:00
Travis Ralston
9b11f576fe Add action bar to pinned event tiles; support unpinning from the panel
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 10:42:58 -06:00
Travis Ralston
fa5a23e0df Permalink pins to their original events
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 10:42:58 -06:00
Travis Ralston
5daa16ab53 Add panel for pinned messages.
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 10:42:58 -06:00
Travis Ralston
774c3dbd38 Pin/unpin message option in a message's context menu
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-29 10:42:58 -06:00
Travis Ralston
7d033e1c0e Bring back dark theme code block border
This fixes https://github.com/vector-im/riot-web/issues/5013 and https://github.com/vector-im/riot-web/issues/4416 by only showing the border when the code block is hovered, and that the border is actually visible. The !important is needed to override the default border behaviour.

Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-09-14 10:03:53 -06:00
Michael Telatynski
fca86be077 allow hiding of notification body for privacy reasons
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2017-09-06 10:56:32 +01:00
Richard Lewis
a30d8cfa2f Add whitespace 2017-08-25 10:02:32 +01:00
Richard Lewis
52717ae486 Update parallelshell version. 2017-08-25 09:51:07 +01:00
Richard Lewis
0f09cca0e3 Ignore package-lock.json 2017-08-25 09:49:40 +01:00
Sylvia van Os
9541fc1033 Mirror local video feed 2017-06-25 22:13:00 +02:00
Oliver Hunt
16357a9bc7 Sorting of networks within a protocol based on name
Signed-off-by: Oliver Hunt <oliver@hunt.bz>
2017-05-27 19:10:17 +01:00
87 changed files with 11917 additions and 1247 deletions

View File

@@ -1,3 +1,156 @@
Changes in [0.13.1](https://github.com/vector-im/riot-web/releases/tag/v0.13.1) (2017-11-17)
============================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.0...v0.13.1)
* SECURITY UPDATE: Fix the force TURN option for inbound calls. This option forced the use
of TURN but only worked for outbound calls and not inbound calls. This means that if you
enabled this option expecting it to mask your IP address in calls, your IP would still
have been revealed to the room if you accepted an incoming call.
* Also adds the Slovak translation.
Changes in [0.13.0](https://github.com/vector-im/riot-web/releases/tag/v0.13.0) (2017-11-15)
============================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.0-rc.3...v0.13.0)
Changes in [0.13.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.13.0-rc.3) (2017-11-14)
======================================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.0-rc.2...v0.13.0-rc.3)
Changes in [0.13.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.13.0-rc.2) (2017-11-10)
======================================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.13.0-rc.1...v0.13.0-rc.2)
* Make groups a fully-fleged baked-in feature
[\#5566](https://github.com/vector-im/riot-web/pull/5566)
Changes in [0.13.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.13.0-rc.1) (2017-11-10)
======================================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.7...v0.13.0-rc.1)
* Fix app tile margins.
[\#5561](https://github.com/vector-im/riot-web/pull/5561)
* Fix wrapping of long room topics (and overlap with apps)
[\#5549](https://github.com/vector-im/riot-web/pull/5549)
* Don't display widget iframes whilst loading.
[\#5555](https://github.com/vector-im/riot-web/pull/5555)
* Update from Weblate.
[\#5558](https://github.com/vector-im/riot-web/pull/5558)
* Adjust CSS for GroupView
[\#5543](https://github.com/vector-im/riot-web/pull/5543)
* CSS for adding rooms to a group with visibility
[\#5546](https://github.com/vector-im/riot-web/pull/5546)
* CSS for pinned indicators
[\#5511](https://github.com/vector-im/riot-web/pull/5511)
* Implement general-purpose tooltip "(?)"-style
[\#5540](https://github.com/vector-im/riot-web/pull/5540)
* CSS for improving group creation UX, namely setting long description
[\#5535](https://github.com/vector-im/riot-web/pull/5535)
* CSS for room notif pills in composer
[\#5531](https://github.com/vector-im/riot-web/pull/5531)
* Do not init a group store when no groupId specified
[\#5520](https://github.com/vector-im/riot-web/pull/5520)
* CSS for new pinned events indicator
[\#5293](https://github.com/vector-im/riot-web/pull/5293)
* T3chguy/devtools 1
[\#5471](https://github.com/vector-im/riot-web/pull/5471)
* Use margin to separate "perms" in the room directory
[\#5498](https://github.com/vector-im/riot-web/pull/5498)
* Add CSS for CreateGroupDialog to give group ID input suffix and prefix style
[\#5505](https://github.com/vector-im/riot-web/pull/5505)
* Fix group invites such that they look similar to room invites
[\#5504](https://github.com/vector-im/riot-web/pull/5504)
* CSS for Your Communities scrollbar
[\#5501](https://github.com/vector-im/riot-web/pull/5501)
* Add toggle to alter visibility of room-group association
[\#5497](https://github.com/vector-im/riot-web/pull/5497)
* CSS for room notification pills
[\#5494](https://github.com/vector-im/riot-web/pull/5494)
* Implement simple GroupRoomInfo
[\#5493](https://github.com/vector-im/riot-web/pull/5493)
* Add back bottom border to widget title bar
[\#5458](https://github.com/vector-im/riot-web/pull/5458)
* Prevent group name looking clickable for non-members
[\#5478](https://github.com/vector-im/riot-web/pull/5478)
* Fix instanceof check, was checking against the Package rather than class
[\#5472](https://github.com/vector-im/riot-web/pull/5472)
* Use correct group store state when rendering "Invite to this community"
[\#5455](https://github.com/vector-im/riot-web/pull/5455)
* Leverages ES6 in Notifications
[\#5453](https://github.com/vector-im/riot-web/pull/5453)
* Re-PR #4412
[\#5437](https://github.com/vector-im/riot-web/pull/5437)
* fix comma error of features example
[\#5410](https://github.com/vector-im/riot-web/pull/5410)
* Devtools: make filtering case-insensitive
[\#5387](https://github.com/vector-im/riot-web/pull/5387)
* Highlight group members icon in group member info
[\#5432](https://github.com/vector-im/riot-web/pull/5432)
* Use CSS to stop greyed Right/LeftPanel UI from being interactable
[\#5422](https://github.com/vector-im/riot-web/pull/5422)
* CSS for preventing editing of UI requiring user privilege if user
unprivileged
[\#5417](https://github.com/vector-im/riot-web/pull/5417)
* Only show UI for adding rooms/users to groups to privileged users
[\#5409](https://github.com/vector-im/riot-web/pull/5409)
* Only show "Invite to this community" when viewing group members
[\#5407](https://github.com/vector-im/riot-web/pull/5407)
* Add trash can icon for delete widget
[\#5397](https://github.com/vector-im/riot-web/pull/5397)
* CSS to improve MyGroups in general, and add placeholder
[\#5375](https://github.com/vector-im/riot-web/pull/5375)
* Rxl881/parallelshell
[\#4881](https://github.com/vector-im/riot-web/pull/4881)
* Custom server text was i18ned by key
[\#5371](https://github.com/vector-im/riot-web/pull/5371)
* Run prunei18n
[\#5370](https://github.com/vector-im/riot-web/pull/5370)
* Update from Weblate.
[\#5369](https://github.com/vector-im/riot-web/pull/5369)
* Add script to prune unused translations
[\#5339](https://github.com/vector-im/riot-web/pull/5339)
* CSS for improved MyGroups page
[\#5360](https://github.com/vector-im/riot-web/pull/5360)
* Add padding-right to Dialogs
[\#5346](https://github.com/vector-im/riot-web/pull/5346)
* Add div.warning and use the scss var
[\#5344](https://github.com/vector-im/riot-web/pull/5344)
* Groups->Communities
[\#5343](https://github.com/vector-im/riot-web/pull/5343)
* Make the 'add rooms' button clickable
[\#5342](https://github.com/vector-im/riot-web/pull/5342)
* Switch to gen-i18n script
[\#5338](https://github.com/vector-im/riot-web/pull/5338)
* Use _t as _t
[\#5334](https://github.com/vector-im/riot-web/pull/5334)
* fix groupview header editing visuals (pt 1)
[\#5330](https://github.com/vector-im/riot-web/pull/5330)
* bump version to prevent eslint errors
[\#5316](https://github.com/vector-im/riot-web/pull/5316)
* CSS for invited group members section
[\#5303](https://github.com/vector-im/riot-web/pull/5303)
* Handle long names in EntityTiles by overflowing correctly
[\#5302](https://github.com/vector-im/riot-web/pull/5302)
* Disable labs in electron
[\#5296](https://github.com/vector-im/riot-web/pull/5296)
* CSS for Modifying GroupView UI matrix-org/matrix-react-sdk#1475
[\#5295](https://github.com/vector-im/riot-web/pull/5295)
* Message/event pinning
[\#5142](https://github.com/vector-im/riot-web/pull/5142)
* Sorting of networks within a protocol based on name
[\#4054](https://github.com/vector-im/riot-web/pull/4054)
* allow hiding of notification body for privacy reasons
[\#4988](https://github.com/vector-im/riot-web/pull/4988)
* Don't use MXIDs on the lightbox if possible
[\#5281](https://github.com/vector-im/riot-web/pull/5281)
* CSS for lonely room message
[\#5267](https://github.com/vector-im/riot-web/pull/5267)
* Bring back dark theme code block border
[\#5037](https://github.com/vector-im/riot-web/pull/5037)
* CSS for remove avatar buttons
[\#5282](https://github.com/vector-im/riot-web/pull/5282)
Changes in [0.12.7](https://github.com/vector-im/riot-web/releases/tag/v0.12.7) (2017-10-16)
============================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.7-rc.3...v0.12.7)

View File

@@ -5,7 +5,10 @@
"integrations_ui_url": "https://scalar.vector.im/",
"integrations_rest_url": "https://scalar.vector.im/api",
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
"enableLabs": true,
"features": {
"feature_groups": "labs",
"feature_pinning": "labs"
},
"default_federate": true,
"roomDirectory": {
"servers": [

View File

@@ -28,9 +28,10 @@ function getColorName(hex) {
## Adding new strings
1. Check if the import ``import { _t } from 'matrix-react-sdk/lib/languageHandler';`` is present. If not add it to the other import statements. Also import `_td` if needed.
2. Add ``_t()`` to your string. (Don't forget curly braces when you assign an expression to JSX attributes in the render method). If the string is introduced at a point before the translation system has not yet been initialized, use `_td()` instead, and call `_t()` at the appropriate time.
3. Add the String to the ``en_EN.json`` file in ``src/i18n/strings`` (respect which repository you are on).
1. Check if the import ``import { _t } from 'matrix-react-sdk/lib/languageHandler';`` is present. If not add it to the other import statements. Also import `_td` if needed.
1. Add ``_t()`` to your string. (Don't forget curly braces when you assign an expression to JSX attributes in the render method). If the string is introduced at a point before the translation system has not yet been initialized, use `_td()` instead, and call `_t()` at the appropriate time.
1. Run `npm run i18n` to update ``src/i18n/strings/en_EN.json`` (if it fails because it can't find the script, your dev environment predates the script, so reinstall/link react-sdk with `npm link ../matrix-react-sdk`). If it segfaults, you may be on Node 6, so try a newer version of node.
1. If you added a string with a plural, you can add other English plural variants to ``src/i18n/strings/en_EN.json`` (remeber to edit the one in the same project as the source file containing your new translation).
## Adding variables inside a string.

View File

@@ -2,7 +2,7 @@
"name": "riot-web",
"productName": "Riot",
"main": "src/electron-main.js",
"version": "0.12.7",
"version": "0.13.1",
"description": "A feature-rich client for Matrix.org",
"author": "Vector Creations Ltd.",
"dependencies": {

View File

@@ -7,7 +7,6 @@
"integrations_rest_url": "https://scalar.vector.im/api",
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
"welcomeUserId": "@riot-bot:matrix.org",
"enableLabs": true,
"roomDirectory": {
"servers": [
"matrix.org"

9512
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
"name": "riot-web",
"productName": "Riot",
"main": "electron_app/src/electron-main.js",
"version": "0.12.7",
"version": "0.13.1",
"description": "A feature-rich client for Matrix.org",
"author": "Vector Creations Ltd.",
"repository": {
@@ -28,6 +28,8 @@
"scripts": {
"reskindex": "reskindex -h src/header",
"reskindex:watch": "reskindex -h src/header -w",
"i18n": "matrix-gen-i18n",
"prunei18n": "matrix-prune-i18n",
"build:res": "node scripts/copy-res.js",
"build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js",
"build:compile": "npm run reskindex && babel --source-maps -d lib src",
@@ -66,8 +68,8 @@
"gfm.css": "^1.1.1",
"highlight.js": "^9.0.0",
"linkifyjs": "^2.1.3",
"matrix-js-sdk": "0.8.5",
"matrix-react-sdk": "0.10.7",
"matrix-js-sdk": "0.9.1",
"matrix-react-sdk": "0.11.1",
"modernizr": "^3.1.0",
"pako": "^1.0.5",
"prop-types": "^15.5.10",
@@ -110,7 +112,7 @@
"eslint-config-google": "^0.7.1",
"eslint-plugin-babel": "^4.1.1",
"eslint-plugin-flowtype": "^2.30.0",
"eslint-plugin-react": "^6.9.0",
"eslint-plugin-react": "^7.4.0",
"expect": "^1.16.0",
"fs-extra": "^0.30.0",
"html-webpack-plugin": "^2.24.0",
@@ -130,7 +132,7 @@
"minimist": "^1.2.0",
"mkdirp": "^0.5.1",
"mocha": "^2.4.5",
"parallelshell": "^1.2.0",
"parallelshell": "^3.0.2",
"postcss-extend": "^1.0.5",
"postcss-import": "^9.0.0",
"postcss-loader": "^1.2.2",

View File

@@ -29,6 +29,7 @@ const INCLUDE_LANGS = [
{'value': 'pt_BR', 'label': 'Português do Brasil'},
{'value': 'ru', 'label': 'Русский'},
{'value': 'sv', 'label': 'Svenska'},
{'value': 'sk', 'label': 'Slovenčina'},
{'value': 'th', 'label': 'ไทย'},
{'value': 'te', 'label': 'తెలుగు'},
{'value': 'tr', 'label': 'Türk'},

View File

@@ -170,9 +170,6 @@ module.exports = React.createClass({
const GroupsButton = sdk.getComponent('elements.GroupsButton');
const SettingsButton = sdk.getComponent('elements.SettingsButton');
const groupsButton = UserSettingsStore.isFeatureEnabled('feature_groups') ?
<GroupsButton tooltip={true} /> : null;
return (
<div className="mx_BottomLeftMenu">
<div className="mx_BottomLeftMenu_options">
@@ -186,12 +183,12 @@ module.exports = React.createClass({
<div ref={this._collectCreateRoomButton}>
<CreateRoomButton tooltip={true} />
</div>
{ groupsButton }
<GroupsButton tooltip={true} />
<span className="mx_BottomLeftMenu_settings">
<SettingsButton tooltip={true} />
</span>
</div>
</div>
);
}
},
});

View File

@@ -19,6 +19,7 @@ limitations under the License.
import React from 'react';
import { DragDropContext } from 'react-dnd';
import HTML5Backend from 'react-dnd-html5-backend';
import classNames from 'classnames';
import KeyCode from 'matrix-react-sdk/lib/KeyCode';
import sdk from 'matrix-react-sdk';
import dis from 'matrix-react-sdk/lib/dispatcher';
@@ -55,7 +56,7 @@ var LeftPanel = React.createClass({
// We just need to update if any of these things change.
if (
this.props.collapsed !== nextProps.collapsed ||
this.props.opacity !== nextProps.opacity
this.props.disabled !== nextProps.disabled
) {
return true;
}
@@ -176,14 +177,16 @@ var LeftPanel = React.createClass({
topBox = <SearchBox collapsed={ this.props.collapsed } onSearch={ this.onSearch } />;
}
let classes = "mx_LeftPanel mx_fadable";
if (this.props.collapsed) {
classes += " collapsed";
}
let classes = classNames(
"mx_LeftPanel", "mx_fadable",
{
"collapsed": this.props.collapsed,
"mx_fadable_faded": this.props.disabled,
}
);
return (
<aside className={classes} style={{ opacity: this.props.opacity }}
onKeyDown={ this._onKeyDown } onFocus={ this._onFocus } onBlur={ this._onBlur }>
<aside className={classes} onKeyDown={ this._onKeyDown } onFocus={ this._onFocus } onBlur={ this._onBlur }>
{ topBox }
<CallPreview ConferenceHandler={VectorConferenceHandler} />
<RoomList

View File

@@ -18,14 +18,16 @@ limitations under the License.
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import { _t } from 'matrix-react-sdk/lib/languageHandler';
import sdk from 'matrix-react-sdk';
import dis from 'matrix-react-sdk/lib/dispatcher';
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
import { MatrixClient } from 'matrix-js-sdk';
import Analytics from 'matrix-react-sdk/lib/Analytics';
import rate_limited_func from 'matrix-react-sdk/lib/ratelimitedfunc';
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
import { showGroupInviteDialog, showGroupAddRoomDialog } from 'matrix-react-sdk/lib/GroupAddressPicker';
import GroupStoreCache from 'matrix-react-sdk/lib/stores/GroupStoreCache';
class HeaderButton extends React.Component {
constructor() {
@@ -80,10 +82,15 @@ module.exports = React.createClass({
collapsed: React.PropTypes.bool, // currently unused property to request for a minimized view of the panel
},
contextTypes: {
matrixClient: PropTypes.instanceOf(MatrixClient),
},
Phase: {
RoomMemberList: 'RoomMemberList',
GroupMemberList: 'GroupMemberList',
GroupRoomList: 'GroupRoomList',
GroupRoomInfo: 'GroupRoomInfo',
FilePanel: 'FilePanel',
NotificationPanel: 'NotificationPanel',
RoomMemberInfo: 'RoomMemberInfo',
@@ -92,29 +99,53 @@ module.exports = React.createClass({
componentWillMount: function() {
this.dispatcherRef = dis.register(this.onAction);
const cli = MatrixClientPeg.get();
const cli = this.context.matrixClient;
cli.on("RoomState.members", this.onRoomStateMember);
this._initGroupStore(this.props.groupId);
},
componentWillUnmount: function() {
dis.unregister(this.dispatcherRef);
if (MatrixClientPeg.get()) {
MatrixClientPeg.get().removeListener("RoomState.members", this.onRoomStateMember);
if (this.context.matrixClient) {
this.context.matrixClient.removeListener("RoomState.members", this.onRoomStateMember);
}
this._unregisterGroupStore();
},
getInitialState: function() {
if (this.props.groupId) {
return {
phase: this.Phase.GroupMemberList,
};
} else {
return {
phase: this.Phase.RoomMemberList,
};
return {
phase: this.props.groupId ? this.Phase.GroupMemberList : this.Phase.RoomMemberList,
isUserPrivilegedInGroup: null,
}
},
componentWillReceiveProps(newProps) {
if (newProps.groupId !== this.props.groupId) {
this._unregisterGroupStore();
this._initGroupStore(newProps.groupId);
}
},
_initGroupStore(groupId) {
if (!groupId) return;
this._groupStore = GroupStoreCache.getGroupStore(
this.context.matrixClient, groupId,
);
this._groupStore.registerListener(this.onGroupStoreUpdated);
},
_unregisterGroupStore() {
if (this._groupStore) {
this._groupStore.unregisterListener(this.onGroupStoreUpdated);
}
},
onGroupStoreUpdated: function(){
this.setState({
isUserPrivilegedInGroup: this._groupStore.isUserPrivileged(),
});
},
onCollapseClick: function() {
dis.dispatch({
action: 'hide_right_panel',
@@ -122,7 +153,7 @@ module.exports = React.createClass({
},
onInviteButtonClick: function() {
if (MatrixClientPeg.get().isGuest()) {
if (this.context.matrixClient.isGuest()) {
dis.dispatch({action: 'view_set_mxid'});
return;
}
@@ -176,7 +207,6 @@ module.exports = React.createClass({
} else if (this.props.groupId) {
this.setState({
phase: this.Phase.GroupMemberList,
groupId: payload.groupId,
member: payload.member,
});
}
@@ -184,13 +214,20 @@ module.exports = React.createClass({
} else if (payload.action === "view_group") {
this.setState({
phase: this.Phase.GroupMemberList,
groupId: payload.groupId,
member: null,
});
} else if (payload.action === "view_group_room") {
this.setState({
phase: this.Phase.GroupRoomInfo,
groupRoomId: payload.groupRoomId,
});
} else if (payload.action === "view_group_room_list") {
this.setState({
phase: this.Phase.GroupRoomList,
});
} else if (payload.action === "view_group_user") {
this.setState({
phase: this.Phase.GroupMemberInfo,
groupId: payload.groupId,
member: payload.member,
});
} else if (payload.action === "view_room") {
@@ -213,6 +250,7 @@ module.exports = React.createClass({
const GroupMemberList = sdk.getComponent('groups.GroupMemberList');
const GroupMemberInfo = sdk.getComponent('groups.GroupMemberInfo');
const GroupRoomList = sdk.getComponent('groups.GroupRoomList');
const GroupRoomInfo = sdk.getComponent('groups.GroupRoomInfo');
const TintableSvg = sdk.getComponent("elements.TintableSvg");
@@ -222,13 +260,13 @@ module.exports = React.createClass({
if ((this.state.phase == this.Phase.RoomMemberList || this.state.phase === this.Phase.RoomMemberInfo)
&& this.props.roomId
) {
const cli = MatrixClientPeg.get();
const cli = this.context.matrixClient;
const room = cli.getRoom(this.props.roomId);
let userIsInRoom;
if (room) {
membersBadge = room.getJoinedMembers().length;
userIsInRoom = room.hasMembershipState(
MatrixClientPeg.get().credentials.userId, 'join',
this.context.matrixClient.credentials.userId, 'join',
);
}
@@ -243,6 +281,11 @@ module.exports = React.createClass({
}
}
const isPhaseGroup = [
this.Phase.GroupMemberInfo,
this.Phase.GroupMemberList
].includes(this.state.phase);
let headerButtons = [];
if (this.props.roomId) {
headerButtons = [
@@ -266,12 +309,12 @@ module.exports = React.createClass({
} else if (this.props.groupId) {
headerButtons = [
<HeaderButton key="_groupMembersButton" title={_t('Members')} iconSrc="img/icons-people.svg"
isHighlighted={this.state.phase === this.Phase.GroupMemberList}
isHighlighted={isPhaseGroup}
clickPhase={this.Phase.GroupMemberList}
analytics={['Right Panel', 'Group Member List Button', 'click']}
/>,
<HeaderButton key="_roomsButton" title={_t('Rooms')} iconSrc="img/icons-room.svg"
isHighlighted={this.state.phase === this.Phase.GroupRoomList}
isHighlighted={[this.Phase.GroupRoomList, this.Phase.GroupRoomInfo].includes(this.state.phase)}
clickPhase={this.Phase.GroupRoomList}
analytics={['Right Panel', 'Group Room List Button', 'click']}
/>,
@@ -306,6 +349,11 @@ module.exports = React.createClass({
groupMember={this.state.member}
groupId={this.props.groupId}
key={this.state.member.user_id} />;
} else if (this.state.phase == this.Phase.GroupRoomInfo) {
panel = <GroupRoomInfo
groupRoomId={this.state.groupRoomId}
groupId={this.props.groupId}
key={this.state.groupRoomId} />;
} else if (this.state.phase == this.Phase.NotificationPanel) {
panel = <NotificationPanel />;
} else if (this.state.phase == this.Phase.FilePanel) {
@@ -317,31 +365,34 @@ module.exports = React.createClass({
panel = <div className="mx_RightPanel_blank"></div>;
}
if (this.props.groupId) {
inviteGroup = this.state.phase === this.Phase.GroupMemberList ? (
if (this.props.groupId && this.state.isUserPrivilegedInGroup) {
inviteGroup = isPhaseGroup ? (
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
<div className="mx_RightPanel_icon" >
<TintableSvg src="img/icon-invite-people.svg" width="35" height="35" />
</div>
<div className="mx_RightPanel_message">{ _t('Invite to this group') }</div>
<div className="mx_RightPanel_message">{ _t('Invite to this community') }</div>
</AccessibleButton>
) : (
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
<div className="mx_RightPanel_icon" >
<TintableSvg src="img/icons-room-add.svg" width="35" height="35" />
</div>
<div className="mx_RightPanel_message">{ _t('Add room to this group') }</div>
<div className="mx_RightPanel_message">{ _t('Add rooms to this community') }</div>
</AccessibleButton>
);
}
let classes = "mx_RightPanel mx_fadable";
if (this.props.collapsed) {
classes += " collapsed";
}
let classes = classNames(
"mx_RightPanel", "mx_fadable",
{
"collapsed": this.props.collapsed,
"mx_fadable_faded": this.props.disabled,
}
);
return (
<aside className={classes} style={{ opacity: this.props.opacity }}>
<aside className={classes}>
<div className="mx_RightPanel_header">
<div className="mx_RightPanel_headerButtonGroup">
{headerButtons}

View File

@@ -89,17 +89,17 @@ module.exports = React.createClass({
});
// dis.dispatch({
// action: 'ui_opacity',
// sideOpacity: 0.3,
// middleOpacity: 0.3,
// action: 'panel_disable',
// sideDisabled: true,
// middleDisabled: true,
// });
},
componentWillUnmount: function() {
// dis.dispatch({
// action: 'ui_opacity',
// sideOpacity: 1.0,
// middleOpacity: 1.0,
// action: 'panel_disable',
// sideDisabled: false,
// middleDisabled: false,
// });
if (this.filterTimeout) {
clearTimeout(this.filterTimeout);
@@ -409,7 +409,7 @@ module.exports = React.createClass({
perms = null;
if (guestRead || guestJoin) {
perms = <div className="mx_RoomDirectory_perms">{guestRead} {guestJoin}</div>;
perms = <div className="mx_RoomDirectory_perms">{guestRead}{guestJoin}</div>;
}
var topic = rooms[i].topic || '';

View File

@@ -246,10 +246,14 @@ var RoomSubList = React.createClass({
roomNotificationCount: function(truncateAt) {
var self = this;
if (this.props.isInvite) {
return [0, true];
}
return this.props.list.reduce(function(result, room, index) {
if (truncateAt === undefined || index >= truncateAt) {
var roomNotifState = RoomNotifs.getRoomNotifsState(room.roomId);
var highlight = room.getUnreadNotificationCount('highlight') > 0 || self.props.isInvite;
var highlight = room.getUnreadNotificationCount('highlight') > 0;
var notificationCount = room.getUnreadNotificationCount();
const notifBadges = notificationCount > 0 && self._shouldShowNotifBadge(roomNotifState);
@@ -394,7 +398,8 @@ var RoomSubList = React.createClass({
var subListNotifCount = subListNotifications[0];
var subListNotifHighlight = subListNotifications[1];
var roomCount = this.props.list.length > 0 ? this.props.list.length : '';
var totalTiles = this.props.list.length + (this.props.extraTiles || []).length;
var roomCount = totalTiles > 0 ? totalTiles : '';
var chevronClasses = classNames({
'mx_RoomSubList_chevron': true,

View File

@@ -43,26 +43,40 @@ module.exports = React.createClass({
getInitialState: function() {
return {
canRedact: false,
canPin: false,
};
},
componentWillMount: function() {
MatrixClientPeg.get().on('RoomMember.powerLevel', this._checkCanRedact);
this._checkCanRedact();
MatrixClientPeg.get().on('RoomMember.powerLevel', this._checkPermissions);
this._checkPermissions();
},
componentWillUnmount: function() {
const cli = MatrixClientPeg.get();
if (cli) {
cli.removeListener('RoomMember.powerLevel', this._checkCanRedact);
cli.removeListener('RoomMember.powerLevel', this._checkPermissions);
}
},
_checkCanRedact: function() {
_checkPermissions: function() {
const cli = MatrixClientPeg.get();
const room = cli.getRoom(this.props.mxEvent.getRoomId());
const canRedact = room.currentState.maySendRedactionForEvent(this.props.mxEvent, cli.credentials.userId);
this.setState({canRedact});
let canPin = room.currentState.mayClientSendStateEvent('m.room.pinned_events', cli);
// HACK: Intentionally say we can't pin if the user doesn't want to use the functionality
if (!UserSettingsStore.isFeatureEnabled("feature_pinning")) canPin = false;
this.setState({canRedact, canPin});
},
_isPinned: function() {
const room = MatrixClientPeg.get().getRoom(this.props.mxEvent.getRoomId());
const pinnedEvent = room.currentState.getStateEvents('m.room.pinned_events', '');
if (!pinnedEvent) return false;
return pinnedEvent.getContent().pinned.includes(this.props.mxEvent.getId());
},
onResendClick: function() {
@@ -122,6 +136,28 @@ module.exports = React.createClass({
this.closeMenu();
},
onPinClick: function() {
MatrixClientPeg.get().getStateEvent(this.props.mxEvent.getRoomId(), 'm.room.pinned_events', '')
.catch(e => {
// Intercept the Event Not Found error and fall through the promise chain with no event.
if (e.errcode === "M_NOT_FOUND") return null;
throw e;
})
.then(event => {
const eventIds = (event ? event.pinned : []) || [];
if (!eventIds.includes(this.props.mxEvent.getId())) {
// Not pinned - add
eventIds.push(this.props.mxEvent.getId());
} else {
// Pinned - remove
eventIds.splice(eventIds.indexOf(this.props.mxEvent.getId()), 1);
}
MatrixClientPeg.get().sendStateEvent(this.props.mxEvent.getRoomId(), 'm.room.pinned_events', {pinned: eventIds}, '');
});
this.closeMenu();
},
closeMenu: function() {
if (this.props.onFinished) this.props.onFinished();
},
@@ -147,6 +183,7 @@ module.exports = React.createClass({
let redactButton;
let cancelButton;
let forwardButton;
let pinButton;
let viewSourceButton;
let viewClearSourceButton;
let unhidePreviewButton;
@@ -186,6 +223,14 @@ module.exports = React.createClass({
{ _t('Forward Message') }
</div>
);
if (this.state.canPin) {
pinButton = (
<div className="mx_MessageContextMenu_field" onClick={this.onPinClick}>
{this._isPinned() ? _t('Unpin Message') : _t('Pin Message')}
</div>
);
}
}
}
@@ -246,6 +291,7 @@ module.exports = React.createClass({
{redactButton}
{cancelButton}
{forwardButton}
{pinButton}
{viewSourceButton}
{viewClearSourceButton}
{unhidePreviewButton}

View File

@@ -15,35 +15,24 @@ limitations under the License.
*/
import React from 'react';
import PropTypes from 'prop-types';
import sdk from 'matrix-react-sdk';
import { _t } from 'matrix-react-sdk/lib/languageHandler';
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
class SendCustomEvent extends React.Component {
static propTypes = {
roomId: React.PropTypes.string.isRequired,
onBack: React.PropTypes.func.isRequired,
eventType: React.PropTypes.string.isRequired,
evContent: React.PropTypes.string.isRequired,
class DevtoolsComponent extends React.Component {
static contextTypes = {
roomId: PropTypes.string.isRequired,
};
}
static defaultProps = {
eventType: '',
evContent: '{\n\n}',
};
class GenericEditor extends DevtoolsComponent {
// static propTypes = {onBack: PropTypes.func.isRequired};
constructor(props, context) {
super(props, context);
this._send = this._send.bind(this);
this.onBack = this.onBack.bind(this);
this._onChange = this._onChange.bind(this);
this.state = {
message: null,
input_eventType: this.props.eventType,
input_evContent: this.props.evContent,
};
this.onBack = this.onBack.bind(this);
}
onBack() {
@@ -54,26 +43,75 @@ class SendCustomEvent extends React.Component {
}
}
_onChange(e) {
this.setState({[e.target.id]: e.target.type === 'checkbox' ? e.target.checked : e.target.value});
}
_buttons() {
return <div className="mx_Dialog_buttons">
<button onClick={this.onBack}>{ _t('Back') }</button>
{!this.state.message && <button onClick={this._send}>{ _t('Send') }</button>}
{ !this.state.message && <button onClick={this._send}>{ _t('Send') }</button> }
</div>;
}
textInput(id, label) {
return <div className="mx_DevTools_inputRow">
<div className="mx_DevTools_inputLabelCell">
<label htmlFor={id}>{ label }</label>
</div>
<div className="mx_DevTools_inputCell">
<input id={id} onChange={this._onChange} value={this.state[id]} size="32" />
</div>
</div>;
}
}
class SendCustomEvent extends GenericEditor {
static getLabel() { return _t('Send Custom Event'); }
static propTypes = {
onBack: PropTypes.func.isRequired,
forceStateEvent: PropTypes.bool,
inputs: PropTypes.object,
};
constructor(props, context) {
super(props, context);
this._send = this._send.bind(this);
const {eventType, stateKey, evContent} = Object.assign({
eventType: '',
stateKey: '',
evContent: '{\n\n}',
}, this.props.inputs);
this.state = {
isStateEvent: Boolean(this.props.forceStateEvent),
eventType,
stateKey,
evContent,
};
}
send(content) {
return MatrixClientPeg.get().sendEvent(this.props.roomId, this.state.input_eventType, content);
const cli = MatrixClientPeg.get();
if (this.state.isStateEvent) {
return cli.sendStateEvent(this.context.roomId, this.state.eventType, content, this.state.stateKey);
} else {
return cli.sendEvent(this.context.roomId, this.state.eventType, content);
}
}
async _send() {
if (this.state.input_eventType === '') {
if (this.state.eventType === '') {
this.setState({ message: _t('You must specify an event type!') });
return;
}
let message;
try {
const content = JSON.parse(this.state.input_evContent);
const content = JSON.parse(this.state.evContent);
await this.send(content);
message = _t('Event sent!');
} catch (e) {
@@ -82,107 +120,188 @@ class SendCustomEvent extends React.Component {
this.setState({ message });
}
_additionalFields() {
return <div/>;
render() {
if (this.state.message) {
return <div>
<div className="mx_Dialog_content">
{ this.state.message }
</div>
{ this._buttons() }
</div>;
}
return <div>
<div className="mx_Dialog_content">
{ this.textInput('eventType', _t('Event Type')) }
{ this.state.isStateEvent && this.textInput('stateKey', _t('State Key')) }
<br />
<div className="mx_UserSettings_profileLabelCell">
<label htmlFor="evContent"> { _t('Event Content') } </label>
</div>
<div>
<textarea id="evContent" onChange={this._onChange} value={this.state.evContent} className="mx_TextInputDialog_input" cols="63" rows="5" />
</div>
</div>
<div className="mx_Dialog_buttons">
<button onClick={this.onBack}>{ _t('Back') }</button>
{ !this.state.message && <button onClick={this._send}>{ _t('Send') }</button> }
{ !this.state.message && !this.props.forceStateEvent && <div style={{float: "right"}}>
<input id="isStateEvent" className="mx_DevTools_tgl mx_DevTools_tgl-flip" type="checkbox" onChange={this._onChange} checked={this.state.isStateEvent} />
<label className="mx_DevTools_tgl-btn" data-tg-off="Event" data-tg-on="State Event" htmlFor="isStateEvent" />
</div> }
</div>
</div>;
}
}
class SendAccountData extends GenericEditor {
static getLabel() { return _t('Send Account Data'); }
static propTypes = {
isRoomAccountData: PropTypes.bool,
forceMode: PropTypes.bool,
inputs: PropTypes.object,
};
constructor(props, context) {
super(props, context);
this._send = this._send.bind(this);
const {eventType, evContent} = Object.assign({
eventType: '',
evContent: '{\n\n}',
}, this.props.inputs);
this.state = {
isRoomAccountData: Boolean(this.props.isRoomAccountData),
eventType,
evContent,
};
}
_onChange(e) {
this.setState({[`input_${e.target.id}`]: e.target.value});
send(content) {
const cli = MatrixClientPeg.get();
if (this.state.isRoomAccountData) {
return cli.setRoomAccountData(this.context.roomId, this.state.eventType, content);
}
return cli.setAccountData(this.state.eventType, content);
}
async _send() {
if (this.state.eventType === '') {
this.setState({ message: _t('You must specify an event type!') });
return;
}
let message;
try {
const content = JSON.parse(this.state.evContent);
await this.send(content);
message = _t('Event sent!');
} catch (e) {
message = _t('Failed to send custom event.') + ' (' + e.toString() + ')';
}
this.setState({ message });
}
render() {
if (this.state.message) {
return <div>
<div className="mx_Dialog_content">
{this.state.message}
{ this.state.message }
</div>
{this._buttons()}
{ this._buttons() }
</div>;
}
return <div>
<div className="mx_Dialog_content">
{this._additionalFields()}
<div className="mx_TextInputDialog_label">
<label htmlFor="eventType"> { _t('Event Type') } </label>
</div>
<div>
<input id="eventType" onChange={this._onChange} value={this.state.input_eventType} className="mx_TextInputDialog_input" size="64" />
</div>
{ this.textInput('eventType', _t('Event Type')) }
<br />
<div className="mx_TextInputDialog_label">
<div className="mx_UserSettings_profileLabelCell">
<label htmlFor="evContent"> { _t('Event Content') } </label>
</div>
<div>
<textarea id="evContent" onChange={this._onChange} value={this.state.input_evContent} className="mx_TextInputDialog_input" cols="63" rows="5" />
<textarea id="evContent" onChange={this._onChange} value={this.state.evContent} className="mx_TextInputDialog_input" cols="63" rows="5" />
</div>
</div>
{this._buttons()}
<div className="mx_Dialog_buttons">
<button onClick={this.onBack}>{ _t('Back') }</button>
{ !this.state.message && <button onClick={this._send}>{ _t('Send') }</button> }
{ !this.state.message && <div style={{float: "right"}}>
<input id="isRoomAccountData" className="mx_DevTools_tgl mx_DevTools_tgl-flip" type="checkbox" onChange={this._onChange} checked={this.state.isRoomAccountData} disabled={this.props.forceMode} />
<label className="mx_DevTools_tgl-btn" data-tg-off="Account Data" data-tg-on="Room Data" htmlFor="isRoomAccountData" />
</div> }
</div>
</div>;
}
}
class SendCustomStateEvent extends SendCustomEvent {
class FilteredList extends React.Component {
static propTypes = {
roomId: React.PropTypes.string.isRequired,
onBack: React.PropTypes.func.isRequired,
eventType: React.PropTypes.string.isRequired,
evContent: React.PropTypes.string.isRequired,
stateKey: React.PropTypes.string.isRequired,
};
static defaultProps = {
eventType: '',
evContent: '{\n\n}',
stateKey: '',
children: PropTypes.any,
};
constructor(props, context) {
super(props, context);
this.state['input_stateKey'] = this.props.stateKey;
this.onQuery = this.onQuery.bind(this);
this.state = {
query: '',
};
}
send(content) {
const cli = MatrixClientPeg.get();
return cli.sendStateEvent(this.props.roomId, this.state.input_eventType, content, this.state.input_stateKey);
onQuery(ev) {
this.setState({ query: ev.target.value });
}
_additionalFields() {
filterChildren() {
if (this.state.query) {
const lowerQuery = this.state.query.toLowerCase();
return this.props.children.filter((child) => child.key.toLowerCase().includes(lowerQuery));
}
return this.props.children;
}
render() {
return <div>
<div className="mx_TextInputDialog_label">
<label htmlFor="stateKey"> { _t('State Key') } </label>
</div>
<div>
<input id="stateKey" onChange={this._onChange} value={this.state.input_stateKey} className="mx_TextInputDialog_input" size="64" />
</div>
<input size="64"
onChange={this.onQuery}
value={this.state.query}
placeholder={_t('Filter results')}
className="mx_TextInputDialog_input mx_DevTools_RoomStateExplorer_query" />
{ this.filterChildren() }
</div>;
}
}
class RoomStateExplorer extends React.Component {
class RoomStateExplorer extends DevtoolsComponent {
static getLabel() { return _t('Explore Room State'); }
static propTypes = {
setMode: React.PropTypes.func.isRequired,
roomId: React.PropTypes.string.isRequired,
onBack: React.PropTypes.func.isRequired,
onBack: PropTypes.func.isRequired,
};
constructor(props, context) {
super(props, context);
const room = MatrixClientPeg.get().getRoom(this.props.roomId);
const room = MatrixClientPeg.get().getRoom(this.context.roomId);
this.roomStateEvents = room.currentState.events;
this.onBack = this.onBack.bind(this);
this.editEv = this.editEv.bind(this);
this.onQuery = this.onQuery.bind(this);
}
state = {
query: '',
eventType: null,
event: null,
};
this.state = {
eventType: null,
event: null,
editing: false,
};
}
browseEventType(eventType) {
return () => {
@@ -197,7 +316,9 @@ class RoomStateExplorer extends React.Component {
}
onBack() {
if (this.state.event) {
if (this.state.editing) {
this.setState({ editing: false });
} else if (this.state.event) {
this.setState({ event: null });
} else if (this.state.eventType) {
this.setState({ eventType: null });
@@ -207,23 +328,22 @@ class RoomStateExplorer extends React.Component {
}
editEv() {
const ev = this.state.event;
this.props.setMode(SendCustomStateEvent, {
eventType: ev.getType(),
evContent: JSON.stringify(ev.getContent(), null, '\t'),
stateKey: ev.getStateKey(),
});
}
onQuery(ev) {
this.setState({ query: ev.target.value });
this.setState({ editing: true });
}
render() {
if (this.state.event) {
if (this.state.editing) {
return <SendCustomEvent forceStateEvent={true} onBack={this.onBack} inputs={{
eventType: this.state.event.getType(),
evContent: JSON.stringify(this.state.event.getContent(), null, '\t'),
stateKey: this.state.event.getStateKey(),
}} />;
}
return <div className="mx_ViewSource">
<div className="mx_Dialog_content">
<pre>{JSON.stringify(this.state.event.event, null, 2)}</pre>
<pre>{ JSON.stringify(this.state.event.event, null, 2) }</pre>
</div>
<div className="mx_Dialog_buttons">
<button onClick={this.onBack}>{ _t('Back') }</button>
@@ -234,11 +354,9 @@ class RoomStateExplorer extends React.Component {
const rows = [];
const classes = 'mx_DevTools_RoomStateExplorer_button';
if (this.state.eventType === null) {
Object.keys(this.roomStateEvents).forEach((evType) => {
// Skip this entry if does not contain search query
if (this.state.query && !evType.includes(this.state.query)) return;
const stateGroup = this.roomStateEvents[evType];
const stateKeys = Object.keys(stateGroup);
@@ -249,7 +367,7 @@ class RoomStateExplorer extends React.Component {
onClickFn = this.onViewSourceClick(stateGroup[stateKeys[0]]);
}
rows.push(<button className="mx_DevTools_RoomStateExplorer_button" key={evType} onClick={onClickFn}>
rows.push(<button className={classes} key={evType} onClick={onClickFn}>
{ evType }
</button>);
});
@@ -257,12 +375,8 @@ class RoomStateExplorer extends React.Component {
const evType = this.state.eventType;
const stateGroup = this.roomStateEvents[evType];
Object.keys(stateGroup).forEach((stateKey) => {
// Skip this entry if does not contain search query
if (this.state.query && !stateKey.includes(this.state.query)) return;
const ev = stateGroup[stateKey];
rows.push(<button className="mx_DevTools_RoomStateExplorer_button" key={stateKey}
onClick={this.onViewSourceClick(ev)}>
rows.push(<button className={classes} key={stateKey} onClick={this.onViewSourceClick(ev)}>
{ stateKey }
</button>);
});
@@ -270,8 +384,9 @@ class RoomStateExplorer extends React.Component {
return <div>
<div className="mx_Dialog_content">
<input onChange={this.onQuery} placeholder={_t('Filter results')} size="64" className="mx_TextInputDialog_input mx_DevTools_RoomStateExplorer_query" value={this.state.query} />
{rows}
<FilteredList>
{ rows }
</FilteredList>
</div>
<div className="mx_Dialog_buttons">
<button onClick={this.onBack}>{ _t('Back') }</button>
@@ -280,40 +395,157 @@ class RoomStateExplorer extends React.Component {
}
}
export default class DevtoolsDialog extends React.Component {
class AccountDataExplorer extends DevtoolsComponent {
static getLabel() { return _t('Explore Account Data'); }
static propTypes = {
roomId: React.PropTypes.string.isRequired,
onFinished: React.PropTypes.func.isRequired,
onBack: PropTypes.func.isRequired,
};
state = {
mode: null,
modeArgs: {},
constructor(props, context) {
super(props, context);
this.onBack = this.onBack.bind(this);
this.editEv = this.editEv.bind(this);
this._onChange = this._onChange.bind(this);
this.state = {
isRoomAccountData: false,
event: null,
editing: false,
};
}
getData() {
const cli = MatrixClientPeg.get();
if (this.state.isRoomAccountData) {
return cli.getRoom(this.context.roomId).accountData;
}
return cli.store.accountData;
}
onViewSourceClick(event) {
return () => {
this.setState({ event });
};
}
onBack() {
if (this.state.editing) {
this.setState({ editing: false });
} else if (this.state.event) {
this.setState({ event: null });
} else {
this.props.onBack();
}
}
_onChange(e) {
this.setState({[e.target.id]: e.target.type === 'checkbox' ? e.target.checked : e.target.value});
}
editEv() {
this.setState({ editing: true });
}
render() {
if (this.state.event) {
if (this.state.editing) {
return <SendAccountData isRoomAccountData={this.state.isRoomAccountData} onBack={this.onBack} inputs={{
eventType: this.state.event.getType(),
evContent: JSON.stringify(this.state.event.getContent(), null, '\t'),
}} forceMode={true} />;
}
return <div className="mx_ViewSource">
<div className="mx_Dialog_content">
<pre>{ JSON.stringify(this.state.event.event, null, 2) }</pre>
</div>
<div className="mx_Dialog_buttons">
<button onClick={this.onBack}>{ _t('Back') }</button>
<button onClick={this.editEv}>{ _t('Edit') }</button>
</div>
</div>;
}
const rows = [];
const classes = 'mx_DevTools_RoomStateExplorer_button';
const data = this.getData();
Object.keys(data).forEach((evType) => {
const ev = data[evType];
rows.push(<button className={classes} key={evType} onClick={this.onViewSourceClick(ev)}>
{ evType }
</button>);
});
return <div>
<div className="mx_Dialog_content">
<FilteredList>
{ rows }
</FilteredList>
</div>
<div className="mx_Dialog_buttons">
<button onClick={this.onBack}>{ _t('Back') }</button>
{ !this.state.message && <div style={{float: "right"}}>
<input id="isRoomAccountData" className="mx_DevTools_tgl mx_DevTools_tgl-flip" type="checkbox" onChange={this._onChange} checked={this.state.isRoomAccountData} />
<label className="mx_DevTools_tgl-btn" data-tg-off="Account Data" data-tg-on="Room Data" htmlFor="isRoomAccountData" />
</div> }
</div>
</div>;
}
}
const Entries = [
SendCustomEvent,
RoomStateExplorer,
SendAccountData,
AccountDataExplorer,
];
export default class DevtoolsDialog extends React.Component {
static childContextTypes = {
roomId: PropTypes.string.isRequired,
// client: PropTypes.instanceOf(MatixClient),
};
static propTypes = {
roomId: PropTypes.string.isRequired,
onFinished: PropTypes.func.isRequired,
};
constructor(props, context) {
super(props, context);
this.onBack = this.onBack.bind(this);
this.setMode = this.setMode.bind(this);
this.onCancel = this.onCancel.bind(this);
this.state = {
mode: null,
};
}
componentWillUnmount() {
this._unmounted = true;
}
getChildContext() {
return { roomId: this.props.roomId };
}
_setMode(mode) {
return () => {
this.setMode(mode);
this.setState({ mode });
};
}
setMode(mode, modeArgs={}) {
this.setState({ mode, modeArgs });
}
onBack() {
this.setState({ mode: null });
if (this.prevMode) {
this.setState({ mode: this.prevMode });
this.prevMode = null;
} else {
this.setState({ mode: null });
}
}
onCancel() {
@@ -324,14 +556,27 @@ export default class DevtoolsDialog extends React.Component {
let body;
if (this.state.mode) {
body =
<this.state.mode {...this.props} {...this.state.modeArgs} onBack={this.onBack} setMode={this.setMode} />;
} else {
body = <div>
<div className="mx_Dialog_content">
<button onClick={this._setMode(SendCustomEvent)}>{ _t('Send Custom Event') }</button>
<button onClick={this._setMode(SendCustomStateEvent)}>{ _t('Send Custom State Event') }</button>
<button onClick={this._setMode(RoomStateExplorer)}>{ _t('Explore Room State') }</button>
<div className="mx_DevTools_label_left">{ this.state.mode.getLabel() }</div>
<div className="mx_DevTools_label_right">Room ID: { this.props.roomId }</div>
<div className="mx_DevTools_label_bottom" />
<this.state.mode onBack={this.onBack} />
</div>;
} else {
const classes = "mx_DevTools_RoomStateExplorer_button";
body = <div>
<div>
<div className="mx_DevTools_label_left">{ _t('Toolbox') }</div>
<div className="mx_DevTools_label_right">Room ID: { this.props.roomId }</div>
<div className="mx_DevTools_label_bottom" />
<div className="mx_Dialog_content">
{ Entries.map((Entry) => {
const label = Entry.getLabel();
const onClick = this._setMode(Entry);
return <button className={classes} key={label} onClick={onClick}>{ label }</button>;
}) }
</div>
</div>
<div className="mx_Dialog_buttons">
<button onClick={this.onCancel}>{ _t('Cancel') }</button>
@@ -342,7 +587,6 @@ export default class DevtoolsDialog extends React.Component {
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
return (
<BaseDialog className="mx_QuestionDialog" onFinished={this.props.onFinished} title={_t('Developer Tools')}>
<div>Room ID: { this.props.roomId }</div>
{ body }
</BaseDialog>
);

View File

@@ -150,7 +150,21 @@ export default class NetworkDropdown extends React.Component {
if (this.props.protocols) {
for (const proto of Object.keys(this.props.protocols)) {
if (!this.props.protocols[proto].instances) continue;
for (const instance of this.props.protocols[proto].instances) {
const sortedInstances = this.props.protocols[proto].instances;
sortedInstances.sort(function(x, y) {
const a = x.desc
const b = y.desc
if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
}
});
for (const instance of sortedInstances) {
if (!instance.instance_id) continue;
options.push(this._makeMenuOption(server, instance, false));
}

View File

@@ -150,8 +150,16 @@ module.exports = React.createClass({
var eventMeta;
if(showEventMeta) {
// Figure out the sender, defaulting to mxid
let sender = this.props.mxEvent.getSender();
const room = MatrixClientPeg.get().getRoom(this.props.mxEvent.getRoomId());
if (room) {
const member = room.getMember(sender);
if (member) sender = member.name;
}
eventMeta = (<div className="mx_ImageView_metadata">
{ _t('Uploaded on %(date)s by %(user)s', {date: DateUtils.formatDate(new Date(this.props.mxEvent.getTs())), user: this.props.mxEvent.getSender()}) }
{ _t('Uploaded on %(date)s by %(user)s', {date: DateUtils.formatDate(new Date(this.props.mxEvent.getTs())), user: sender}) }
</div>);
}

View File

@@ -0,0 +1,33 @@
/*
Copyright 2017 New Vector Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
const React = require('react');
module.exports = React.createClass({
displayName: 'InlineSpinner',
render: function() {
var w = this.props.w || 16;
var h = this.props.h || 16;
var imgClass = this.props.imgClassName || "";
return (
<div className="mx_InlineSpinner">
<img src="img/spinner.gif" width={w} height={h} className={imgClass}/>
</div>
);
}
});

View File

@@ -1,5 +1,6 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -31,7 +32,13 @@ module.exports = React.createClass({
{ _t('Custom Server Options') }
</div>
<div className="mx_Dialog_content">
<span dangerouslySetInnerHTML={{__html: sanitizeHtml(_t('customServer_text'))}} />
<span dangerouslySetInnerHTML={{__html: sanitizeHtml(_t(
"You can use the custom server options to sign into other Matrix "+
"servers by specifying a different Home server URL.<br/>This allows "+
"you to use Riot with an existing Matrix account on a different home "+
"server.<br/><br/>You can also set a custom identity server but you won't "+
"be able to invite users by email address, or be invited by email address yourself.",
))}} />
</div>
<div className="mx_Dialog_buttons">
<button onClick={this.props.onFinished} autoFocus={true}>

View File

@@ -19,13 +19,16 @@ limitations under the License.
var React = require('react');
var ReactDOM = require('react-dom');
var dis = require('matrix-react-sdk/lib/dispatcher');
import classNames from 'classnames';
module.exports = React.createClass({
displayName: 'RoomTooltip',
propTypes: {
// Alllow the tooltip to be styled by the parent element
// Class applied to the element used to position the tooltip
className: React.PropTypes.string.isRequired,
// Class applied to the tooltip itself
tooltipClassName: React.PropTypes.string,
// The tooltip is derived from either the room name or a label
room: React.PropTypes.object,
label: React.PropTypes.string,
@@ -69,8 +72,12 @@ module.exports = React.createClass({
style.left = 6 + parent.getBoundingClientRect().right + window.pageXOffset;
style.display = "block";
const tooltipClasses = classNames(
"mx_RoomTooltip", this.props.tooltipClassName,
);
var tooltip = (
<div className="mx_RoomTooltip" style={style} >
<div className={tooltipClasses} style={style} >
<div className="mx_RoomTooltip_chevron"></div>
{ label }
</div>

View File

@@ -14,16 +14,19 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
'use strict';
var React = require('react');
import { _t, _tJsx } from 'matrix-react-sdk/lib/languageHandler';
import React from 'react';
import Promise from 'bluebird';
var sdk = require('matrix-react-sdk');
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
var UserSettingsStore = require('matrix-react-sdk/lib/UserSettingsStore');
var Modal = require('matrix-react-sdk/lib/Modal');
var notifications = require('../../../notifications');
import sdk from 'matrix-react-sdk';
import { _t, _tJsx } from 'matrix-react-sdk/lib/languageHandler';
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
import UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
import Modal from 'matrix-react-sdk/lib/Modal';
import {
NotificationUtils,
VectorPushRulesDefinitions,
PushRuleVectorState,
ContentRules
} from '../../../notifications';
// TODO: this "view" component still has far too much application logic in it,
// which should be factored out to other files.
@@ -31,17 +34,13 @@ var notifications = require('../../../notifications');
// TODO: this component also does a lot of direct poking into this.state, which
// is VERY NAUGHTY.
var NotificationUtils = notifications.NotificationUtils;
var VectorPushRulesDefinitions = notifications.VectorPushRulesDefinitions;
var PushRuleVectorState = notifications.PushRuleVectorState;
var ContentRules = notifications.ContentRules;
/**
* Rules that Vector used to set in order to override the actions of default rules.
* These are used to port peoples existing overrides to match the current API.
* These can be removed and forgotten once everyone has moved to the new client.
*/
var LEGACY_RULES = {
const LEGACY_RULES = {
"im.vector.rule.contains_display_name": ".m.rule.contains_display_name",
"im.vector.rule.room_one_to_one": ".m.rule.room_one_to_one",
"im.vector.rule.room_message": ".m.rule.message",
@@ -51,7 +50,7 @@ var LEGACY_RULES = {
};
function portLegacyActions(actions) {
var decoded = NotificationUtils.decodeActions(actions);
const decoded = NotificationUtils.decodeActions(actions);
if (decoded !== null) {
return NotificationUtils.encodeActions(decoded);
} else {
@@ -62,7 +61,7 @@ function portLegacyActions(actions) {
}
module.exports = React.createClass({
displayName: 'Notififications',
displayName: 'Notifications',
phases: {
LOADING: "LOADING", // The component is loading or sending data to the hs
@@ -102,7 +101,7 @@ module.exports = React.createClass({
},
onEnableNotificationsChange: function(event) {
var self = this;
const self = this;
this.setState({
phase: this.phases.LOADING
});
@@ -116,21 +115,26 @@ module.exports = React.createClass({
UserSettingsStore.setEnableNotifications(event.target.checked);
},
onEnableDesktopNotificationBodyChange: function(event) {
UserSettingsStore.setEnableNotificationBody(event.target.checked);
this.forceUpdate();
},
onEnableEmailNotificationsChange: function(address, event) {
var emailPusherPromise;
let emailPusherPromise;
if (event.target.checked) {
var data = {}
const data = {}
data['brand'] = this.props.brand || 'Riot';
emailPusherPromise = UserSettingsStore.addEmailPusher(address, data);
} else {
var emailPusher = UserSettingsStore.getEmailPusher(this.state.pushers, address);
const emailPusher = UserSettingsStore.getEmailPusher(this.state.pushers, address);
emailPusher.kind = null;
emailPusherPromise = MatrixClientPeg.get().setPusher(emailPusher);
}
emailPusherPromise.done(() => {
this._refreshFromServer();
}, (error) => {
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createTrackedDialog('Error saving email notification preferences', '', ErrorDialog, {
title: _t('Error saving email notification preferences'),
description: _t('An error occurred whilst saving your email notification preferences.'),
@@ -140,14 +144,14 @@ module.exports = React.createClass({
onNotifStateButtonClicked: function(event) {
// FIXME: use .bind() rather than className metadata here surely
var vectorRuleId = event.target.className.split("-")[0];
var newPushRuleVectorState = event.target.className.split("-")[1];
const vectorRuleId = event.target.className.split("-")[0];
const newPushRuleVectorState = event.target.className.split("-")[1];
if ("_keywords" === vectorRuleId) {
this._setKeywordsPushRuleVectorState(newPushRuleVectorState)
}
else {
var rule = this.getRule(vectorRuleId);
const rule = this.getRule(vectorRuleId);
if (rule) {
this._setPushRuleVectorState(rule, newPushRuleVectorState);
}
@@ -155,12 +159,12 @@ module.exports = React.createClass({
},
onKeywordsClicked: function(event) {
var self = this;
const self = this;
// Compute the keywords list to display
var keywords = [];
for (var i in this.state.vectorContentRules.rules) {
var rule = this.state.vectorContentRules.rules[i];
let keywords = [];
for (let i in this.state.vectorContentRules.rules) {
const rule = this.state.vectorContentRules.rules[i];
keywords.push(rule.pattern);
}
if (keywords.length) {
@@ -174,7 +178,7 @@ module.exports = React.createClass({
keywords = "";
}
var TextInputDialog = sdk.getComponent("dialogs.TextInputDialog");
const TextInputDialog = sdk.getComponent("dialogs.TextInputDialog");
Modal.createTrackedDialog('Keywords Dialog', '', TextInputDialog, {
title: _t('Keywords'),
description: _t('Enter keywords separated by a comma:'),
@@ -183,8 +187,8 @@ module.exports = React.createClass({
onFinished: function onFinished(should_leave, newValue) {
if (should_leave && newValue !== keywords) {
var newKeywords = newValue.split(',');
for (var i in newKeywords) {
let newKeywords = newValue.split(',');
for (let i in newKeywords) {
newKeywords[i] = newKeywords[i].trim();
}
@@ -203,8 +207,8 @@ module.exports = React.createClass({
},
getRule: function(vectorRuleId) {
for (var i in this.state.vectorPushRules) {
var rule = this.state.vectorPushRules[i];
for (let i in this.state.vectorPushRules) {
const rule = this.state.vectorPushRules[i];
if (rule.vectorRuleId === vectorRuleId) {
return rule;
}
@@ -218,13 +222,13 @@ module.exports = React.createClass({
phase: this.phases.LOADING
});
var self = this;
var cli = MatrixClientPeg.get();
var deferreds = [];
var ruleDefinition = VectorPushRulesDefinitions[rule.vectorRuleId];
const self = this;
const cli = MatrixClientPeg.get();
const deferreds = [];
const ruleDefinition = VectorPushRulesDefinitions[rule.vectorRuleId];
if (rule.rule) {
var actions = ruleDefinition.vectorStateToActions[newPushRuleVectorState];
const actions = ruleDefinition.vectorStateToActions[newPushRuleVectorState];
if (!actions) {
// The new state corresponds to disabling the rule.
@@ -239,7 +243,7 @@ module.exports = React.createClass({
Promise.all(deferreds).done(function() {
self._refreshFromServer();
}, function(error) {
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
console.error("Failed to change settings: " + error);
Modal.createTrackedDialog('Failed to change settings', '', ErrorDialog, {
title: _t('Failed to change settings'),
@@ -257,19 +261,19 @@ module.exports = React.createClass({
return;
}
var self = this;
var cli = MatrixClientPeg.get();
const self = this;
const cli = MatrixClientPeg.get();
this.setState({
phase: this.phases.LOADING
});
// Update all rules in self.state.vectorContentRules
var deferreds = [];
for (var i in this.state.vectorContentRules.rules) {
var rule = this.state.vectorContentRules.rules[i];
const deferreds = [];
for (let i in this.state.vectorContentRules.rules) {
const rule = this.state.vectorContentRules.rules[i];
var enabled, actions;
let enabled, actions;
switch (newPushRuleVectorState) {
case PushRuleVectorState.ON:
if (rule.actions.length !== 1) {
@@ -309,7 +313,7 @@ module.exports = React.createClass({
Promise.all(deferreds).done(function(resps) {
self._refreshFromServer();
}, function(error) {
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
console.error("Can't update user notification settings: " + error);
Modal.createTrackedDialog('Can\'t update user notifcation settings', '', ErrorDialog, {
title: _t('Can\'t update user notification settings'),
@@ -324,14 +328,14 @@ module.exports = React.createClass({
phase: this.phases.LOADING
});
var self = this;
var cli = MatrixClientPeg.get();
var removeDeferreds = [];
const self = this;
const cli = MatrixClientPeg.get();
const removeDeferreds = [];
// Remove per-word push rules of keywords that are no more in the list
var vectorContentRulesPatterns = [];
for (var i in self.state.vectorContentRules.rules) {
var rule = self.state.vectorContentRules.rules[i];
const vectorContentRulesPatterns = [];
for (let i in self.state.vectorContentRules.rules) {
const rule = self.state.vectorContentRules.rules[i];
vectorContentRulesPatterns.push(rule.pattern);
@@ -342,16 +346,16 @@ module.exports = React.createClass({
// If the keyword is part of `externalContentRules`, remove the rule
// before recreating it in the right Vector path
for (var i in self.state.externalContentRules) {
var rule = self.state.externalContentRules[i];
for (let i in self.state.externalContentRules) {
const rule = self.state.externalContentRules[i];
if (newKeywords.indexOf(rule.pattern) >= 0) {
removeDeferreds.push(cli.deletePushRule('global', rule.kind, rule.rule_id));
}
}
var onError = function(error) {
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
const onError = function(error) {
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
console.error("Failed to update keywords: " + error);
Modal.createTrackedDialog('Failed to update keywords', '', ErrorDialog, {
title: _t('Failed to update keywords'),
@@ -362,9 +366,9 @@ module.exports = React.createClass({
// Then, add the new ones
Promise.all(removeDeferreds).done(function(resps) {
var deferreds = [];
const deferreds = [];
var pushRuleVectorStateKind = self.state.vectorContentRules.vectorState;
let pushRuleVectorStateKind = self.state.vectorContentRules.vectorState;
if (pushRuleVectorStateKind === PushRuleVectorState.OFF) {
// When the current global keywords rule is OFF, we need to look at
// the flavor of rules in 'vectorContentRules' to apply the same actions
@@ -379,8 +383,8 @@ module.exports = React.createClass({
}
}
for (var i in newKeywords) {
var keyword = newKeywords[i];
for (let i in newKeywords) {
const keyword = newKeywords[i];
if (vectorContentRulesPatterns.indexOf(keyword) < 0) {
if (self.state.vectorContentRules.vectorState !== PushRuleVectorState.OFF) {
@@ -407,31 +411,31 @@ module.exports = React.createClass({
// Create a push rule but disabled
_addDisabledPushRule: function(scope, kind, ruleId, body) {
var cli = MatrixClientPeg.get();
return cli.addPushRule(scope, kind, ruleId, body).then(function() {
return cli.setPushRuleEnabled(scope, kind, ruleId, false);
});
const cli = MatrixClientPeg.get();
return cli.addPushRule(scope, kind, ruleId, body).then(() =>
cli.setPushRuleEnabled(scope, kind, ruleId, false)
);
},
// Check if any legacy im.vector rules need to be ported to the new API
// for overriding the actions of default rules.
_portRulesToNewAPI: function(rulesets) {
var self = this;
var needsUpdate = [];
var cli = MatrixClientPeg.get();
const self = this;
const needsUpdate = [];
const cli = MatrixClientPeg.get();
for (var kind in rulesets.global) {
var ruleset = rulesets.global[kind];
for (var i = 0; i < ruleset.length; ++i) {
var rule = ruleset[i];
for (let kind in rulesets.global) {
const ruleset = rulesets.global[kind];
for (let i = 0; i < ruleset.length; ++i) {
const rule = ruleset[i];
if (rule.rule_id in LEGACY_RULES) {
console.log("Porting legacy rule", rule);
needsUpdate.push( function(kind, rule) {
return cli.setPushRuleActions(
'global', kind, LEGACY_RULES[rule.rule_id], portLegacyActions(rule.actions)
).then( function() {
return cli.deletePushRule('global', kind, rule.rule_id);
}).catch( (e) => {
).then(() =>
cli.deletePushRule('global', kind, rule.rule_id)
).catch( (e) => {
console.warn(`Error when porting legacy rule: ${e}`);
});
}(kind, rule));
@@ -442,9 +446,9 @@ module.exports = React.createClass({
if (needsUpdate.length > 0) {
// If some of the rules need to be ported then wait for the porting
// to happen and then fetch the rules again.
return Promise.all(needsUpdate).then( function() {
return cli.getPushRules();
});
return Promise.all(needsUpdate).then(() =>
cli.getPushRules()
);
} else {
// Otherwise return the rules that we already have.
return rulesets;
@@ -452,15 +456,14 @@ module.exports = React.createClass({
},
_refreshFromServer: function() {
var self = this;
var pushRulesPromise = MatrixClientPeg.get().getPushRules().then(self._portRulesToNewAPI).then(function(rulesets) {
//console.log("resolving pushRulesPromise");
const self = this;
const pushRulesPromise = MatrixClientPeg.get().getPushRules().then(self._portRulesToNewAPI).then(function(rulesets) {
/// XXX seriously? wtf is this?
MatrixClientPeg.get().pushRules = rulesets;
// Get homeserver default rules and triage them by categories
var rule_categories = {
const rule_categories = {
// The master rule (all notifications disabling)
'.m.rule.master': 'master',
@@ -478,12 +481,12 @@ module.exports = React.createClass({
};
// HS default rules
var defaultRules = {master: [], vector: {}, others: []};
const defaultRules = {master: [], vector: {}, others: []};
for (var kind in rulesets.global) {
for (var i = 0; i < Object.keys(rulesets.global[kind]).length; ++i) {
var r = rulesets.global[kind][i];
var cat = rule_categories[r.rule_id];
for (let kind in rulesets.global) {
for (let i = 0; i < Object.keys(rulesets.global[kind]).length; ++i) {
const r = rulesets.global[kind][i];
const cat = rule_categories[r.rule_id];
r.kind = kind;
if (r.rule_id[0] === '.') {
@@ -506,7 +509,7 @@ module.exports = React.createClass({
}
// parse the keyword rules into our state
var contentRules = ContentRules.parseContentRules(rulesets);
const contentRules = ContentRules.parseContentRules(rulesets);
self.state.vectorContentRules = {
vectorState: contentRules.vectorState,
rules: contentRules.rules,
@@ -517,7 +520,7 @@ module.exports = React.createClass({
self.state.vectorPushRules = [];
self.state.externalPushRules = [];
var vectorRuleIds = [
const vectorRuleIds = [
'.m.rule.contains_display_name',
'.m.rule.contains_user_name',
'_keywords',
@@ -528,8 +531,8 @@ module.exports = React.createClass({
'.m.rule.call',
'.m.rule.suppress_notices'
];
for (var i in vectorRuleIds) {
var vectorRuleId = vectorRuleIds[i];
for (let i in vectorRuleIds) {
const vectorRuleId = vectorRuleIds[i];
if (vectorRuleId === '_keywords') {
// keywords needs a special handling
@@ -541,9 +544,8 @@ module.exports = React.createClass({
<span>
{ _tJsx('Messages containing <span>keywords</span>',
/<span>(.*?)<\/span>/,
(sub) => {
return <span className="mx_UserNotifSettings_keywords" onClick={ self.onKeywordsClicked }>{sub}</span>;
}
(sub) =>
<span className="mx_UserNotifSettings_keywords" onClick={ self.onKeywordsClicked }>{sub}</span>
)}
</span>
),
@@ -551,10 +553,10 @@ module.exports = React.createClass({
});
}
else {
var ruleDefinition = VectorPushRulesDefinitions[vectorRuleId];
var rule = defaultRules.vector[vectorRuleId];
const ruleDefinition = VectorPushRulesDefinitions[vectorRuleId];
const rule = defaultRules.vector[vectorRuleId];
var vectorState = ruleDefinition.ruleToVectorState(rule);
const vectorState = ruleDefinition.ruleToVectorState(rule);
//console.log("Refreshing vectorPushRules for " + vectorRuleId +", "+ ruleDefinition.description +", " + rule +", " + vectorState);
@@ -574,14 +576,14 @@ module.exports = React.createClass({
}
// Build the rules not managed by Vector UI
var otherRulesDescriptions = {
const otherRulesDescriptions = {
'.m.rule.message': _t('Notify for all other messages/rooms'),
'.m.rule.fallback': _t('Notify me for anything else'),
};
for (var i in defaultRules.others) {
var rule = defaultRules.others[i];
var ruleDescription = otherRulesDescriptions[rule.rule_id];
for (let i in defaultRules.others) {
const rule = defaultRules.others[i];
const ruleDescription = otherRulesDescriptions[rule.rule_id];
// Show enabled default rules that was modified by the user
if (ruleDescription && rule.enabled && !rule.default) {
@@ -591,8 +593,7 @@ module.exports = React.createClass({
}
});
var pushersPromise = MatrixClientPeg.get().getPushers().then(function(resp) {
//console.log("resolving pushersPromise");
const pushersPromise = MatrixClientPeg.get().getPushers().then(function(resp) {
self.setState({pushers: resp.pushers});
});
@@ -618,7 +619,7 @@ module.exports = React.createClass({
},
_updatePushRuleActions: function(rule, actions, enabled) {
var cli = MatrixClientPeg.get();
const cli = MatrixClientPeg.get();
return cli.setPushRuleActions(
'global', rule.kind, rule.rule_id, actions
@@ -664,9 +665,9 @@ module.exports = React.createClass({
},
renderNotifRulesTableRows: function() {
var rows = [];
for (var i in this.state.vectorPushRules) {
var rule = this.state.vectorPushRules[i];
const rows = [];
for (let i in this.state.vectorPushRules) {
const rule = this.state.vectorPushRules[i];
//console.log("rendering: " + rule.description + ", " + rule.vectorRuleId + ", " + rule.vectorState);
rows.push(this.renderNotifRulesTableRow(rule.description, rule.vectorRuleId, rule.vectorState));
}
@@ -692,30 +693,32 @@ module.exports = React.createClass({
},
render: function() {
var self = this;
var spinner;
const self = this;
let spinner;
if (this.state.phase === this.phases.LOADING) {
var Loader = sdk.getComponent("elements.Spinner");
const Loader = sdk.getComponent("elements.Spinner");
spinner = <Loader />;
}
let masterPushRuleDiv;
if (this.state.masterPushRule) {
var masterPushRuleDiv = (
masterPushRuleDiv = (
<div className="mx_UserNotifSettings_tableRow">
<div className="mx_UserNotifSettings_inputCell">
<input id="enableNotifications"
ref="enableNotifications"
type="checkbox"
checked={ !this.state.masterPushRule.enabled }
onChange={ this.onEnableNotificationsChange } />
</div>
<div className="mx_UserNotifSettings_labelCell">
<label htmlFor="enableNotifications">
{ _t('Enable notifications for this account') }
</label>
</div>
<div className="mx_UserNotifSettings_inputCell">
<input id="enableNotifications"
ref="enableNotifications"
type="checkbox"
checked={ !this.state.masterPushRule.enabled }
onChange={ this.onEnableNotificationsChange }
/>
</div>
<div className="mx_UserNotifSettings_labelCell">
<label htmlFor="enableNotifications">
{ _t('Enable notifications for this account') }
</label>
</div>
</div>
);
}
@@ -743,29 +746,29 @@ module.exports = React.createClass({
// This only supports the first email address in your profile for now
emailNotificationsRow = this.emailNotificationsRow(
emailThreepids[0].address,
_t('Enable email notifications') + ' (' + emailThreepids[0].address + ')'
`${_t('Enable email notifications')} (${emailThreepids[0].address})`
);
}
// Build external push rules
var externalRules = [];
for (var i in this.state.externalPushRules) {
var rule = this.state.externalPushRules[i];
const externalRules = [];
for (let i in this.state.externalPushRules) {
const rule = this.state.externalPushRules[i];
externalRules.push(<li>{ _t(rule.description) }</li>);
}
// Show keywords not displayed by the vector UI as a single external push rule
var externalKeyWords = [];
for (var i in this.state.externalContentRules) {
var rule = this.state.externalContentRules[i];
externalKeyWords.push(rule.pattern);
let externalKeywords = [];
for (let i in this.state.externalContentRules) {
const rule = this.state.externalContentRules[i];
externalKeywords.push(rule.pattern);
}
if (externalKeyWords.length) {
externalKeyWords = externalKeyWords.join(", ");
externalRules.push(<li>{ _t('Notifications on the following keywords follow rules which cant be displayed here:') } { externalKeyWords }</li>);
if (externalKeywords.length) {
externalKeywords = externalKeywords.join(", ");
externalRules.push(<li>{ _t('Notifications on the following keywords follow rules which cant be displayed here:') } { externalKeywords }</li>);
}
var devicesSection;
let devicesSection;
if (this.state.pushers === undefined) {
devicesSection = <div className="error">{ _t('Unable to fetch notification target list') }</div>
} else if (this.state.pushers.length == 0) {
@@ -773,8 +776,8 @@ module.exports = React.createClass({
} else {
// TODO: It would be great to be able to delete pushers from here too,
// and this wouldn't be hard to add.
var rows = [];
for (var i = 0; i < this.state.pushers.length; ++i) {
const rows = [];
for (let i = 0; i < this.state.pushers.length; ++i) {
rows.push(<tr key={ i }>
<td>{this.state.pushers[i].app_display_name}</td>
<td>{this.state.pushers[i].device_display_name}</td>
@@ -793,7 +796,7 @@ module.exports = React.createClass({
</div>);
}
var advancedSettings;
let advancedSettings;
if (externalRules.length) {
advancedSettings = (
<div>
@@ -831,6 +834,21 @@ module.exports = React.createClass({
</div>
</div>
<div className="mx_UserNotifSettings_tableRow">
<div className="mx_UserNotifSettings_inputCell">
<input id="enableDesktopNotificationBody"
ref="enableDesktopNotificationBody"
type="checkbox"
checked={ UserSettingsStore.getEnableNotificationBody() }
onChange={ this.onEnableDesktopNotificationBodyChange } />
</div>
<div className="mx_UserNotifSettings_labelCell">
<label htmlFor="enableDesktopNotificationBody">
{ _t('Show message in desktop notification') }
</label>
</div>
</div>
<div className="mx_UserNotifSettings_tableRow">
<div className="mx_UserNotifSettings_inputCell">
<input id="enableDesktopAudioNotifications"

View File

@@ -59,7 +59,6 @@
"Permalink": "Пастаянная спасылка",
"powered by Matrix": "працуе на Matrix",
"Quote": "Цытата",
"Redact": "Адрэдагаваць",
"Reject": "Адхіліць",
"Remove %(name)s from the directory?": "Выдаліць %(name)s з каталога?",
"Remove": "Выдалiць",

View File

@@ -31,7 +31,7 @@
"Hide panel": "Skrýt panel",
"I understand the risks and wish to continue": "Rozumím rizikům a přeji si pokračovat",
"Keywords": "Klíčová slova",
"Leave": "Opustit",
"Leave": "Odejít",
"Loading bug report module": "Nahrává se modul nahlašování chyb",
"Low Priority": "Nízká priorita",
"Mentions only": "Pouze zmínky",
@@ -54,17 +54,17 @@
"Continue": "Pokračovat",
"Please set a password!": "Prosím nastavte si heslo!",
"You have successfully set a password!": "Úspěšně jste si nastavili heslo!",
"Failed to change password. Is your password correct?": "Nepodařilo se změnit heslo. Je vaše heslo správné?",
"Failed to change password. Is your password correct?": "Nepodařilo se změnit heslo. Zadáváte své heslo správně?",
"No update available.": "Není dostupná žádná aktualizace.",
"Downloading update...": "Stahování aktualizace...",
"Welcome to Riot.im": "Vítá vás Riot.im",
"Enable desktop notifications": "Zapnout upozornění na desktopu",
"Enable desktop notifications": "Zapnout upozornění na ploše",
"Enable email notifications": "Zapnout upozornění přes e-mail",
"Enable notifications for this account": "Zapnout upozornění na tomto účtu",
"#example": "#příklad",
"Off": "Vypnout",
"On": "Zapnout",
"Operation failed": "Chyba operace",
"Operation failed": "Operace se nezdařila",
"Remove %(name)s from the directory?": "Odebrat %(name)s z adresáře?",
"Remove": "Odebrat",
"remove %(name)s from the directory.": "odebrat %(name)s z adresáře.",
@@ -138,7 +138,7 @@
"Uploading report": "Nahrávám hlášení",
"View Decrypted Source": "Zobrazit dešifrovaný zdroj",
"When I'm invited to a room": "Pokud jsem pozván do místnosti",
"World readable": "Viditelné pro všechny",
"World readable": "Světu čitelné",
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Snad jste je nastavili v jiném klientu než Riot. V Riotu je nemůžete upravit, ale přesto platí",
"Error encountered (%(errorDetail)s).": "Nastala chyba (%(errorDetail)s).",
"You need to be using HTTPS to place a screen-sharing call.": "Pro uskutečnění hovoru se sdílením obrazovky musíte používat HTTPS.",
@@ -201,7 +201,21 @@
"Filter results": "Filtrovat výsledky",
"You must specify an event type!": "Musíte určit typ události!",
"Event sent!": "Událost odeslána!",
"Invite to this group": "Pozvat do této místnosti",
"Failed to send custom event.": "Nepodařilo se odeslat vlastní událost.",
"Send Custom Event": "Odeslat vlastní událost"
"Send Custom Event": "Odeslat vlastní událost",
"Show message in desktop notification": "Zobrazovat zprávu v upozornění na ploše",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Přes vlastní serverové volby se můžete přihlásit k dalším Matrix serverům tak, že zadáte jinou adresu domovského serveru.<br/>Díky tomu můžete v Riotu používat Matrix účet z jiného domovského serveru.<br/><br/>Můžete nastavit i vlastní server identity, ale pak už nebudete moci zvát ani být zván/a skrze e-mailovou adresu.",
"Edit": "Upravit",
"Pin Message": "Připíchnout zprávu",
"Register": "Zaregistrovat",
"Rooms": "Místnosti",
"Invite to this community": "Pozvat do této komunity",
"Add rooms to this community": "Přidat místnosti do této komunity",
"State Key": "Stavový klíč",
"Send Custom State Event": "Poslat vlastní stavovou událost",
"Explore Room State": "Prohlížet stav místnosti",
"Unpin Message": "Odepnout zprávu",
"Toolbox": "Sada nástrojů",
"Send Account Data": "Poslat data o účtu",
"Explore Account Data": "Prozkoumat data o účtu"
}

View File

@@ -2,16 +2,13 @@
"Add an email address above to configure email notifications": "Tilføj en emailadresse ovenfor for at konfigurere e-mail-underretninger",
"All notifications are currently disabled for all targets.": "Alle meddelelser er for øjeblikket deaktiveret for alle mål.",
"An error occurred whilst saving your email notification preferences.": "Der opstod en fejl under opbevaring af dine e-mail-underretningsindstillinger.",
"and remove": "Og fjern",
"Can't update user notification settings": "Kan ikke opdatere brugermeddelelsesindstillinger",
"Couldn't find a matching Matrix room": "Kunne ikke finde et matchende Matrix-rum",
"Custom Server Options": "Brugerdefinerede serverindstillinger",
"delete the alias.": "Slet aliaset.",
"Delete the room alias": "Slet room alias",
"Direct Chat": "Personligt Chat",
"Directory": "Rum fortegnelse",
"Dismiss": "Afskedige",
"Drop here to": "Drop her til",
"Enable audible notifications in web client": "Aktivér hørbare underretninger i webklienten",
"Enable desktop notifications": "Aktivér desktop meddelelser",
"Enable email notifications": "Aktivér e-mail-underretninger",
@@ -21,19 +18,16 @@
"Error": "Fejl",
"Error saving email notification preferences": "Fejl ved at gemme e-mail-underretningsindstillinger",
"#example": "#eksempel",
"Failed to add tag ": "Kunne ikke tilføje tag ",
"Failed to change settings": "Kunne ikke ændre indstillinger",
"Failed to update keywords": "Kunne ikke opdatere søgeord",
"Failed to get protocol list from Home Server": "Kunne ikke få protokolliste fra Home Server",
"Failed to get public room list": "Kunne ikke få offentlig rumliste",
"Failed to remove tag ": "Kunne ikke fjerne tag ",
"Failed to set Direct Message status of room": "Kunne ikke indstille direkte beskedstatus for rumet",
"Favourite": "Favorit",
"Fetching third party location failed": "Hentning af tredjeparts placering mislykkedes",
"Files": "Filer",
"Filter room names": "Filtrer rumnavne",
"Forget": "Glem",
"from the directory": "fra fortegnelsen",
"Guests can join": "Gæster kan deltage",
"Invite to this room": "Inviter til dette rum",
"Keywords": "Søgeord",
@@ -53,7 +47,6 @@
"powered by Matrix": "Drevet af Matrix",
"Reject": "Afvise",
"Remove": "Fjerne",
"remove": "fjerner",
"Remove from Directory": "Fjern fra fortegnelse",
"Riot does not know how to join a room on this network": "Riot ved ikke, hvordan man kan deltage i et rum på dette netværk",
"Room not found": "Rumet ikke fundet",

View File

@@ -10,41 +10,34 @@
"Failed to get protocol list from Home Server": "Fehler beim Abrufen der Protokoll-Liste vom Home-Server",
"The Home Server may be too old to support third party networks": "Der Home-Server ist eventuell zu alt, um Drittanbieter-Netzwerke zu unterstützen",
"Directory": "Raum-Verzeichnis",
"#example:": "#beispiel:",
"Search for a room": "Nach einem Raum suchen",
"No rooms to show": "Keine Räume gefunden",
"World readable": "Alle können mitlesen",
"No rooms to show": "Keine anzeigbaren Räume",
"World readable": "Lesbar für alle",
"Guests can join": "Gäste können beitreten",
"You are not receiving desktop notifications": "Du erhältst keine Desktop-Benachrichtigungen",
"Enable them now": "Aktiviere diese jetzt",
"Add an email address above to configure email notifications": "Füge oben eine E-Mail-Adresse hinzu, um die E-Mail-Benachrichtigungseinstellungen zu konfigurieren",
"All notifications are currently disabled for all targets.": "Im Moment sind alle Benachrichtigungen für alle Ziele deaktiviert.",
"All notifications are currently disabled for all targets.": "Aktuell sind alle Benachrichtigungen für alle Ziele deaktiviert.",
"An error occurred whilst saving your email notification preferences.": "Beim Speichern deiner E-Mail-Benachrichtigungseinstellungen ist ein Fehler aufgetreten.",
"and remove": "und entfernen",
"Can't update user notification settings": "Benachrichtigungs-Einstellungen des Benutzers konnten nicht aktualisiert werden",
"Couldn't find a matching Matrix room": "Konnte keinen entsprechenden Matrix-Raum finden",
"delete the alias.": "Lösche den Alias.",
"Delete the room alias": "Lösche den Raum Alias",
"Direct Chat": "Direkt-Chat",
"Drop here to": "Hier ablegen",
"Enable audible notifications in web client": "Audio-Benachrichtigungen im Web-Client aktivieren",
"Enable desktop notifications": "Desktop-Benachrichtigungen aktivieren",
"Enable email notifications": "E-Mail-Benachrichtigungen aktivieren",
"Enable notifications for this account": "Benachrichtigungen für dieses Konto aktivieren",
"Enable notifications for this account": "Benachrichtigungen für dieses Benutzerkonto aktivieren",
"Enter keywords separated by a comma:": "Schlüsselwörter kommagetrennt eingeben:",
"Error": "Fehler",
"Error saving email notification preferences": "Fehler beim Speichern der E-Mail-Benachrichtigungseinstellungen",
"#example": "#Beispiel",
"Failed to add tag ": "Konnte Tag nicht hinzufügen ",
"Failed to change settings": "Einstellungen konnten nicht geändert werden",
"Failed to update keywords": "Schlüsselwörter konnten nicht aktualisiert werden",
"Failed to get public room list": "Die Liste der öffentlichen Räume konnte nicht geladen werden",
"Failed to remove tag ": "Konnte Tag nicht entfernen ",
"Failed to set Direct Message status of room": "Konnte den direkten Benachrichtigungsstatus nicht setzen",
"Favourite": "Favorit",
"Fetching third party location failed": "Das Abrufen des Drittanbieterstandorts ist fehlgeschlagen",
"Forget": "Entfernen",
"from the directory": "aus dem Verzeichnis",
"Keywords": "Schlüsselwörter",
"Leave": "Verlassen",
"Low Priority": "Niedrige Priorität",
@@ -55,7 +48,6 @@
"Operation failed": "Aktion fehlgeschlagen",
"Reject": "Ablehnen",
"Remove": "Entfernen",
"remove": "Entferner",
"Remove from Directory": "Aus dem Raum-Verzeichnis entfernen",
"Riot does not know how to join a room on this network": "Riot weiß nicht, wie es einem Raum auf diesem Netzwerk beitreten soll",
"Room not found": "Raum nicht gefunden",
@@ -83,14 +75,13 @@
"Mute": "Stummschalten",
"Permalink": "Permanenter Link",
"Quote": "Zitieren",
"Redact": "Löschen",
"Remove %(name)s from the directory?": "Soll der Raum %(name)s aus dem Verzeichnis entfernt werden?",
"remove %(name)s from the directory.": "entferne %(name)s aus dem Verzeichnis.",
"Resend": "Erneut senden",
"Source URL": "Quell-URL",
"Unable to look up room ID from server": "Es ist nicht möglich, die Raum-ID auf dem Server nachzuschlagen",
"Unhide Preview": "Vorschau wieder anzeigen",
"Uploaded on %(date)s by %(user)s": "Hochgeladen am %(date)s von %(user)s",
"Uploaded on %(date)s by %(user)s": "Hochgeladen: %(date)s von %(user)s",
"View Decrypted Source": "Entschlüsselten Quellcode ansehen",
"View Source": "Quellcode ansehen",
"You cannot delete this image. (%(code)s)": "Das Bild kann nicht gelöscht werden. (%(code)s)",
@@ -134,16 +125,16 @@
"Failed to send report: ": "Senden des Reports fehlgeschlagen: ",
"Forward Message": "Nachricht weiterleiten",
"Hide panel": "Panel verbergen",
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Um Probleme zu diagnostizieren werden mit diesem Fehlerbericht Protokolle von diesem Client gesendet. Wenn du nur obigen text senden willst, deselektiere folgendes:",
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Zur Diagnose von Softwareproblemen werden mit diesem Fehlerbericht auch Log-Dateien übermittelt. Wenn nur der oben eingegebene Text übermittelt werden soll, bitte die nachfolgende Auswahl entsprechend abwählen:",
"Loading bug report module": "Lade Fehlerbericht-Modul",
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Bitte den Fehler (vorzugsweise auf Englisch) beschreiben. Was hast du gemacht? Was sollte passieren? Was ist tatsächlich passiert?",
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Bitte den Softwarefehler (vorzugsweise auf Englisch) beschreiben. Was hast du gemacht? Was sollte passieren? Was ist tatsächlich passiert?",
"Please describe the bug and/or send logs.": "Bitte den Fehler beschreiben und/oder Log-Dateien übermitteln.",
"Report a bug": "Einen Fehler melden",
"Report a bug": "Einen Softwarefehler melden",
"Riot Desktop on %(platformName)s": "Riot Desktop auf %(platformName)s",
"Riot is not supported on mobile web. Install the app?": "Riot wird im mobilen Web nicht unterstützt. App installieren?",
"Search": "Suchen",
"Search…": "Suchen…",
"Send": "Sende",
"Send": "Senden",
"Send logs": "Logdateien übermitteln",
"This Room": "In diesem Raum",
"Unavailable": "Nicht verfügbar",
@@ -161,14 +152,13 @@
"Search the room directory": "Raum-Verzeichnis durchsuchen",
"Chat with Riot Bot": "Mit dem Riot-Bot chatten",
"Get started with some tips from Riot Bot!": "Lass Dir vom Riot-Bot eine Einführung geben!",
"General discussion about Matrix": "Allgemeine Diskussion über Matrix",
"Discussion of all things Matrix!": "\"Diskussion über alle Dinge\"-Matrix!",
"Riot/Web &amp; Desktop chat": "Riot/Web &amp; Desktop-Chat",
"Riot/iOS &amp; matrix-ios-sdk chat": "Riot-iOS &amp; \"matrix-ios-sdk\"-Chat",
"Riot/Android &amp; matrix-android-sdk chat": "Riot-Android &amp; matrix-android-sdk-Chat",
"Matrix technical discussions": "Technische Diskussion über Matrix",
"Running Matrix services": "Matrix-Dienste betreiben",
"Community-run support for Synapse": "Synapse-Support von der Community",
"Community-run support for Synapse": "Support für Synapse von der Community",
"Admin support for Dendrite": "Admin-Unterstützung für Dendrite",
"Announcements about Synapse releases": "Ankündigungen über Synapse-Versionen",
"Support for those using and running matrix-appservice-irc": "Unterstützung für die, die \"matrix-appservice-irc\" betreiben und nutzen",
@@ -185,9 +175,9 @@
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Im Matrix-Netzwerk existieren bereits jetzt zahlreiche Räume, die entweder mit bekannten Netzwerken wie Slack, IRC, Gitter, usw. verknüpft sind oder auch komplett eigenständig betrieben werden. Einen genauen Überblick erhältst du im Raum-Verzeichnis!",
"Failed to change password. Is your password correct?": "Passwortänderung fehlgeschlagen. Ist dein Passwort richtig?",
"You have successfully set a password!": "Du hast erfolgreich ein Passwort gesetzt!",
"You can now return to your account after signing out, and sign in on other devices.": "Du kannst nun zu deinem Konto zurückkehren nach dem du dich an anderen Geräten ab- und angemeldet hast.",
"You can now return to your account after signing out, and sign in on other devices.": "Du kannst nun zu deinem Benutzerkonto zurückkehren, nachdem du dich abgemeldet hast. Anschließend kannst du dich an anderen Geräten anmelden.",
"Continue": "Fortfahren",
"Please set a password!": "Bitte ein Passwort einrichten!",
"Please set a password!": "Bitte setze ein Passwort!",
"This will allow you to return to your account after signing out, and sign in on other devices.": "Dies erlaubt dir, dich wieder an deinem Konto anzumelden, nachdem du dich abgemeldet hast.",
"Dev chat for the Dendrite dev team": "Entwickler-Chat für das Dendrite-Entwickler-Team",
"General discussion about Matrix and Riot": "Allgemeine Diskussion über Matrix und Riot",
@@ -209,13 +199,23 @@
"Failed to send custom event.": "Senden des benutzerdefinierten Events fehlgeschlagen.",
"Send Custom Event": "Benutzerdefiniertes Event senden",
"Send Custom State Event": "Benutzerdefiniertes Status-Event senden",
"Explore Room State": "Erkunde Raum-Status",
"Explore Room State": "Raum-Status erkunden",
"Event sent!": "Event gesendet!",
"Event Type": "Event-Typ",
"Event Content": "Event-Inhalt",
"State Key": "Status-Schlüssel",
"Invite to this group": "In diese Gruppe einladen",
"Filter results": "Ergebnisse filtern",
"You must specify an event type!": "Du musst einen Event-Typ spezifizieren!",
"Add room to this group": "Raum zu dieser Gruppe hinzufügen"
"Show message in desktop notification": "Nachricht in der Desktop-Benachrichtigung anzeigen",
"Pin Message": "Nachricht anheften",
"Unpin Message": "Nachricht nicht mehr anheften",
"Add rooms to this community": "Räume zu dieser Community hinzufügen",
"Edit": "Editieren",
"Register": "Registrieren",
"Rooms": "Räume",
"Invite to this community": "In diese Community einladen",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Die benutzerdefinierten Server-Einstellungen kannst du verwenden, um dich auf anderen Matrix-Servern anzumelden, indem du eine abweichende Heimserver-URL eingibst.<br/>Somit ist es möglich, Riot mit einem bereits bestehendem Matrix-Benutzerkonto auf einem anderen Heimserver zu verwenden.<br/><br/>Außerdem kannst du einen benutzerdefinierten Identitätsserver eingeben. Allerdings kannst du in diesem Fall Benutzer nicht mehr per E-Mail-Adresse einladen und auch selbst nicht mehr per E-Mail-Adresse eingeladen werden.",
"Toolbox": "Werkzeugkasten",
"Explore Account Data": "Daten des Benutzerkontos erkunden",
"Send Account Data": "Sende Benutzerkonto-Daten"
}

View File

@@ -62,7 +62,6 @@
"Notify me for anything else": "Ειδοποίηση για οτιδήποτε άλλο",
"Operation failed": "Η λειτουργία απέτυχε",
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Παρακαλούμε περιγράψτε το σφάλμα. Τι κάνατε; Τι περιμένατε να συμβεί; Τι έγινε τελικά;",
"Redact": "Ανάκληση",
"Reject": "Απόρριψη",
"Remove": "Αφαίρεση",
"Remove from Directory": "Αφαίρεση από το ευρετήριο",

View File

@@ -1,211 +1,219 @@
{
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s",
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.",
"A new version of Riot is available.": "A new version of Riot is available.",
"Add an email address above to configure email notifications": "Add an email address above to configure email notifications",
"Advanced notification settings": "Advanced notification settings",
"All messages": "All messages",
"All messages (loud)": "All messages (loud)",
"All Rooms": "All Rooms",
"All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.",
"An error occurred whilst saving your email notification preferences.": "An error occurred whilst saving your email notification preferences.",
"Back": "Back",
"Bug report sent": "Bug report sent",
"Call invitation": "Call invitation",
"Cancel": "Cancel",
"Cancel Sending": "Cancel Sending",
"Can't update user notification settings": "Can't update user notification settings",
"Changelog": "Changelog",
"Close": "Close",
"Collapse panel": "Collapse panel",
"Collecting app version information": "Collecting app version information",
"Collecting logs": "Collecting logs",
"Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room",
"Custom Server Options": "Custom Server Options",
"customServer_text": "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.",
"delete the alias.": "delete the alias.",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?",
"Describe your problem here.": "Describe your problem here.",
"Developer Tools": "Developer Tools",
"Direct Chat": "Direct Chat",
"Directory": "Directory",
"Dismiss": "Dismiss",
"Download this file": "Download this file",
"Enable audible notifications in web client": "Enable audible notifications in web client",
"Enable desktop notifications": "Enable desktop notifications",
"Enable email notifications": "Enable email notifications",
"Enable notifications for this account": "Enable notifications for this account",
"Enable them now": "Enable them now",
"Enter keywords separated by a comma:": "Enter keywords separated by a comma:",
"Error": "Error",
"Error saving email notification preferences": "Error saving email notification preferences",
"#example": "#example",
"Expand panel": "Expand panel",
"Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room",
"Failed to change settings": "Failed to change settings",
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
"Failed to update keywords": "Failed to update keywords",
"Failed to get protocol list from Home Server": "Failed to get protocol list from Home Server",
"Failed to get public room list": "Failed to get public room list",
"Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room",
"Failed to send custom event.": "Failed to send custom event.",
"Failed to send report: ": "Failed to send report: ",
"Failed to set direct chat tag": "Failed to set direct chat tag",
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
"Favourite": "Favourite",
"Fetching third party location failed": "Fetching third party location failed",
"Files": "Files",
"Filter results": "Filter results",
"Filter room names": "Filter room names",
"Forget": "Forget",
"Forward Message": "Forward Message",
"Guests can join": "Guests can join",
"Hide panel": "Hide panel",
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
"I understand the risks and wish to continue": "I understand the risks and wish to continue",
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:",
"Invite to this room": "Invite to this room",
"Keywords": "Keywords",
"Leave": "Leave",
"Login": "Login",
"Loading bug report module": "Loading bug report module",
"Low Priority": "Low Priority",
"Members": "Members",
"Mentions only": "Mentions only",
"Messages containing my display name": "Messages containing my display name",
"Messages containing <span>keywords</span>": "Messages containing <span>keywords</span>",
"Messages containing my user name": "Messages containing my user name",
"Messages in group chats": "Messages in group chats",
"Messages in one-to-one chats": "Messages in one-to-one chats",
"Messages sent by bot": "Messages sent by bot",
"more": "more",
"Mute": "Mute",
"No rooms to show": "No rooms to show",
"Noisy": "Noisy",
"Notification targets": "Notification targets",
"Notifications": "Notifications",
"Notifications on the following keywords follow rules which cant be displayed here:": "Notifications on the following keywords follow rules which cant be displayed here:",
"Notify for all other messages/rooms": "Notify for all other messages/rooms",
"Notify me for anything else": "Notify me for anything else",
"Off": "Off",
"On": "On",
"Operation failed": "Operation failed",
"Permalink": "Permalink",
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Please describe the bug. What did you do? What did you expect to happen? What actually happened?",
"Please describe the bug and/or send logs.": "Please describe the bug and/or send logs.",
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.",
"powered by Matrix": "powered by Matrix",
"Quote": "Quote",
"Reject": "Reject",
"Remove %(name)s from the directory?": "Remove %(name)s from the directory?",
"Remove": "Remove",
"remove %(name)s from the directory.": "remove %(name)s from the directory.",
"Remove from Directory": "Remove from Directory",
"Report a bug": "Report a bug",
"Resend": "Resend",
"Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s",
"Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network",
"Riot is not supported on mobile web. Install the app?": "Riot is not supported on mobile web. Install the app?",
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.",
"Room not found": "Room not found",
"Search": "Search",
"Search…": "Search…",
"Search for a room": "Search for a room",
"Send": "Send",
"Send logs": "Send logs",
"Send Custom Event": "Send Custom Event",
"Send Custom State Event": "Send Custom State Event",
"Explore Room State": "Explore Room State",
"Source URL": "Source URL",
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, your browser is <b>not</b> able to run Riot.",
"The Home Server may be too old to support third party networks": "The Home Server may be too old to support third party networks",
"There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here",
"The server may be unavailable or overloaded": "The server may be unavailable or overloaded",
"This Room": "This Room",
"Unable to fetch notification target list": "Unable to fetch notification target list",
"Unable to join network": "Unable to join network",
"Unable to look up room ID from server": "Unable to look up room ID from server",
"Unavailable": "Unavailable",
"Unhide Preview": "Unhide Preview",
"Unknown device": "Unknown device",
"unknown error code": "unknown error code",
"Unnamed room": "Unnamed room",
"Update": "Update",
"Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s",
"Uploading report": "Uploading report",
"View Decrypted Source": "View Decrypted Source",
"View Source": "View Source",
"What's New": "What's New",
"What's new?": "What's new?",
"Waiting for response from server": "Waiting for response from server",
"When I'm invited to a room": "When I'm invited to a room",
"World readable": "World readable",
"You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)",
"You cannot delete this message. (%(code)s)": "You cannot delete this message. (%(code)s)",
"You are not receiving desktop notifications": "You are not receiving desktop notifications",
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply",
"You must specify an event type!": "You must specify an event type!",
"Thank you!": "Thank you!",
"Sunday": "Sunday",
"Monday": "Monday",
"Tuesday": "Tuesday",
"Wednesday": "Wednesday",
"Thursday": "Thursday",
"Friday": "Friday",
"Saturday": "Saturday",
"Today": "Today",
"Yesterday": "Yesterday",
"OK": "OK",
"Warning": "Warning",
"Checking for an update...": "Checking for an update...",
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
"Event sent!": "Event sent!",
"Event Type": "Event Type",
"Event Content": "Event Content",
"State Key": "State Key",
"No update available.": "No update available.",
"Downloading update...": "Downloading update...",
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!",
"Welcome to Riot.im": "Welcome to Riot.im",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Decentralised, encrypted chat &amp; collaboration powered by [matrix]",
"Search the room directory": "Search the room directory",
"Chat with Riot Bot": "Chat with Riot Bot",
"Get started with some tips from Riot Bot!": "Get started with some tips from Riot Bot!",
"General discussion about Matrix and Riot": "General discussion about Matrix and Riot",
"Discussion of all things Matrix!": "Discussion of all things Matrix!",
"Riot/Web &amp; Desktop chat": "Riot/Web &amp; Desktop chat",
"Riot/iOS &amp; matrix-ios-sdk chat": "Riot/iOS &amp; matrix-ios-sdk chat",
"Riot/Android &amp; matrix-android-sdk chat": "Riot/Android &amp; matrix-android-sdk chat",
"Matrix technical discussions": "Matrix technical discussions",
"Running Matrix services": "Running Matrix services",
"Community-run support for Synapse": "Community-run support for Synapse",
"Admin support for Dendrite": "Admin support for Dendrite",
"Announcements about Synapse releases": "Announcements about Synapse releases",
"Support for those using and running matrix-appservice-irc": "Support for those using and running matrix-appservice-irc",
"Building services on Matrix": "Building services on Matrix",
"Support for those using the Matrix spec": "Support for those using the Matrix spec",
"Design and implementation of E2E in Matrix": "Design and implementation of E2E in Matrix",
"Implementing VR services with Matrix": "Implementing VR services with Matrix",
"Implementing VoIP services with Matrix": "Implementing VoIP services with Matrix",
"Discussion of the Identity Service API": "Discussion of the Identity Service API",
"Support for those using, running and writing other bridges": "Support for those using, running and writing other bridges",
"Contributing code to Matrix and Riot": "Contributing code to Matrix and Riot",
"Dev chat for the Riot/Web dev team": "Dev chat for the Riot/Web dev team",
"Dev chat for the Dendrite dev team": "Dev chat for the Dendrite dev team",
"Co-ordination for Riot/Web translators": "Co-ordination for Riot/Web translators",
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!",
"Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?",
"You have successfully set a password!": "You have successfully set a password!",
"You can now return to your account after signing out, and sign in on other devices.": "You can now return to your account after signing out, and sign in on other devices.",
"Continue": "Continue",
"Please set a password!": "Please set a password!",
"This will allow you to return to your account after signing out, and sign in on other devices.": "This will allow you to return to your account after signing out, and sign in on other devices.",
"You have successfully set a password and an email address!": "You have successfully set a password and an email address!",
"Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.",
"To return to your account in future you need to <u>set a password</u>": "To return to your account in future you need to <u>set a password</u>",
"Set Password": "Set Password",
"Couldn't load home page": "Couldn't load home page",
"Invite to this group": "Invite to this group",
"Add room to this group": "Add room to this group"
"Riot is not supported on mobile web. Install the app?": "Riot is not supported on mobile web. Install the app?",
"Collecting app version information": "Collecting app version information",
"Collecting logs": "Collecting logs",
"Uploading report": "Uploading report",
"Waiting for response from server": "Waiting for response from server",
"Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s",
"Unknown device": "Unknown device",
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s",
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
"Messages containing my display name": "Messages containing my display name",
"Messages containing my user name": "Messages containing my user name",
"Messages in one-to-one chats": "Messages in one-to-one chats",
"Messages in group chats": "Messages in group chats",
"When I'm invited to a room": "When I'm invited to a room",
"Call invitation": "Call invitation",
"Messages sent by bot": "Messages sent by bot",
"Error saving email notification preferences": "Error saving email notification preferences",
"An error occurred whilst saving your email notification preferences.": "An error occurred whilst saving your email notification preferences.",
"Keywords": "Keywords",
"Enter keywords separated by a comma:": "Enter keywords separated by a comma:",
"OK": "OK",
"Failed to change settings": "Failed to change settings",
"Operation failed": "Operation failed",
"Can't update user notification settings": "Can't update user notification settings",
"Failed to update keywords": "Failed to update keywords",
"Messages containing <span>keywords</span>": "Messages containing <span>keywords</span>",
"Notify for all other messages/rooms": "Notify for all other messages/rooms",
"Notify me for anything else": "Notify me for anything else",
"Enable notifications for this account": "Enable notifications for this account",
"All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.",
"Add an email address above to configure email notifications": "Add an email address above to configure email notifications",
"Enable email notifications": "Enable email notifications",
"Notifications on the following keywords follow rules which cant be displayed here:": "Notifications on the following keywords follow rules which cant be displayed here:",
"Unable to fetch notification target list": "Unable to fetch notification target list",
"Notification targets": "Notification targets",
"Advanced notification settings": "Advanced notification settings",
"There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here",
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply",
"Enable desktop notifications": "Enable desktop notifications",
"Show message in desktop notification": "Show message in desktop notification",
"Enable audible notifications in web client": "Enable audible notifications in web client",
"Off": "Off",
"On": "On",
"Noisy": "Noisy",
"Failed to set direct chat tag": "Failed to set direct chat tag",
"Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room",
"Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room",
"Search…": "Search…",
"Search": "Search",
"This Room": "This Room",
"All Rooms": "All Rooms",
"Sunday": "Sunday",
"Monday": "Monday",
"Tuesday": "Tuesday",
"Wednesday": "Wednesday",
"Thursday": "Thursday",
"Friday": "Friday",
"Saturday": "Saturday",
"Today": "Today",
"Yesterday": "Yesterday",
"Custom Server Options": "Custom Server Options",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.",
"Dismiss": "Dismiss",
"powered by Matrix": "powered by Matrix",
"You are not receiving desktop notifications": "You are not receiving desktop notifications",
"Enable them now": "Enable them now",
"What's New": "What's New",
"Update": "Update",
"What's new?": "What's new?",
"A new version of Riot is available.": "A new version of Riot is available.",
"To return to your account in future you need to <u>set a password</u>": "To return to your account in future you need to <u>set a password</u>",
"Toolbox": "Toolbox",
"Set Password": "Set Password",
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
"Checking for an update...": "Checking for an update...",
"No update available.": "No update available.",
"Downloading update...": "Downloading update...",
"Warning": "Warning",
"Error": "Error",
"You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)",
"Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s",
"Remove": "Remove",
"Close": "Close",
"Download this file": "Download this file",
"Please describe the bug and/or send logs.": "Please describe the bug and/or send logs.",
"Loading bug report module": "Loading bug report module",
"Bug report sent": "Bug report sent",
"Thank you!": "Thank you!",
"Failed to send report: ": "Failed to send report: ",
"Cancel": "Cancel",
"Report a bug": "Report a bug",
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Please describe the bug. What did you do? What did you expect to happen? What actually happened?",
"Describe your problem here.": "Describe your problem here.",
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:",
"Send logs": "Send logs",
"Send": "Send",
"Unavailable": "Unavailable",
"Changelog": "Changelog",
"Back": "Back",
"You must specify an event type!": "You must specify an event type!",
"Event sent!": "Event sent!",
"Failed to send custom event.": "Failed to send custom event.",
"Event Type": "Event Type",
"Event Content": "Event Content",
"State Key": "State Key",
"Edit": "Edit",
"Filter results": "Filter results",
"Send Custom Event": "Send Custom Event",
"Send Account Data": "Send Account Data",
"Explore Account Data": "Explore Account Data",
"Explore Room State": "Explore Room State",
"Developer Tools": "Developer Tools",
"You have successfully set a password!": "You have successfully set a password!",
"You have successfully set a password and an email address!": "You have successfully set a password and an email address!",
"You can now return to your account after signing out, and sign in on other devices.": "You can now return to your account after signing out, and sign in on other devices.",
"Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.",
"Continue": "Continue",
"Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?",
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
"Please set a password!": "Please set a password!",
"This will allow you to return to your account after signing out, and sign in on other devices.": "This will allow you to return to your account after signing out, and sign in on other devices.",
"You cannot delete this message. (%(code)s)": "You cannot delete this message. (%(code)s)",
"Resend": "Resend",
"Cancel Sending": "Cancel Sending",
"Forward Message": "Forward Message",
"Unpin Message": "Unpin Message",
"Pin Message": "Pin Message",
"View Source": "View Source",
"View Decrypted Source": "View Decrypted Source",
"Unhide Preview": "Unhide Preview",
"Permalink": "Permalink",
"Quote": "Quote",
"Source URL": "Source URL",
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
"unknown error code": "unknown error code",
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
"All messages (loud)": "All messages (loud)",
"All messages": "All messages",
"Mentions only": "Mentions only",
"Mute": "Mute",
"Leave": "Leave",
"Forget": "Forget",
"Reject": "Reject",
"Favourite": "Favourite",
"Low Priority": "Low Priority",
"Direct Chat": "Direct Chat",
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, your browser is <b>not</b> able to run Riot.",
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.",
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.",
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!",
"I understand the risks and wish to continue": "I understand the risks and wish to continue",
"Couldn't load home page": "Couldn't load home page",
"Login": "Login",
"Register": "Register",
"Invite to this room": "Invite to this room",
"Members": "Members",
"Files": "Files",
"Notifications": "Notifications",
"Rooms": "Rooms",
"Hide panel": "Hide panel",
"Invite to this community": "Invite to this community",
"Add rooms to this community": "Add rooms to this community",
"Failed to get protocol list from Home Server": "Failed to get protocol list from Home Server",
"The Home Server may be too old to support third party networks": "The Home Server may be too old to support third party networks",
"Failed to get public room list": "Failed to get public room list",
"The server may be unavailable or overloaded": "The server may be unavailable or overloaded",
"Unnamed room": "Unnamed room",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?",
"Remove %(name)s from the directory?": "Remove %(name)s from the directory?",
"Remove from Directory": "Remove from Directory",
"remove %(name)s from the directory.": "remove %(name)s from the directory.",
"delete the alias.": "delete the alias.",
"Unable to join network": "Unable to join network",
"Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network",
"Room not found": "Room not found",
"Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room",
"Fetching third party location failed": "Fetching third party location failed",
"Unable to look up room ID from server": "Unable to look up room ID from server",
"World readable": "World readable",
"Guests can join": "Guests can join",
"Directory": "Directory",
"No rooms to show": "No rooms to show",
"Search for a room": "Search for a room",
"#example": "#example",
"more": "more",
"Expand panel": "Expand panel",
"Collapse panel": "Collapse panel",
"Filter room names": "Filter room names",
"Welcome to Riot.im": "Welcome to Riot.im",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Decentralised, encrypted chat &amp; collaboration powered by [matrix]",
"Search the room directory": "Search the room directory",
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!",
"Chat with Riot Bot": "Chat with Riot Bot",
"Get started with some tips from Riot Bot!": "Get started with some tips from Riot Bot!",
"General discussion about Matrix and Riot": "General discussion about Matrix and Riot",
"Discussion of all things Matrix!": "Discussion of all things Matrix!",
"Riot/Web &amp; Desktop chat": "Riot/Web &amp; Desktop chat",
"Riot/iOS &amp; matrix-ios-sdk chat": "Riot/iOS &amp; matrix-ios-sdk chat",
"Riot/Android &amp; matrix-android-sdk chat": "Riot/Android &amp; matrix-android-sdk chat",
"Matrix technical discussions": "Matrix technical discussions",
"Running Matrix services": "Running Matrix services",
"Community-run support for Synapse": "Community-run support for Synapse",
"Admin support for Dendrite": "Admin support for Dendrite",
"Announcements about Synapse releases": "Announcements about Synapse releases",
"Support for those using and running matrix-appservice-irc": "Support for those using and running matrix-appservice-irc",
"Building services on Matrix": "Building services on Matrix",
"Support for those using the Matrix spec": "Support for those using the Matrix spec",
"Design and implementation of E2E in Matrix": "Design and implementation of E2E in Matrix",
"Implementing VR services with Matrix": "Implementing VR services with Matrix",
"Implementing VoIP services with Matrix": "Implementing VoIP services with Matrix",
"Discussion of the Identity Service API": "Discussion of the Identity Service API",
"Support for those using, running and writing other bridges": "Support for those using, running and writing other bridges",
"Contributing code to Matrix and Riot": "Contributing code to Matrix and Riot",
"Dev chat for the Riot/Web dev team": "Dev chat for the Riot/Web dev team",
"Dev chat for the Dendrite dev team": "Dev chat for the Dendrite dev team",
"Co-ordination for Riot/Web translators": "Co-ordination for Riot/Web translators"
}

View File

@@ -185,6 +185,8 @@
"You have successfully set a password and an email address!": "You have successfully set a password and an email address!",
"Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.",
"Warning": "Warning",
"Pin Message": "Pin Message",
"Unpin Message": "Unpin Message",
"Checking for an update...": "Checking for an update...",
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
"No update available.": "No update available.",

View File

@@ -94,7 +94,6 @@
"Operation failed": "La operacio malsukcesis",
"Permalink": "Konstanta ligilo",
"Please describe the bug and/or send logs.": "Bonvolu priskribi la cimon kaj/aŭ sendi protokolojn.",
"Redact": "Redakti",
"Remove %(name)s from the directory?": "Forigi %(name)s el la dosierujo?",
"Remove": "Forigi",
"remove %(name)s from the directory.": "forigi %(name)s el la dosierujo.",

View File

@@ -63,7 +63,6 @@
"Operation failed": "Falló la operación",
"Permalink": "Enlace permanente",
"Quote": "Citar",
"Redact": "Redactar",
"Reject": "Rechazar",
"Remove %(name)s from the directory?": "¿Retirar %(name)s del directorio?",
"Remove": "Eliminar",

View File

@@ -205,6 +205,5 @@
"Event sent!": "Tapahtuma lähetetty!",
"Event Type": "Tapahtuman tyyppi",
"Event Content": "Tapahtuman sisältö",
"State Key": "Tila-avain",
"Invite to this group": "Kutsu tähän ryhmään"
"State Key": "Tila-avain"
}

View File

@@ -36,7 +36,6 @@
"Operation failed": "L'opération a échoué",
"powered by Matrix": "propulsé par Matrix",
"Quote": "Citer",
"Redact": "Rédiger",
"Reject": "Rejeter",
"Remove %(name)s from the directory?": "Supprimer %(name)s du répertoire ?",
"Remove": "Supprimer",
@@ -78,7 +77,6 @@
"Noisy": "Bruyant",
"Notification targets": "Appareils recevant les notifications",
"Notifications": "Notifications",
"Notifications on the following keywords follow rules which cant be displayed here": "Les mots-clés suivants suivent des règles de notification qui ne peuvent être affichées ici",
"Notify for all other messages/rooms": "Me notifier pour tous les autres messages/salons",
"Notify me for anything else": "Me notifier pour tout le reste",
"Off": "Désactivé",
@@ -97,13 +95,13 @@
"Unable to join network": "Impossible de rejoindre le réseau",
"Unable to look up room ID from server": "Impossible de récupérer l'ID du salon sur le serveur",
"Unhide Preview": "Dévoiler l'aperçu",
"Unnamed room": "Salon anonyme",
"Unnamed room": "Salon sans nom",
"Uploaded on %(date)s by %(user)s": "Téléchargé le %(date)s par %(user)s",
"View Decrypted Source": "Voir la source déchiffrée",
"When I'm invited to a room": "Quand je suis invité dans un salon",
"World readable": "Visible par tout le monde",
"World readable": "Lisible publiquement",
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Vous les avez probablement configurées dans un autre client que Riot. Vous ne pouvez pas les configurer dans Riot mais elles s'appliquent quand même",
"Guests can join": "Ouvert aux visiteurs",
"Guests can join": "Les invités peuvent rejoindre le salon",
"Advanced notification settings": "Paramètres de notification avancés",
"customServer_text": "Vous pouvez utiliser les options de serveur personnalisées pour vous connecter à d'autres serveurs Matrix, en spécifiant une adresse de serveur d'accueil différente.<br/>Cela permet d'utiliser Riot avec un compte Matrix existant sur un serveur d'accueil différent.<br/><br/>Vous pouvez aussi indiquer un serveur d'identité personnalisé mais vous ne pourrez pas inviter d'utilisateurs par e-mail ou être invité par e-mail.",
"Notifications on the following keywords follow rules which cant be displayed here:": "Les notifications pour les mots-clés suivant répondent à des critères qui ne peuvent pas être affichés ici :",
@@ -202,11 +200,22 @@
"You must specify an event type!": "Vous devez spécifier un type d'événement !",
"Event sent!": "Événement envoyé !",
"Event Type": "Type d'événement",
"Invite to this group": "Inviter à ce groupe",
"Event Content": "Contenu de l'événement",
"Failed to send custom event.": "Échec de l'envoi de l'événement personnalisé.",
"Send Custom Event": "Envoyer l'événement personnalisé",
"Send Custom State Event": "Envoyer l'événement d'état personnalisé",
"Explore Room State": "Parcourir l'état du salon",
"State Key": "Clé d'état"
"State Key": "Clé d'état",
"Unpin Message": "Dépingler le message",
"Add rooms to this community": "Ajouter des salons à cette communauté",
"Show message in desktop notification": "Afficher le message dans les notifications de bureau",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vous pouvez utiliser les options de serveur personnalisé pour vous connecter à d'autres serveurs Matrix en précisant un serveur d'accueil différent.<br/>Cela vous permet d'utiliser Riot avec un compte Matrix existant sur un autre serveur d'accueil.<br/><br/>Vous pouvez aussi renseigner un serveur d'identité personnalisé mais vous ne pourrez pas inviter d'utilisateurs avec leur adresse e-mail, ou être invité avec votre adresse e-mail.",
"Edit": "Modifier",
"Pin Message": "Épingler le message",
"Register": "S'inscrire",
"Rooms": "Salons",
"Invite to this community": "Inviter à cette communauté",
"Toolbox": "Boîte à outils",
"Send Account Data": "Envoyer les données du compte",
"Explore Account Data": "Explorer les données du compte"
}

View File

@@ -20,7 +20,6 @@
"Collapse panel": "Agochar panel",
"Collecting app version information": "Obtendo información sobre a versión da app",
"Collecting logs": "Obtendo rexistros",
"Create new room": "Crear unha nova sala",
"Couldn't find a matching Matrix room": "Non coincide con ningunha sala de Matrix",
"Custom Server Options": "Axustes do servidor personalizado",
"customServer_text": "Pode utilizar os axustes do servidor personalizado para conectarse a outros servidores Matrix indicando un URL de Inicio do servidor.<br/>Esto permítelle utilizar Riot con unha conta existente de Matrix nun servidor diferente.<br/><br/>Tamén pode establecer un servidor personalizado de identidade mais non poderá invitar a usuarias a través de enderezos de correo ou ser vostede invitada do mesmo xeito.",
@@ -32,7 +31,6 @@
"Directory": "Directorio",
"Dismiss": "Desbotar",
"Download this file": "Descargue este ficheiro",
"Drop here %(toAction)s": "Deixe aquí %(toAction)s",
"Enable audible notifications in web client": "Habilitar notificacións audibles no cliente web",
"Enable desktop notifications": "Habilitar notificacións de escritorio",
"Enable email notifications": "Habilitar notificacións de correo",
@@ -43,14 +41,12 @@
"Error saving email notification preferences": "Fallo ao cargar os axustes de notificacións",
"#example": "#exemplo",
"Expand panel": "Expandir panel",
"Failed to": "Fallou ao",
"Failed to add tag %(tagName)s to room": "Fallou ao engadir a etiqueta %(tagName)s a sala",
"Failed to change settings": "Fallo ao cambiar os axustes",
"Failed to forget room %(errCode)s": "Fallou ao esquecer a sala %(errCode)s",
"Failed to update keywords": "Fallo ao actualizar as palabras chave",
"Failed to get protocol list from Home Server": "Fallo ao obter a lista de protocolo desde o servidor",
"Failed to get public room list": "Fallo ao obter a lista de salas públicas",
"Failed to join the room": "Fallo ao unirse a sala",
"Failed to remove tag %(tagName)s from room": "Fallo ao eliminar etiqueta %(tagName)s da sala",
"Failed to send custom event.": "Fallo ao enviar evento personalizado.",
"Failed to send report: ": "Fallo no envío do informe: ",
@@ -63,9 +59,7 @@
"Filter room names": "Filtrar nomes de sala",
"Forget": "Esquecer",
"Forward Message": "Reenviar mensaxe",
" from room": " da sala",
"Guests can join": "Convidadas pódense unir",
"Guest users can't invite users. Please register to invite.": "Usuarias convidadas non poden convidar usuarias. Por favor rexístrese para convidar.",
"Hide panel": "Agochar panel",
"(HTTP status %(httpStatus)s)": "(Estado HTTP %(httpStatus)s)",
"I understand the risks and wish to continue": "Entendos os riscos e desexo continuar",
@@ -100,7 +94,6 @@
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor describa a incidencia. Que estaba a facer? Que tiña que pasar? Que aconteceu en realidade?",
"Please describe the bug and/or send logs.": "Por favor describa a incidencia e/ou envíe o informe.",
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Por favor instale <a href=\"https://www.google.com/chrome\">Chrome</a> ou <a href=\"https://getfirefox.com\">Firefox</a> para ter a mellor experiencia de uso.",
"Please Register": "Por favor rexístrese",
"powered by Matrix": "funcionando grazas a Matrix",
"Quote": "Cita",
"Reject": "Rexeitar",
@@ -114,7 +107,6 @@
"Riot does not know how to join a room on this network": "Riot non sabe cómo conectar con unha sala en esta rede",
"Riot is not supported on mobile web. Install the app?": "Riot no se pode executar na web móbil. Instalar a app?",
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utiliza características avanzadas do navegador, algunhas das cales non están dispoñibles ou son experimentales no seu navegador actual.",
"Room directory": "Directorio de salas",
"Room not found": "Non se atopou a sala",
"Search": "Buscar",
"Search…": "Buscar…",
@@ -124,16 +116,12 @@
"Send Custom Event": "Enviar evento personalizado",
"Send Custom State Event": "Enviar evento de estado personalizado",
"Explore Room State": "Explorar estado da sala",
"Settings": "Axustes",
"Source URL": "URL fonte",
"Sorry, your browser is <b>not</b> able to run Riot.": "Desculpe, o seu navegador <b>non pode</b> executar Riot.",
"Start chat": "Iniciar chat",
"The Home Server may be too old to support third party networks": "O servidor de inicio podería ser demasiando antigo como para aceptar redes de terceiros",
"There are advanced notifications which are not shown here": "Existen notificacións avanzadas que non se mostran aquí",
"The server may be unavailable or overloaded": "O servidor podería non estar dispoñible ou sobrecargado",
"This Room": "Esta sala",
"This room is inaccessible to guests. You may be able to join if you register.": "Esta sala non é accesible para convidados. Podería entrar si se rexistra.",
" to room": " a sala",
"Unable to fetch notification target list": "Non se puido procesar a lista de obxetivo de notificacións",
"Unable to join network": "Non se puido conectar a rede",
"Unable to look up room ID from server": "Non se puido atopar o ID da sala do servidor",
@@ -155,7 +143,6 @@
"You cannot delete this image. (%(code)s)": "Non pode eliminar esta imaxe. (%(code)s)",
"You cannot delete this message. (%(code)s)": "Non pode eliminar esta mensaxe. (%(code)s)",
"You are not receiving desktop notifications": "Non está a recibir notificacións de escritorio",
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "Está a usar Riot como convidado. <a>Rexístrese</a> ou <a>conéctese</a> para acceder a máis salas e caracteristicas!",
"You must specify an event type!": "Debe indicar un tipo de evento!",
"Thank you!": "Grazas!",
"Sunday": "Domingo",
@@ -178,7 +165,6 @@
"No update available.": "Sen actualizacións.",
"Downloading update...": "Descargando actualización...",
"You need to be using HTTPS to place a screen-sharing call.": "Precisa utilizar HTTPS para establecer unha chamada de pantalla compartida.",
"Welcome page": "Páxina de acollemento",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Co seu navegador actual a apareciencia e uso do aplicativo poderían estar totalmente falseadas, e algunhas características poderían non funcionar. Se quere pode continuar, pero debe ser consciente de que poden haber fallos!",
"Welcome to Riot.im": "Benvida a Riot.im",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Chat &amp; colaboración descentralizados e cifrados grazas a [matrix]",
@@ -218,8 +204,18 @@
"To return to your account in future you need to <u>set a password</u>": "Para voltar a súa conta no futuro debe <u>establecer un contrasinal>/u>",
"Set Password": "Establecer contrasinal",
"Couldn't load home page": "Non se cargou a páxina de inicio",
"Invite to this group": "Convidar a este grupo",
"Add room to this group": "Engadir sala a este grupo",
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Pode que os configurase nun cliente diferente de Riot. Non pode establecelos desde Riot pero aínda así aplicaranse",
"Riot/Android &amp; matrix-android-sdk chat": "Chat para Riot/Android &amp; matrix-android-sdk"
"Riot/Android &amp; matrix-android-sdk chat": "Chat para Riot/Android &amp; matrix-android-sdk",
"Show message in desktop notification": "Mostrar mensaxe nas notificacións de escritorio",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vostede pode utilizar as opcións de servidor personalizado para conectarse a outros servidores Matrix indicando o enderezo URL do Servidor.</br>Esto permítelle utilizar Riot con unha conta Matrix existente en outro servidor.<br/><br/>Tamén pode indicar un servidor de identidade pero non poderá convidar a usarias polo seu enderezo de correo electrónico, o ser convidada vostede por correo electrónico.",
"Toolbox": "Ferramentas",
"Edit": "Editar",
"Send Account Data": "Enviar datos da conta",
"Explore Account Data": "Explorar datos da conta",
"Unpin Message": "Non fixar mensaxe",
"Pin Message": "Fixar mensaxe",
"Register": "Rexistrar",
"Rooms": "Salas",
"Invite to this community": "Convidar a esta comunidade",
"Add rooms to this community": "Engadir salas a esta comunidade"
}

View File

@@ -179,7 +179,6 @@
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s באמצעות הדפדפן %(browserName)s על גבי %(osName)s",
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\"> ספארי</a> ו <a href=\"http://opera.com\"> אופרה</a> עובדים גם כן.",
"Notifications on the following keywords follow rules which cant be displayed here:": "התראה על מילות המפתח הבאות עוקבת אחר החוקים שאינם יכולים להיות מוצגים כאן:",
"Redact": "אדום",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "באמצעות הדפדפן הנוכחי שלך המראה של האפליקציה יכול להיות שגוי לחלוטין וחלק מהאפשרויות לא תתפקדנה. אם תרצה לנסות בכל זאת תוכל אבל אז הסיכון חל עליך!",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "צ'ט מוצפן &amp; ושת\"פ נעשה ע\"י ה [matrix]"
}

View File

@@ -40,7 +40,7 @@
"Files": "Fájlok",
"Filter room names": "Szoba nevek szűrése",
"Forget": "Elfelejt",
"Guests can join": "Vendégek csatlakozhatnak",
"Guests can join": "Vendégek is csatlakozhatnak",
"Invite to this room": "Meghívás a szobába",
"Keywords": "Kulcsszavak",
"Leave": "Elhagy",
@@ -54,7 +54,7 @@
"Messages sent by bot": "Botok által küldött üzenetek",
"more": "további",
"Mute": "Elnémít",
"No rooms to show": "Nincs megjeleníthető szoba",
"No rooms to show": "Nincsenek megjelenítendő szobák",
"Noisy": "Hangos",
"Notification targets": "Értesítések célpontja",
"Notifications": "Értesítések",
@@ -73,7 +73,6 @@
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "A legjobb élmény érdekében telepíts <a href=\"https://www.google.com/chrome\">Chrome</a>ot vagy <a href=\"https://getfirefox.com\">Firefox</a>ot.",
"powered by Matrix": "Matrixon alapul",
"Quote": "Idézet",
"Redact": "Szerkeszt",
"Reject": "Elutasít",
"Remove %(name)s from the directory?": "Törlöd a %(name)s szobát a listából?",
"Remove": "Törlés",
@@ -94,12 +93,12 @@
"Unable to look up room ID from server": "Nem lehet lekérdezni a szoba ID-ját a szervertől",
"Unhide Preview": "Előkép felfedése",
"unknown error code": "ismeretlen hiba kód",
"Unnamed room": "Név nélküli szoba",
"Unnamed room": "Névtelen szoba",
"Uploaded on %(date)s by %(user)s": "Feltöltés: %(date)s, %(user)s",
"View Decrypted Source": "Visszafejtett forrás megjelenítése",
"View Source": "Forrás megjelenítése",
"When I'm invited to a room": "Amikor meghívtak a szobába",
"World readable": "Mindenki olvashatja",
"World readable": "Nyilvános",
"You cannot delete this image. (%(code)s)": "Nem törölheted ezt a képet. (%(code)s)",
"You cannot delete this message. (%(code)s)": "Nem törölheted ezt az üzenetet. (%(code)s)",
"You are not receiving desktop notifications": "Nem fogadsz asztali értesítéseket",
@@ -205,8 +204,18 @@
"Event Type": "Esemény típusa",
"Event Content": "Esemény tartalma",
"State Key": "Állapot kulcs",
"Invite to this group": "Meghívás ebbe a csoportba",
"Filter results": "Találatok szűrése",
"You must specify an event type!": "Meg kell határoznod az esemény típusát!",
"Add room to this group": "Szoba hozzáadása ehhez a csoporthoz"
"Show message in desktop notification": "Üzenetek megmutatása az asztali értesítésekben",
"Pin Message": "Üzenet kitűzése",
"Unpin Message": "Üzenet levétele",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Bejelentkezhetsz más Matrix szerverbe ha használhatod a saját szerver opciót és megadod egy másik szerver URL-jét.<br/>Ezzel egy másik szerveren egy már meglévő fiókot tudsz használni.<br/><br/>Beállíthatsz egyedi azonosító szervert de akkor nem tudsz másokat e-mail cím alapján meghívni és téged sem tudnak.",
"Edit": "Szerkeszt",
"Register": "Regisztrál",
"Rooms": "Szobák",
"Invite to this community": "Meghívás ebbe a közösségbe",
"Add rooms to this community": "Szobák hozzáadása ehhez a közösséghez",
"Toolbox": "Szerszámok",
"Send Account Data": "Fiók adatok küldése",
"Explore Account Data": "Fiók adatok böngészése"
}

View File

@@ -206,6 +206,6 @@
"Event Type": "Tipo di Evento",
"Event Content": "Contenuto dell'Evento",
"State Key": "Chiave dello Stato",
"Invite to this group": "Invita in questo gruppo",
"Add room to this group": "Aggiungi stanza a questo gruppo"
"Show message in desktop notification": "Mostra i messaggi nelle notifiche desktop",
"Edit": "Modifica"
}

View File

@@ -51,7 +51,6 @@
"Please describe the bug and/or send logs.": "오류를 적어주시거나 로그를 보내주세요.",
"powered by Matrix": "매트릭스의 지원을 받고 있어요",
"Quote": "인용하기",
"Redact": "지우기",
"Reject": "거절하기",
"Remove %(name)s from the directory?": "목록에서 %(name)s을 지우시겠어요?",
"Remove": "지우기",

View File

@@ -69,7 +69,6 @@
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Vennligst installer <a href=\"https://www.google.com/chrome\">Chrome</a> eller <a href=\"https://getfirefox.com\">Firefox</a> for den beste opplevelsen.",
"powered by Matrix": "benytter seg av Matrix",
"Quote": "Sitat",
"Redact": "Maskere",
"Reject": "Avvis",
"Remove %(name)s from the directory?": "Fjern %(name)s fra katalogen?",
"Remove": "Fjern",

1
src/i18n/strings/ne.json Normal file
View File

@@ -0,0 +1 @@
{}

View File

@@ -105,7 +105,6 @@
"Today": "Vandaag",
"Yesterday": "Gisteren",
"Failed to set Direct Message status of room": "Het is mislukt om de directe-berichtenstatus van de kamer in te stellen",
"Redact": "Redigeren",
"A new version of Riot is available.": "Er is een nieuwe versie van Riot beschikbaar.",
"All Rooms": "Alle kamers",
"Cancel": "Annuleren",
@@ -199,7 +198,6 @@
"Failed to send custom event.": "Aangepast Event verzenden mislukt.",
"Send Custom Event": "Verzend aangepast evenement",
"Send Custom State Event": "Verzend aangepast State Event",
"Invite to this group": "Nodig uit voor deze groep",
"Developer Tools": "Ontwikkelaarsgereedschap",
"Filter results": "Resultaten filteren",
"Explore Room State": "Verken Ruimtetoestand",
@@ -207,6 +205,5 @@
"Event sent!": "Event verstuurd!",
"Event Type": "Event-type",
"Event Content": "Event-inhoud",
"State Key": "Toestandssleutel",
"Add room to this group": "Voeg een ruimte aan deze groep toe"
"State Key": "Toestandssleutel"
}

View File

@@ -97,7 +97,6 @@
"Send logs": "Wyślij logi",
"Sorry, your browser is <b>not</b> able to run Riot.": "Przepraszamy, Twoja przeglądarka <b>nie jest w stanie</b> uruchomić Riot.",
"powered by Matrix": "napędzany przez Matrix",
"Redact": "Zredaguj",
"Reject": "Odrzuć",
"Remove": "Usuń",
"remove %(name)s from the directory.": "usuń %(name)s z katalogu.",
@@ -207,5 +206,13 @@
"Event Type": "Typ wydarzenia",
"Event Content": "Zawartość wydarzenia",
"State Key": "Klucz stanu",
"Invite to this group": "Zaproś do tej grupy"
"Toolbox": "Przybornik",
"Edit": "Edycja",
"Show message in desktop notification": "Pokaż wiadomość w notyfikacji na pulpicie",
"Unpin Message": "Odepnij Wiadomość",
"Pin Message": "Przypnij Wiadomość",
"Register": "Rejestracja",
"Rooms": "Pokoje",
"Invite to this community": "Zaproś do tej społeczności",
"Add rooms to this community": "Dodaj pokoje do tej społeczności"
}

View File

@@ -23,14 +23,12 @@
"Enter keywords separated by a comma:": "Insira palavras-chave separadas por vírgula:",
"Error": "Erro",
"Error saving email notification preferences": "Erro ao guardar as preferências de notificação por e-mail",
"#example:": "#exemplo",
"Failed to add tag %(tagName)s to room": "Falha ao adicionar %(tagName)s à sala",
"Failed to change settings": "Falha ao alterar as configurações",
"Failed to forget room %(errCode)s": "Falha ao esquecer a sala %(errCode)s",
"Failed to update keywords": "Falha ao atualizar as palavras-chave",
"Failed to get protocol list from Home Server": "Falha ao obter a lista de protocolos do servidor padrão",
"Failed to get public room list": "Falha ao obter a lista de salas públicas",
"Failed to remove tag %(tag)s from room": "Falha ao remover a palavra-chave %(tag)s da sala",
"Failed to set direct chat tag": "Falha ao definir conversa como pessoal",
"Failed to set Direct Message status of room": "Falha em definir a mensagem de status da sala",
"Favourite": "Favorito",
@@ -66,7 +64,6 @@
"Permalink": "Link permanente",
"powered by Matrix": "rodando a partir do Matrix",
"Quote": "Citar",
"Redact": "Remover",
"Reject": "Rejeitar",
"Remove": "Remover",
"Remove %(name)s from the directory?": "Remover %(name)s da lista pública de salas?",
@@ -207,8 +204,6 @@
"To return to your account in future you need to <u>set a password</u>": "Para voltar à sua conta no futuro, necessita de <u>definir uma palavra-passe</u>",
"Set Password": "Definir palavra-passe",
"Couldn't load home page": "Não foi possível carregar a página inicial",
"Invite to this group": "Convidar para este grupo",
"Filter results": "Filtrar resultados",
"You must specify an event type!": "Tem que especificar um tipo de evento!",
"Add room to this group": "Adicionar sala a este grupo"
"You must specify an event type!": "Tem que especificar um tipo de evento!"
}

View File

@@ -23,14 +23,12 @@
"Enter keywords separated by a comma:": "Coloque cada palavras-chave separada por vírgula:",
"Error": "Erro",
"Error saving email notification preferences": "Erro ao salvar as preferências de notificação por email",
"#example:": "#exemplo",
"Failed to add tag %(tagName)s to room": "Falha ao adicionar %(tagName)s à sala",
"Failed to change settings": "Falhou ao mudar as preferências",
"Failed to forget room %(errCode)s": "Falhou ao esquecer a sala %(errCode)s",
"Failed to update keywords": "Falha ao alterar as palavras-chave",
"Failed to get protocol list from Home Server": "Falha em acessar a lista de protocolos do servidor padrão",
"Failed to get public room list": "Falha ao acessar a lista pública de salas",
"Failed to remove tag %(tag)s from room": "Falha ao remover a palavra-chave %(tag)s da sala",
"Failed to set direct chat tag": "Falha ao definir conversa como pessoal",
"Failed to set Direct Message status of room": "Falha em definir a mensagem de status da sala",
"Favourite": "Favorito",
@@ -66,7 +64,6 @@
"Permalink": "Link permanente",
"powered by Matrix": "rodando a partir do Matrix",
"Quote": "Citar",
"Redact": "Remover",
"Reject": "Rejeitar",
"Remove": "Remover",
"Remove %(name)s from the directory?": "Remover %(name)s da lista pública de salas?",
@@ -151,7 +148,6 @@
"You need to be using HTTPS to place a screen-sharing call.": "Você precisa estar usando HTTPS para poder iniciar uma chamada com compartilhamento de tela.",
"Login": "Fazer login",
"Welcome to Riot.im": "Seja bem-vinda(o) a Riot.im",
"Decentralised, encrypted chat &amp; collaboration powered by": "Colaboração descentralizada e criptografada impulsada por",
"Search the room directory": "Buscar na lista pública de salas",
"Chat with Riot Bot": "Conversar com o Bot do Riot",
"Get started with some tips from Riot Bot!": "Comece com algumas dicas do Bot do Riot!",
@@ -209,7 +205,5 @@
"Event sent!": "Evento enviado!",
"Event Type": "Tipo do Evento",
"Event Content": "Conteúdo do Evento",
"State Key": "Chave do Estado",
"Invite to this group": "Convide para este grupo",
"Add room to this group": "Adicione sala para este grupo"
"State Key": "Chave do Estado"
}

View File

@@ -2,17 +2,14 @@
"Add an email address above to configure email notifications": "Добавьте email адрес для оповещений",
"All notifications are currently disabled for all targets.": "Все оповещения для всех устройств отключены.",
"An error occurred whilst saving your email notification preferences.": "Возникла ошибка при сохранении настроек оповещения по email.",
"and remove": "и удалить",
"Can't update user notification settings": "Не удается обновить пользовательские настройки оповещения",
"Couldn't find a matching Matrix room": "Не удалось найти подходящую комнату Matrix",
"Custom Server Options": "Настраиваемые параметры сервера",
"delete the alias.": "удалить псевдоним.",
"Delete the room alias": "Удалить привязку комнаты",
"Direct Chat": "Прямой чат",
"Directory": "Каталог",
"Dismiss": "Отказ",
"Drop here to": "Перетащите сюда",
"Enable audible notifications in web client": "Включить звуковые уведомления в веб клиенте",
"Enable audible notifications in web client": "Включить звуковые уведомления в веб-клиенте",
"Enable desktop notifications": "Включить оповещения на рабочем столе",
"Enable email notifications": "Включить уведомления по email",
"Enable notifications for this account": "Включить уведомления для этой учетной записи",
@@ -21,19 +18,16 @@
"Error": "Ошибка",
"Error saving email notification preferences": "Ошибка при сохранении настроек уведомлений по email",
"#example": "#пример",
"Failed to add tag ": "Не удалось добавить тег ",
"Failed to change settings": "Не удалось изменить настройки",
"Failed to update keywords": "Не удалось обновить ключевые слова",
"Failed to get protocol list from Home Server": "Не удалось получить список протоколов с домашнего сервера",
"Failed to get public room list": "Не удалось получить список общедоступных комнат",
"Failed to remove tag ": "Не удалось удалить тег ",
"Failed to set Direct Message status of room": "Не удалось установить статус прямого сообщения в комнате",
"Favourite": "Избранное",
"Fetching third party location failed": "Не удалось извлечь местоположение третьей стороны",
"Files": "Файлы",
"Filter room names": "Фильтр по названию комнат",
"Forget": "Забыть",
"from the directory": "из каталога",
"Guests can join": "Гости могут присоединиться",
"Invite to this room": "Пригласить в комнату",
"Keywords": "Ключевые слова",
@@ -41,7 +35,7 @@
"Low Priority": "Низкий приоритет",
"Members": "Участники",
"No rooms to show": "Нет комнат для отображения",
"Noisy": "Громко",
"Noisy": "Со звуком",
"Notification targets": "Цели уведомления",
"Notifications": "Уведомления",
"Notifications on the following keywords follow rules which cant be displayed here:": "Уведомления по следующим ключевым словам соответствуют правилам, которые нельзя отобразить здесь:",
@@ -53,7 +47,6 @@
"powered by Matrix": "Основано на Matrix",
"Reject": "Отклонить",
"Remove": "Удалить",
"remove": "удалить",
"Remove from Directory": "Удалить из каталога",
"Riot does not know how to join a room on this network": "Riot не знает, как присоединиться к комнате, принадлежащей к этой сети",
"Room not found": "Комната не найдена",
@@ -70,7 +63,7 @@
"You are not receiving desktop notifications": "Вы не получаете уведомления на рабочем столе",
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Возможно вы настроили их не в Riot, а в другом Matrix-клиенте. Настроить их в Riot не удастся, но они будут в нем применяться",
"All messages": "Все сообщения",
"All messages (loud)": "Все сообщения (громко)",
"All messages (loud)": "Все сообщения (со звуком)",
"Cancel Sending": "Отменить отправку",
"Close": "Закрыть",
"Download this file": "Скачать этот файл",
@@ -98,7 +91,6 @@
"Mute": "Беззвучный",
"Permalink": "Постоянная ссылка",
"Quote": "Цитата",
"Redact": "Удалить",
"Remove %(name)s from the directory?": "Удалить %(name)s из каталога?",
"remove %(name)s from the directory.": "удалить %(name)s из каталога.",
"Resend": "Переотправить",
@@ -128,10 +120,10 @@
"Forward Message": "Переслать сообщение",
"Hide panel": "Скрыть панель",
"I understand the risks and wish to continue": "Я понимаю риски и желаю продолжить",
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Чтобы диагностировать проблемы, логи этого клиента будут отправлены вместе с этим сообщением об ошибке. Если вы предпочитаете отправить только текст выше, пожалуйста, отключите:",
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Чтобы диагностировать проблемы, журналы работы этого клиента будут отправлены вместе с сообщением об ошибке. Если вы предпочитаете отправить только текст выше, пожалуйста, снимите отметку:",
"Loading bug report module": "Загрузка модуля Отчет об ошибках",
"Messages containing <span>keywords</span>": "Сообщения, содержащие определенные <span>ключевые слова</span>",
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Опишите ошибку. Что вы сделали? Чего вы ожидали? Что на самом деле произошло?",
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Пожалуйста, опишите ошибку. Что сделали? Чего ожидали? Что на самом деле произошло?",
"Please describe the bug and/or send logs.": "Опишите ошибку и/или отправьте журналы.",
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Для получения наилучшего опыта при работе с Riot, пожалуйста, установите <a href=\"https://www.google.com/chrome\">Chrome</a> или <a href=\"https://getfirefox.com\">Firefox</a>.",
"Report a bug": "Сообщить об ошибке",
@@ -141,7 +133,7 @@
"Search": "Поиск",
"Search…": "Поиск.…",
"Send": "Отослать",
"Send logs": "Отправить журналы",
"Send logs": "Отправка журналов",
"Sorry, your browser is <b>not</b> able to run Riot.": "К сожалению, ваш браузер <b>не способен</b> запустить Riot.",
"This Room": "Эта комната",
"Unavailable": "Недоступен",
@@ -212,8 +204,18 @@
"Event Type": "Тип мероприятия",
"Event Content": "Содержание мероприятия",
"State Key": "Ключ состояния",
"Invite to this group": "Пригласить в эту группу",
"Filter results": "Фильтрация результатов",
"You must specify an event type!": "Необходимо указать тип мероприятия!",
"Add room to this group": "Добавить комнату в эту группу"
"Show message in desktop notification": "Показывать сообщение в уведомлении на рабочем столе",
"Pin Message": "Закрепить сообщение",
"Unpin Message": "Открепить сообщение",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Вы можете использовать пользовательские параметры сервера для входа на другие сервера Matrix, указав другой URL-адрес домашнего сервера.<br/>Это позволяет использовать Riot с существующей учетной записью Matrix на другом домашнем сервере.<br/><br/>Кроме того, можно установить пользовательский сервер идентификации, однако вы не сможете ни пригласить других пользователей, ни быть приглашенным, используя адрес электронной почты, .",
"Edit": "Редактировать",
"Register": "Регистрация",
"Rooms": "Комнаты",
"Invite to this community": "Пригласить в это сообщество",
"Add rooms to this community": "Добавить комнаты в это сообщество",
"Toolbox": "Панель инструментов",
"Send Account Data": "Отправить данные аккаунта",
"Explore Account Data": "Просмотр данных аккаунта"
}

219
src/i18n/strings/sk.json Normal file
View File

@@ -0,0 +1,219 @@
{
"Riot is not supported on mobile web. Install the app?": "Riot nie je podporovaný na mobilných zariadeniach. Želáte si nainštalovať aplikáciu?",
"Collecting app version information": "Získavajú sa informácie o verzii aplikácii",
"Collecting logs": "Získavajú sa záznamy",
"Uploading report": "Prebieha odovzdanie hlásenia",
"Waiting for response from server": "Čakanie na odpoveď zo servera",
"Riot Desktop on %(platformName)s": "Riot Desktop pre %(platformName)s",
"Unknown device": "Neznáme zariadenie",
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s cez %(browserName)s pre %(osName)s",
"You need to be using HTTPS to place a screen-sharing call.": "Ak si želáte spustiť zdieľanie obrazovky, musíte byť pripojení cez protokol HTTPS.",
"Messages containing my display name": "Správy obsahujúce moje zobrazované meno",
"Messages containing my user name": "Správy obsahujúce moje používateľské meno",
"Messages in one-to-one chats": "Správy v priamych konverzáciách",
"Messages in group chats": "Správy v skupinových konverzáciách",
"When I'm invited to a room": "Pozvania vstúpiť do miestnosti",
"Call invitation": "Audio / Video hovory",
"Messages sent by bot": "Správy odosielané robotmi",
"Error saving email notification preferences": "Chyba pri ukladaní nastavení oznamovania emailom",
"An error occurred whilst saving your email notification preferences.": "Počas ukladania vašich nastavení oznamovania emailom sa vyskytla chyba.",
"Keywords": "Kľúčové slová",
"Enter keywords separated by a comma:": "Zadajte kľúčové slová oddelené čiarkou:",
"OK": "OK",
"Failed to change settings": "Nepodarilo sa zmeniť nastavenia",
"Operation failed": "Operácia zlyhala",
"Can't update user notification settings": "Nie je možné aktualizovať používateľské nastavenia oznamovania",
"Failed to update keywords": "Nepodarilo sa aktualizovať kľúčové slová",
"Messages containing <span>keywords</span>": "Správy obsahujúce <span>kľúčové slová</span>",
"Notify for all other messages/rooms": "oznamovať všetky ostatné správy / miestnosti",
"Notify me for anything else": "Oznamovať mi všetko ostatné",
"Enable notifications for this account": "Povoliť oznámenia pre tento účet",
"All notifications are currently disabled for all targets.": "Momentálne sú zakázané všetky oznámenia pre všetky ciele.",
"Add an email address above to configure email notifications": "Ak si chcete nastaviť oznamovanie emailom, pridajte si emailovú adresu vyššie",
"Enable email notifications": "Povoliť oznamovanie emailom",
"Notifications on the following keywords follow rules which cant be displayed here:": "Oznámenia nasledujúcich kľúčových slov sa riadia pravidlami, ktoré nie je možné zobraziť na tomto mieste:",
"Unable to fetch notification target list": "Nie je možné získať zoznam cieľov oznámení",
"Notification targets": "Ciele oznámení",
"Advanced notification settings": "Pokročilé nastavenia oznámení",
"There are advanced notifications which are not shown here": "Niektoré pokročilé oznámenia nemôžu byť zobrazené",
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Tieto nastavenia oznámení sa použijú aj napriek tomu, že ich nemôžete meniť cez Riot. Pravdepodobne ste si ich nastavili v inej aplikácii",
"Enable desktop notifications": "Povoliť oznámenia na pracovnej ploche",
"Show message in desktop notification": "Zobraziť text správy v oznámení na pracovnej ploche",
"Enable audible notifications in web client": "Povoliť zvukové oznámenia vo webovom klientovi",
"Off": "Zakázané",
"On": "Povolené",
"Noisy": "Hlučné",
"Failed to set direct chat tag": "Nepodarilo sa nastaviť značku priama konverzácia",
"Failed to remove tag %(tagName)s from room": "Nepodarilo sa odstrániť značku %(tagName)s pre túto miestnosť",
"Failed to add tag %(tagName)s to room": "Nepodarilo sa pridať značku %(tagName)s pre túto miestnosť",
"Search…": "Hľadať…",
"Search": "Vyhľadávanie",
"This Room": "V tejto miestnosti",
"All Rooms": "Vo všetkych miestnostiach",
"Sunday": "Nedeľa",
"Monday": "Pondelok",
"Tuesday": "Utorok",
"Wednesday": "Streda",
"Thursday": "Štvrtok",
"Friday": "Piatok",
"Saturday": "Sobota",
"Today": "Dnes",
"Yesterday": "Včera",
"Custom Server Options": "Vlastné možnosti servera",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vlastné nastavenia servera môžete použiť na pripojenie k iným serverom Matrix a to zadaním URL adresy domovského servera.<br/>Umožní vám to použiť Riot s už existujúcim Matrix účtom na akomkoľvek domovskom servery.<br/><br>Môžete tiež nastaviť vlastný server totožností, no ak tak urobíte, nebudete môcť do konverzácií pozývať používateľov zadaním ich emailovej adresy, ani ostatní nebudú môcť pozvať vás zadaním vašej emailovej adresy.",
"Dismiss": "Zamietnuť",
"powered by Matrix": "poháňa Matrix",
"You are not receiving desktop notifications": "Nedostávate oznámenia na pracovnej ploche",
"Enable them now": "Povolte si ich teraz",
"What's New": "Čo Je Nové",
"Update": "Aktualizovať",
"What's new?": "Čo je nové?",
"A new version of Riot is available.": "Dostupná je nová verzia Riot.",
"To return to your account in future you need to <u>set a password</u>": "Aby ste sa v budúcnosti mohli vrátiť k vašemu účtu mali by ste si teraz <u>nastaviť heslo</u>",
"Toolbox": "Nástroje",
"Set Password": "Nastaviť Heslo",
"Error encountered (%(errorDetail)s).": "Vyskytla sa chyba (%(errorDetail)s).",
"Checking for an update...": "Kontrola dostupnosti aktualizácie...",
"No update available.": "K dispozícii nie je žiadna aktualizácia.",
"Downloading update...": "Sťahovanie aktualizácie...",
"Warning": "Upozornenie",
"Error": "Chyba",
"You cannot delete this image. (%(code)s)": "Nemôžete vymazať tento obrázok. (%(code)s)",
"Uploaded on %(date)s by %(user)s": "Nahral používateľ %(user)s dňa %(date)s",
"Remove": "Odstrániť",
"Close": "Zatvoriť",
"Download this file": "Stiahnuť tento súbor",
"Please describe the bug and/or send logs.": "Prosím, popíšte problém a / alebo pošlite záznamy.",
"Loading bug report module": "Načítanie modulu hlásenia chýb",
"Bug report sent": "Hlásenie chyby odoslané",
"Thank you!": "Ďakujeme!",
"Failed to send report: ": "Nepodarilo sa odoslať hlásenie: ",
"Cancel": "Zrušiť",
"Report a bug": "Ohlásiť chybu",
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Prosím, Napíšte text hlásenia. Čo ste práve robili? Čo ste očakávali? Čo sa v skutočnosti udialo?",
"Describe your problem here.": "Tu popíšte váš problém.",
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "S cieľom lepšej diagnostiky problému sa spolu s vašim hlásením odošlú záznami o činnosti programu Riot. Ak si želáte odoslať len text hlásenia, odškrtnite nasledujúce pole:",
"Send logs": "Zahrnúť záznamy",
"Send": "Poslať",
"Unavailable": "Nedostupné",
"Changelog": "Zoznam zmien",
"Back": "Naspäť",
"You must specify an event type!": "Musíte nastaviť typ udalosti!",
"Event sent!": "Udalosť odoslaná!",
"Failed to send custom event.": "Odoslanie vlastnej udalosti zlyhalo.",
"Event Type": "Typ Udalosti",
"Event Content": "Obsah Udalosti",
"State Key": "State Key",
"Edit": "Upraviť",
"Filter results": "Filtrovať výsledky",
"Send Custom Event": "Odoslať vlastnú udalosť",
"Send Account Data": "Odoslať Údaje Účtu",
"Explore Account Data": "Preskúmať Údaje účtu",
"Explore Room State": "Preskúmať Stav Miestnosti",
"Developer Tools": "Vývojárske Nástroje",
"You have successfully set a password!": "Ǔspešne ste si nastavili heslo!",
"You have successfully set a password and an email address!": "Úspešne si si nastavili heslo aj emailovú adresu!",
"You can now return to your account after signing out, and sign in on other devices.": "Odteraz sa budete k svojmu účtu vedieť vrátiť aj po odhlásení, alebo tiež prihlásiť na iných zariadeniach.",
"Remember, you can always set an email address in user settings if you change your mind.": "Všimnite si, Emailovú adresu môžete pridať aj neskôr v časti nastavenia, ak zmeníte svoj názor.",
"Continue": "Pokračovať",
"Failed to change password. Is your password correct?": "Nepodarilo sa zmeniť heslo. Zadali ste správne heslo?",
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
"Please set a password!": "Prosím, nastavte si heslo!",
"This will allow you to return to your account after signing out, and sign in on other devices.": "Toto vám v budúcnosti umožní vrátiť sa k vašemu účtu aj po odhlásení, alebo tiež prihlásiť sa na iných zariadeniach.",
"You cannot delete this message. (%(code)s)": "Nemôžete vymazať túto správu. (%(code)s)",
"Resend": "Poslať znovu",
"Cancel Sending": "Zrušiť odosielanie",
"Forward Message": "Preposlať správu",
"Unpin Message": "Zrušiť pripnutie správy",
"Pin Message": "Pripnúť správu",
"View Source": "Zobraziť zdroj",
"View Decrypted Source": "Zobraziť dešifrovaný zdroj",
"Unhide Preview": "Zobraziť náhľad",
"Permalink": "Trvalý odkaz",
"Quote": "Citovať",
"Source URL": "Pôvodná URL",
"Failed to set Direct Message status of room": "Nepodarilo sa nastaviť stav miestnosti priama konverzácia",
"unknown error code": "neznámy kód chyby",
"Failed to forget room %(errCode)s": "Nepodarilo sa zabudnuť miestnosť %(errCode)s",
"All messages (loud)": "Všetky správy (hlučné)",
"All messages": "Všetky správy",
"Mentions only": "Len zmienky",
"Mute": "Umlčať",
"Leave": "Opustiť",
"Forget": "Zabudnuť",
"Reject": "Odmietnuť",
"Favourite": "Obľúbená",
"Low Priority": "Nízka priorita",
"Direct Chat": "Priama konverzácia",
"Sorry, your browser is <b>not</b> able to run Riot.": "Prepáčte, vo vašom prehliadači <b>nie je</b> možné spustiť Riot.",
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot sa spolieha na mnohé pokročilé vlastnosti prehliadača internetu, a niektoré z nich sú vo vašom prehliadači experimentálne alebo nie sú k dispozícii vôbec.",
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Prosím, nainštalujte si <a href=\"https://www.google.com/chrome\">Chrome</a> alebo <a href=\"https://getfirefox.com\">Firefox</a> , aby bol váš zážitok pri používaní Riot čo možno najlepší.",
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> a <a href=\"http://opera.com\">Opera</a> tiež fungujú spoľahlivo.",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Vo vašom súčasnom prehliadači nemusí Riot vizerať ani fungovať správne a niektoré alebo všetky vlastnosti môžu chýbať. Ak to chcete vyskúšať, môžete pokračovať, no pri riešení problémov s tým spojených si budete musieť poradiť na vlastnú päsť!",
"I understand the risks and wish to continue": "Rozumiem rizikám a želám si pokračovať",
"Couldn't load home page": "Nie je možné načítať domovskú stránku",
"Login": "Prihlásiť",
"Register": "Registrovať",
"Invite to this room": "Pozvať do tejto miestnosti",
"Members": "Členovia",
"Files": "Súbory",
"Notifications": "Oznámenia",
"Rooms": "Miestnosti",
"Hide panel": "Skryť panel",
"Invite to this community": "Pozvať do tejto komunity",
"Add rooms to this community": "Pridať miestnosti do tejto komunity",
"Failed to get protocol list from Home Server": "Nepodarilo sa získať zoznam protokolov z domovského servera",
"The Home Server may be too old to support third party networks": "Domovský server môže byť natoľko zastaralý, že nepodporuje siete tretíh strán",
"Failed to get public room list": "Nepodarilo sa získať zoznam verejných miestností",
"The server may be unavailable or overloaded": "Server môže byť nedostupný alebo preťažený",
"Unnamed room": "Nepomenovaná miestnosť",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Vymazať alias %(alias)s a odstrániť miestnosť %(name)s z adresára?",
"Remove %(name)s from the directory?": "Odstrániť miestnosť %(name)s z adresára?",
"Remove from Directory": "Odstrániť z adresára",
"remove %(name)s from the directory.": "odstrániť %(name)s z adresára.",
"delete the alias.": "vymazať alias.",
"Unable to join network": "Nie je možné sa pripojiť k sieti",
"Riot does not know how to join a room on this network": "Riot nedokáže vstúpiť do miestnosti na tejto sieti",
"Room not found": "Miestnosť nenájdená",
"Couldn't find a matching Matrix room": "Nie je možné nájsť zodpovedajúcu Matrix miestnosť",
"Fetching third party location failed": "Nepodarilo sa získať umiestnenie tretej strany",
"Unable to look up room ID from server": "Nie je možné vyhľadať ID miestnosti na servery",
"World readable": "Viditeľná pre všetkých",
"Guests can join": "Pripojiť sa môžu aj hostia",
"Directory": "Adresár",
"No rooms to show": "Žiadne miestnosti na zobrazenie",
"Search for a room": "Vyhľadať miestnosť",
"#example": "#príklad",
"more": "viac",
"Expand panel": "Rozbaliť panel",
"Collapse panel": "Zbaliť panel",
"Filter room names": "Filtrovať názvy miestností",
"Welcome to Riot.im": "Víta vás Riot.im",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráca na platforme [matrix]",
"Search the room directory": "Prehľadať adresár miestností",
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Na Matrixe je k dispozícii množstvo nezávislých diskusných miestností a tiež miestnosti prepojené z iných sietí (Slack, IRC, Gitter atď). Pozrite si adresár!",
"Chat with Riot Bot": "Konverzácia s Riot Bot",
"Get started with some tips from Riot Bot!": "Začnite zopár tipmi v diskusii s Riot Bot!",
"General discussion about Matrix and Riot": "Všeobecná diskusia o Matrix a Riot",
"Discussion of all things Matrix!": "Diskusia o všetkom okolo Matrix!",
"Riot/Web &amp; Desktop chat": "Riot/Web &amp; Desktop chat",
"Riot/iOS &amp; matrix-ios-sdk chat": "Riot/iOS &amp; matrix-ios-sdk chat",
"Riot/Android &amp; matrix-android-sdk chat": "Riot/Android &amp; matrix-android-sdk chat",
"Matrix technical discussions": "Technické diskusie o Matrix",
"Running Matrix services": "Prevádzka služieb postavených na Matrix",
"Community-run support for Synapse": "Komunitná podpora pre Synapse",
"Admin support for Dendrite": "Administrátorská podpora pre Dendrite",
"Announcements about Synapse releases": "Oznamy o verziách Synapse",
"Support for those using and running matrix-appservice-irc": "Podpora pre používateľov a prevádzkovateľov matrix-appservice-irc",
"Building services on Matrix": "Stavba služieb na Matrix",
"Support for those using the Matrix spec": "Podpora pre konzumentov špecifikácie Matrix",
"Design and implementation of E2E in Matrix": "Návrh a implementácia E2E pre Matrix",
"Implementing VR services with Matrix": "Implementácia služieb VR s Matrix",
"Implementing VoIP services with Matrix": "Implementácia VoIP služieb s Matrix",
"Discussion of the Identity Service API": "Diskusia o API služby totožností",
"Support for those using, running and writing other bridges": "Podpora pre používateľov, prevádzkovateľov a tvorcov premostení do ďalších sietí",
"Contributing code to Matrix and Riot": "Prispievanie kódu projektom Matrix a Riot",
"Dev chat for the Riot/Web dev team": "Diskusia pre tím vývojárov Riot/Web",
"Dev chat for the Dendrite dev team": "Diskusia pre tím vývojárov Dendrite",
"Co-ordination for Riot/Web translators": "Koordinácia prekladov Riot/Web"
}

View File

@@ -82,7 +82,6 @@
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Installera <a href=\"https://www.google.com/chrome\">Chrome</a> eller <a href=\"https://getfirefox.com\">Firefox</a> för den bästa upplevelsen.",
"powered by Matrix": "drivs av Matrix",
"Quote": "Citera",
"Redact": "Dra tillbaka",
"Reject": "Avvisa",
"Remove %(name)s from the directory?": "Ta bort %(name)s från katalogen?",
"Remove": "Ta bort",
@@ -197,6 +196,5 @@
"Thank you!": "Tack!",
"Back": "Tillbaka",
"Filter results": "Filtrera resultaten",
"Explore Room State": "Utforska rumläget",
"Invite to this group": "Bjud in till denna grupp"
"Explore Room State": "Utforska rumläget"
}

View File

@@ -18,7 +18,7 @@
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)s -ல் %(browserName)s -ன் வழியாக %(appName)s",
"Call invitation": "அழைப்பிற்கான விண்ணப்பம்",
"Can't update user notification settings": "பயனர் அறிவிப்பு அமைப்புகளை மாற்ற முடியவில்லை",
"Couldn't find a matching Matrix room": "பொருத்தமான Matrix அறை புலப்படவில்லை",
"Couldn't find a matching Matrix room": "பொருத்தமான Matrix அறை கிடைக்கவில்லை",
"Custom Server Options": "விருப்பிற்கேற்ற வழங்கி இடப்புகள்",
"delete the alias.": "மாற்றை அழி.",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "அறை மாற்று %(alias)s -ஐ அழித்து, %(name)s -ஐ அடைவிலிருந்து நீக்க வேண்டுமா?",
@@ -43,7 +43,7 @@
"Favourite": "விருப்பமான",
"Files": "கோப்புகள்",
"Filter room names": "அறை பெயர்களை வடிகட்டு",
"Forget": "மறத்தல்",
"Forget": "மற",
"Guests can join": "விருந்தினர்கள் சேரலாம்",
"Hide panel": "பலகத்தை மறை",
"Invite to this room": "இந்த அறைக்கு அழை",
@@ -70,7 +70,7 @@
"Messages containing my display name": "என் காட்சி பெயர் கொண்ட செய்திகள்",
"more": "அதிகம்",
"Mute": "முடக்கு",
"No rooms to show": "காண்பதற்கான அறை இல்லை",
"No rooms to show": "காண்பிக்க எந்த அறையும் இல்லை",
"Messages containing <span>keywords</span>": "<span>முக்கிய</span> கொண்ட செய்திகள்",
"Messages containing my user name": "என் பயனர் பெயர் கொண்ட செய்திகள்",
"Messages in group chats": "குழு அரட்டைகளில் உள்ள செய்திகள்",
@@ -133,5 +133,40 @@
"You cannot delete this image. (%(code)s)": "இந்த படத்தை நீங்கள் அழிக்க முடியாது. (%(code)s)",
"You cannot delete this message. (%(code)s)": "இந்த செய்தியை நீங்கள் அழிக்க முடியாது. (%(code)s)",
"You are not receiving desktop notifications": "திரை அறிவிப்புகளை நீங்கள் பெறவில்லை",
"Bug report sent": "வழு அறிக்கை அனுப்பப்பட்டது"
"Bug report sent": "வழு அறிக்கை அனுப்பப்பட்டது",
"You need to be using HTTPS to place a screen-sharing call.": "நீங்கள் திரைபகிர்வு அழைப்பை மேற்க்கொள்ள HTTPS-ஐ பயன்படுத்த வேண்டும்.",
"OK": "சரி",
"Show message in desktop notification": "திரை அறிவிப்புகளில் செய்தியை காண்பிக்கவும்",
"Sunday": "ஞாயிறு",
"Monday": "திங்கள்",
"Tuesday": "செவ்வாய்",
"Wednesday": "புதன்",
"Thursday": "வியாழன்",
"Friday": "வெள்ளி",
"Saturday": "சனி",
"Today": "இன்று",
"Yesterday": "நேற்று",
"No update available.": "எந்த புதுப்பிப்பும் இல்லை.",
"Warning": "எச்சரிக்கை",
"Thank you!": "உங்களுக்கு நன்றி",
"Back": "பின்",
"Event sent!": "நிகழ்வு அனுப்பப்பட்டது",
"Event Type": "நிகழ்வு வகை",
"Event Content": "நிகழ்வு உள்ளடக்கம்",
"Edit": "தொகு",
"You have successfully set a password!": "நீங்கள் வெற்றிகரமாக கடவுச்சொல்லை அமைத்துவிட்டீர்கள்",
"You have successfully set a password and an email address!": "நீங்கள் வெற்றிகரமாக கடவுச்சொல் மற்றும் மின்னஞ்சல் முகவரியை அமைத்துவிட்டீர்கள்",
"Continue": "தொடரவும்",
"Please set a password!": "தயவு செய்து கடவுச்சொல்லை அமைக்கவும்",
"Couldn't load home page": "முதற்பக்கத்தை நிரலேற்ற முடியவில்லை",
"Register": "பதிவு செய்",
"Rooms": "அறைகள்",
"Add rooms to this community": "அறைகளை இந்த சமூகத்தில் சேர்க்கவும்",
"Welcome to Riot.im": "Riot.im -ற்க்கு வரவேற்க்கிறோம்",
"Search the room directory": "அறை அடைவில் தேடவும்",
"Chat with Riot Bot": "Riot இயங்கியிடம் உரையாடவும்",
"Matrix technical discussions": "Matrix தொழில்நுட்ப விவாதங்கள்",
"Running Matrix services": "இருப்பிலிருக்கும் Matrix சேவைகள்",
"Building services on Matrix": "Matrix- ல் சேவைகளைக் கட்டமைக்க",
"Contributing code to Matrix and Riot": "Matrix மற்றும் Riot -ற்க்கு நிரல் பங்களிக்க"
}

View File

@@ -33,7 +33,6 @@
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "กรุณาอธิบายจุดบกพร่อง คุณทำอะไร? ควรจะเกิดอะไรขึ้น? แล้วอะไรคือสิ่งที่เกิดขึ้นจริง?",
"Please describe the bug and/or send logs.": "กรุณาอธิบายจุดบกพร่อง และ/หรือ ส่งล็อก",
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "กรุณาติดตั้ง <a href=\"https://www.google.com/chrome\">Chrome</a> หรือ <a href=\"https://getfirefox.com\">Firefox</a> เพื่อประสบการณ์ที่ดีที่สุด",
"Redact": "ลบ",
"Reject": "ปฏิเสธ",
"Remove": "ลบ",
"Messages containing <span>keywords</span>": "ข้อความที่มี<span>คีย์เวิร์ด</span>",
@@ -152,7 +151,6 @@
"Search the room directory": "ค้นหาในไดเรกทอรีห้อง",
"Chat with Riot Bot": "แชทกับบอท Riot",
"Get started with some tips from Riot Bot!": "มาเริ่มกันด้วยเคล็ดลับเล็กน้อยจากบอท Riot!",
"General discussion about Matrix": "พูดคุยเรื่องทั่วไปเกี่ยวกับ Matrix",
"Discussion of all things Matrix!": "พูดคุยทุกเรื่อง เรื่อง Matrix!",
"Riot/Web &amp; Desktop chat": "แชทเกี่ยวกับ Riot บนเว็บและเดสก์ทอป",
"Riot/iOS &amp; matrix-ios-sdk chat": "แชทเกี่ยวกับ Riot บน iOS และ matrix-ios-sdk",

View File

@@ -91,7 +91,6 @@
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Lütfen <a href=\"https://www.google.com/chrome\"> Chrome </a> ya da <a href=\"https://getfirefox.com\"> Firefox </a> 'u en iyi deneyim için yükleyin.",
"powered by Matrix": "Matrix tarafından desteklenmektedir",
"Quote": "Alıntı",
"Redact": "Yazıya Dökme",
"Reject": "Reddet",
"Remove %(name)s from the directory?": "%(name)s'i dizinden kaldırılsın mı ?",
"Remove": "Kaldır",

View File

@@ -39,7 +39,7 @@
"Expand panel": "Розгорнути панель",
"Failed to add tag %(tagName)s to room": "Не вдалось додати до кімнати мітку %(tagName)s",
"Failed to change settings": "Не вдалось змінити налаштування",
"Failed to forget room %(errCode)s": "Не вдалось забути кімнату %(errCode)s",
"Failed to forget room %(errCode)s": "Не вдалось видалити кімнату %(errCode)s",
"Failed to update keywords": "Не вдалось оновити ключові слова",
"Failed to get protocol list from Home Server": "Не вдалось отримати перелік протоколів з Домашнього серверу",
"Failed to get public room list": "Не вдалось отримати перелік прилюдних кімнат",
@@ -84,7 +84,6 @@
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Для більшої зручності у використанні встановіть, будь ласка, <a href=\"https://www.google.com/chrome\">Chrome</a> або <a href=\"https://getfirefox.com\">Firefox</a>.",
"powered by Matrix": "працює на Matrix",
"Quote": "Цитувати",
"Redact": "Видалити",
"Reject": "Відмовитись",
"Remove %(name)s from the directory?": "Прибрати %(name)s з каталогу?",
"Remove": "Прибрати",
@@ -191,7 +190,7 @@
"Checking for an update...": "Перевірка оновлень…",
"Error encountered (%(errorDetail)s).": "Трапилась помилка (%(errorDetail)s).",
"No update available.": "Оновлення відсутні.",
"Downloading update...": "Звантажується оновлення…",
"Downloading update...": "Звантаженя оновлення…",
"Couldn't load home page": "Не вдалось завантажити домівку",
"Back": "Назад",
"Bug report sent": "Звіт про помилки відправлений",
@@ -207,6 +206,15 @@
"Event Type": "Тип західу",
"Event Content": "Зміст заходу",
"State Key": "Ключ стану",
"Invite to this group": "Запросити в цю групу",
"Add room to this group": "Додати кімнату в цю группу"
"Show message in desktop notification": "Показати повідомлення в сповіщення на робочому столі",
"Edit": "Редактувати",
"Unpin Message": "Відкріпити повідомлення",
"Pin Message": "Прикріпити повідомлення",
"Register": "Зарегіструватись",
"Rooms": "Кімнати",
"Invite to this community": "Запросити в це суспільство",
"Add rooms to this community": "Добавити кімнати в це суспільство",
"Toolbox": "Панель інструментів",
"Send Account Data": "Відправити данні аккаунта",
"Explore Account Data": "Продивитись данні аккаунта"
}

View File

@@ -203,6 +203,5 @@
"Event sent!": "事件已发出!",
"Event Type": "事件类型",
"Event Content": "事件内容",
"State Key": "状态密钥",
"Invite to this group": "邀请到这个群组"
"State Key": "状态密钥"
}

View File

@@ -121,7 +121,6 @@
"Notify me for anything else": "所有消息都通知我",
"Permalink": "永久連結",
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "諘安裝 <a href=\"https://www.google.com/chrome\">Chrome</a> 或 <a href=\"https://getfirefox.com\">Firefox</a> 來取得最佳體驗。",
"Redact": "纂輯\t",
"Reject": "拒絕",
"Remove %(name)s from the directory?": "自目錄中移除 %(name)s",
"remove %(name)s from the directory.": "自目錄中移除 %(name)s。",
@@ -205,8 +204,18 @@
"Event Type": "事件類型",
"Event Content": "事件內容",
"State Key": "狀態金鑰",
"Invite to this group": "邀請進入此群組",
"Filter results": "過濾結果",
"You must specify an event type!": "您必須指定事件類型!",
"Add room to this group": "新增聊天室到此群組"
"Show message in desktop notification": "在桌面通知中顯示訊息",
"Pin Message": "釘選訊息",
"Unpin Message": "取消釘選訊息",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "您可以使用自訂的伺服器選項,並指定不同的家伺服器 URL 來登入其他的 Matrix 伺服器。<br/>這讓您可以在不同的伺服器上以既有的 Matrix 帳號使用 Riot。<br/><br/>您也可以設定一個自訂的識別伺服器,但您可能無法透過電子郵件地址來邀請使用者,或是讓別人透過電子郵件邀請您。",
"Edit": "編輯",
"Register": "註冊",
"Rooms": "聊天室",
"Invite to this community": "邀請至此社群",
"Add rooms to this community": "新增聊天室到此社群",
"Toolbox": "工具箱",
"Send Account Data": "傳送帳號資料",
"Explore Account Data": "探索帳號資料"
}

View File

@@ -38,8 +38,8 @@ body {
-webkit-font-smoothing: subpixel-antialiased;
}
div.error {
color: red;
div.error, div.warning {
color: $warning-color;
}
h2 {
@@ -87,6 +87,11 @@ textarea {
transition: opacity 0.2s ease-in-out;
}
.mx_fadable.mx_fadable_faded {
opacity: 0.3;
pointer-events: none;
}
/* XXX: critical hack to GeminiScrollbar to allow them to work in FF 42 and Chrome 48.
Stop the scrollbar view from pushing out the container's overall sizing, which causes
flexbox to adapt to the new size and cause the view to keep growing.

View File

@@ -22,6 +22,7 @@
@import "./matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss";
@import "./matrix-react-sdk/views/dialogs/_CreateRoomDialog.scss";
@import "./matrix-react-sdk/views/dialogs/_EncryptedEventDialog.scss";
@import "./matrix-react-sdk/views/dialogs/_GroupAddressPicker.scss";
@import "./matrix-react-sdk/views/dialogs/_QuestionDialog.scss";
@import "./matrix-react-sdk/views/dialogs/_SetMxIdDialog.scss";
@import "./matrix-react-sdk/views/dialogs/_UnknownDeviceDialog.scss";
@@ -35,7 +36,7 @@
@import "./matrix-react-sdk/views/elements/_ProgressBar.scss";
@import "./matrix-react-sdk/views/elements/_RichText.scss";
@import "./matrix-react-sdk/views/elements/_RoleButton.scss";
@import "./matrix-react-sdk/views/groups/_GroupInviteTile.scss";
@import "./matrix-react-sdk/views/elements/_ToolTipButton.scss";
@import "./matrix-react-sdk/views/groups/_GroupRoomList.scss";
@import "./matrix-react-sdk/views/login/_InteractiveAuthEntryComponents.scss";
@import "./matrix-react-sdk/views/login/_ServerConfig.scss";
@@ -55,6 +56,8 @@
@import "./matrix-react-sdk/views/rooms/_MemberInfo.scss";
@import "./matrix-react-sdk/views/rooms/_MemberList.scss";
@import "./matrix-react-sdk/views/rooms/_MessageComposer.scss";
@import "./matrix-react-sdk/views/rooms/_PinnedEventTile.scss";
@import "./matrix-react-sdk/views/rooms/_PinnedEventsPanel.scss";
@import "./matrix-react-sdk/views/rooms/_PresenceLabel.scss";
@import "./matrix-react-sdk/views/rooms/_RoomHeader.scss";
@import "./matrix-react-sdk/views/rooms/_RoomList.scss";
@@ -84,6 +87,7 @@
@import "./vector-web/views/dialogs/_SetPasswordDialog.scss";
@import "./vector-web/views/directory/_NetworkDropdown.scss";
@import "./vector-web/views/elements/_ImageView.scss";
@import "./vector-web/views/elements/_InlineSpinner.scss";
@import "./vector-web/views/elements/_Spinner.scss";
@import "./vector-web/views/globals/_MatrixToolbar.scss";
@import "./vector-web/views/messages/_DateSeparator.scss";

View File

@@ -19,6 +19,9 @@ limitations under the License.
width: 100%;
margin-left: auto;
margin-right: auto;
display: flex;
flex-direction: column;
overflow: hidden;
}
.mx_GroupView_error {
@@ -27,15 +30,15 @@ limitations under the License.
.mx_GroupView_header {
max-width: 960px;
margin: auto;
height: 70px;
min-height: 70px;
align-items: center;
display: flex;
margin-bottom: 20px;
padding-bottom: 10px;
}
.mx_GroupView_header_view {
border-bottom: 1px solid #e5e5e5;
border-bottom: 1px solid $primary-hairline-color;
padding-bottom: 0px;
}
.mx_GroupView_header_avatar, .mx_GroupView_header_info {
@@ -53,6 +56,23 @@ limitations under the License.
pointer-events: none;
}
.mx_GroupView_editable {
border-bottom: 1px solid $strong-input-border-color ! important;
min-width: 150px;
cursor: text;
}
.mx_GroupView_editable:focus {
border-bottom: 1px solid $accent-color ! important;
outline: none;
box-shadow: none;
}
.mx_GroupView_header_isUserMember .mx_GroupView_header_name:hover div:not(.mx_GroupView_editable) {
color: $accent-color;
cursor: pointer;
}
.mx_GroupView_avatarPicker {
position: relative;
}
@@ -102,10 +122,6 @@ limitations under the License.
border-bottom: 1px solid transparent;
}
.mx_GroupView_header_name input, .mx_GroupView_header_shortDesc input {
width: 400px;
}
.mx_GroupView_header_shortDesc {
vertical-align: bottom;
float: left;
@@ -133,18 +149,76 @@ limitations under the License.
top: 5px;
}
.mx_GroupView_body {
flex-grow: 1;
}
.mx_GroupView_rooms {
flex-grow: 1;
display: flex;
flex-direction: column;
min-height: 200px;
user-select: none;
}
.mx_GroupView h3 {
text-transform: uppercase;
color: $h3-color;
font-weight: 600;
font-size: 13px;
margin-bottom: 10px;
}
.mx_GroupView_rooms_header .mx_AccessibleButton {
padding-left: 14px;
margin-bottom: 14px;
height: 24px;
}
.mx_GroupView_group {
border-top: 1px solid $primary-hairline-color;
}
.mx_GroupView_group_disabled {
opacity: 0.3;
pointer-events: none;
}
.mx_GroupView_rooms_header_addRow_button {
display: inline-block;
}
.mx_GroupView_rooms_header_addRow_button object {
pointer-events: none;
}
.mx_GroupView_rooms_header_addRow_label {
display: inline-block;
vertical-align: top;
line-height: 24px;
padding-left: 28px;
color: $accent-color;
}
.mx_GroupView_rooms .mx_RoomDetailList {
flex-grow: 1;
border-top: 1px solid $primary-hairline-color;
padding-top: 10px;
word-break: break-word;
}
.mx_GroupView .mx_RoomView_messageListWrapper {
justify-content: flex-start;
}
.mx_GroupView_membershipSection {
margin-left: auto;
margin-right: auto;
margin-bottom: 11px;
color: $greyed-fg-color;
margin-top: 10px;
}
.mx_GroupView_membershipSubSection {
justify-content: space-between;
display: flex;
margin-top: 2px;
margin-bottom: 2px;
}
.mx_GroupView_membershipSection_description {
@@ -152,12 +226,25 @@ limitations under the License.
line-height: 34px;
}
.mx_GroupView_membershipSection_description .mx_BaseAvatar {
margin-right: 10px;
}
.mx_GroupView_membershipSection .mx_GroupView_textButton {
margin-right: 0px;
margin-top: 0px;
margin-left: 8px;
}
.mx_GroupView_memberSettings_toggle label {
cursor: pointer;
user-select: none;
}
.mx_GroupView_memberSettings input {
margin-right: 6px;
}
.mx_GroupView_featuredThings {
margin-top: 20px;
}
@@ -215,7 +302,23 @@ limitations under the License.
display: none;
}
.mx_GroupView_editLongDesc {
.mx_GroupView_body .gm-scroll-view > *{
margin: 11px 50px 0px 68px;
}
.mx_GroupView_groupDesc textarea {
width: 100%;
max-width: 100%;
height: 150px;
}
.mx_GroupView_groupDesc_placeholder {
background-color: $info-plinth-bg-color;
color: $info-plinth-fg-color;
border-radius: 10px;
text-align: center;
cursor: pointer;
padding: 100px 20px;
margin: 20px 0px;
}

View File

@@ -18,42 +18,134 @@ limitations under the License.
max-width: 960px;
margin-left: auto;
margin-right: auto;
display: flex;
flex-direction: column;
}
.mx_MyGroups .mx_RoomHeader_simpleHeader {
margin-left: 0px;
}
.mx_MyGroups_joinCreateBox {
display: table;
margin-bottom: 30px;
.mx_MyGroups_header {
/* Keep mid-point of create button aligned with icon in page header */
margin-left: 2px;
display: flex;
flex-wrap: wrap;
}
.mx_MyGroups_createBox, .mx_MyGroups_joinBox {
display: table-cell;
width: 40%;
.mx_MyGroups_headerCard {
flex: 1 0 50%;
margin-bottom: 30px;
min-width: 400px;
display: flex;
align-items: center;
}
.mx_MyGroups_headerCard .mx_MyGroups_headerCard_button {
margin-right: 13px;
height: 50px;
}
.mx_MyGroups_headerCard_button object {
/* Otherwise the SVG object absorbs clicks and the button doesn't work */
pointer-events: none;
}
.mx_MyGroups_headerCard_header {
font-weight: bold;
margin-bottom: 10px;
}
.mx_MyGroups_headerCard_content {
padding-right: 15px;
}
/* Until the button is wired up */
.mx_MyGroups_joinBox {
visibility: hidden;
}
.mx_MyGroups_joinCreateHeader {
font-weight: bold;
margin-bottom: 10px;
}
.mx_MyGroups_joinCreateButton {
float: left;
margin: 10px;
}
.mx_MyGroups_joinCreateButton object {
/* Otherwise the SVG object absorbs clicks and the button doesn't work */
pointer-events: none;
/* When joinBox wraps onto its own row, it should take up zero height so
that there isn't an awkward gap between MyGroups_createBox and
MyGroups_content.
*/
height: 0px;
margin: 0px;
}
.mx_MyGroups_content {
clear: left;
margin-left: 2px;
flex: 1 0 0;
display: flex;
flex-direction: column;
}
.mx_MyGroups_content h3 {
margin-bottom: 10px;
}
.mx_MyGroups_placeholder {
background-color: $info-plinth-bg-color;
color: $info-plinth-fg-color;
line-height: 400px;
border-radius: 10px;
text-align: center;
}
.mx_MyGroups_joinedGroups .gm-scroll-view {
border-top: 1px solid $primary-hairline-color;
overflow-x: hidden;
display: flex;
flex-direction: row;
flex-flow: wrap;
align-content: flex-start;
}
.mx_MyGroups_joinedGroups .gm-scroll-view .mx_GroupTile {
min-width: 300px;
max-width: 33%;
flex: 1 0 300px;
height: 75px;
margin: 10px 0px;
display: flex;
align-items: flex-start;
cursor: pointer;
}
.mx_GroupTile_profile {
margin-left: 10px;
display: flex;
flex-direction: column;
justify-content: center;
}
.mx_GroupTile_profile h3.mx_GroupTile_name,
.mx_GroupTile_profile .mx_GroupTile_groupId,
.mx_GroupTile_profile .mx_GroupTile_desc {
padding-right: 10px;
}
.mx_GroupTile_profile h3.mx_GroupTile_name {
margin: 0px;
font-size: 15px;
}
.mx_GroupTile_profile .mx_GroupTile_groupId {
font-size: 13px;
}
.mx_GroupTile_profile .mx_GroupTile_desc {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
font-size: 13px;
max-height: 36px;
overflow: hidden;
}
.mx_GroupTile_profile .mx_GroupTile_groupId {
opacity: 0.7;
}

View File

@@ -150,6 +150,16 @@ limitations under the License.
display: block;
}
.mx_RoomStatusBar_isAlone {
height: 50px;
line-height: 50px;
color: $primary-fg-color;
opacity: 0.5;
overflow-y: hidden;
display: block;
}
.mx_MatrixChat_useCompactLayout {
.mx_RoomStatusBar {
min-height: 40px;

View File

@@ -68,7 +68,7 @@ limitations under the License.
min-width: 0px;
max-width: 960px;
width: 100%;
margin: auto;
margin: 0px auto;
overflow: auto;
border-bottom: 1px solid $primary-hairline-color;
@@ -80,17 +80,32 @@ limitations under the License.
max-width: 1920px ! important;
}
.mx_RoomView_topUnreadMessagesBar {
.mx_RoomView_body {
order: 3;
flex: 1 1 0;
flex-direction: column;
display: flex;
}
.mx_RoomView_body .mx_RoomView_topUnreadMessagesBar {
order: 1;
}
.mx_RoomView_body .mx_RoomView_messagePanel {
order: 2;
}
.mx_RoomView_body .mx_RoomView_statusArea {
order: 3;
}
.mx_RoomView_messagePanel {
.mx_RoomView_body .mx_MessageComposer {
order: 4;
}
flex: 1 1 0;
.mx_RoomView_messagePanel {
width: 100%;
overflow-y: auto;
}
@@ -131,18 +146,6 @@ limitations under the License.
clear: both;
}
.mx_RoomView_invitePrompt {
order: 2;
min-width: 0px;
max-width: 960px;
width: 100%;
margin: auto;
margin-top: 12px;
margin-bottom: 12px;
}
li.mx_RoomView_myReadMarker_container {
height: 0px;
margin: 0px;
@@ -160,8 +163,6 @@ hr.mx_RoomView_myReadMarker {
}
.mx_RoomView_statusArea {
order: 5;
width: 100%;
flex: 0 0 auto;
@@ -236,8 +237,6 @@ hr.mx_RoomView_myReadMarker {
}
.mx_RoomView .mx_MessageComposer {
order: 6;
width: 100%;
flex: 0 0 auto;
margin-right: 2px;

View File

@@ -252,6 +252,16 @@ input.mx_UserSettings_phoneNumberField {
display: none;
}
.mx_UserSettings_avatarPicker_imgContainer {
display: inline-block;
}
.mx_UserSettings_avatarPicker_remove {
display: inline-block;
float: right;
margin-right: -15px;
}
.mx_UserSettings_advanced_spoiler,
.mx_UserSettings_link {
cursor: pointer;

View File

@@ -14,6 +14,14 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
.mx_ChatInviteDialog {
/* XXX: padding-left is on mx_Dialog but padding-right has subsequently
* been added on other dialogs. Surely all our dialogs should have consistent
* right hand padding?
*/
padding-right: 58px;
}
/* Using a textarea for this element, to circumvent autofill */
.mx_ChatInviteDialog_input,
.mx_ChatInviteDialog_input:focus
@@ -52,9 +60,8 @@ limitations under the License.
}
.mx_ChatInviteDialog_error {
position: absolute;
margin-top: 10px;
color: $warning-color;
line-height: 36px;
}
.mx_ChatInviteDialog_cancel {

View File

@@ -33,3 +33,30 @@ limitations under the License.
background-color: $primary-bg-color;
}
.mx_CreateGroupDialog_input_hasPrefixAndSuffix {
border-radius: 0px;
}
.mx_CreateGroupDialog_input_group {
display: flex;
}
.mx_CreateGroupDialog_prefix,
.mx_CreateGroupDialog_suffix {
height: 35px;
padding: 0px 5px;
line-height: 37px;
background-color: $input-border-color;
border: 1px solid $input-border-color;
text-align: center;
}
.mx_CreateGroupDialog_prefix {
border-right: 0px;
border-radius: 3px 0px 0px 3px;
}
.mx_CreateGroupDialog_suffix {
border-left: 0px;
border-radius: 0px 3px 3px 0px;
}

View File

@@ -0,0 +1,25 @@
/*
Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
.mx_GroupAddressPicker_checkboxContainer{
margin-top: 10px;
display: flex;
}
.mx_GroupAddressPicker_checkboxContainer input[type="checkbox"] {
/* Stop flex from shrinking the checkbox */
width: 20px;
}

View File

@@ -3,7 +3,8 @@
// --Matthew
.mx_UserPill,
.mx_RoomPill {
.mx_RoomPill,
.mx_AtRoomPill {
border-radius: 16px;
display: inline-block;
height: 20px;
@@ -24,7 +25,9 @@
padding-right: 5px;
}
.mx_EventTile_highlight .mx_EventTile_content .markdown-body a.mx_UserPill_me {
.mx_EventTile_highlight .mx_EventTile_content .markdown-body a.mx_UserPill_me,
.mx_EventTile_content .mx_AtRoomPill,
.mx_MessageComposer_input .mx_AtRoomPill {
color: $accent-fg-color;
background-color: $mention-user-pill-bg-color;
padding-right: 5px;
@@ -39,7 +42,8 @@
}
.mx_UserPill .mx_BaseAvatar,
.mx_RoomPill .mx_BaseAvatar {
.mx_RoomPill .mx_BaseAvatar,
.mx_AtRoomPill .mx_BaseAvatar {
position: relative;
left: -3px;
top: 2px;

View File

@@ -0,0 +1,51 @@
/*
Copyright 2017 New Vector Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
.mx_ToolTipButton {
display: inline-block;
width: 11px;
height: 11px;
margin-left: 5px;
border: 2px solid $neutral-badge-color;
border-radius: 20px;
color: $neutral-badge-color;
transition: opacity 0.2s ease-in;
opacity: 0.6;
line-height: 11px;
text-align: center;
cursor: pointer;
}
.mx_ToolTipButton:hover {
opacity: 1.0;
}
.mx_ToolTipButton_container {
position: relative;
top: -18px;
left: 4px;
}
.mx_ToolTipButton_helpText {
width: 200px;
text-align: center;
line-height: 17px !important;
}

View File

@@ -1,74 +0,0 @@
/*
Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
.mx_GroupInviteTile {
position: relative;
cursor: pointer;
font-size: 13px;
display: block;
height: 34px;
}
.mx_GroupInviteTile_nameContainer {
display: inline-block;
width: 180px;
height: 24px;
}
.mx_GroupInviteTile_avatarContainer {
display: inline-block;
padding-top: 5px;
padding-bottom: 5px;
padding-left: 16px;
padding-right: 6px;
width: 24px;
height: 24px;
vertical-align: middle;
}
.mx_GroupInviteTile_name {
display: inline-block;
position: relative;
width: 165px;
vertical-align: middle;
padding-left: 6px;
padding-right: 6px;
padding-top: 2px;
padding-bottom: 3px;
color: $roomtile-name-color;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.mx_GroupInviteTile_badge {
display: inline-block;
min-width: 15px;
height: 15px;
position: absolute;
right: 8px; /*gutter */
top: 9px;
border-radius: 8px;
color: $accent-fg-color;
background-color: $group-alert-color;
font-weight: 600;
font-size: 10px;
text-align: center;
padding-top: 1px;
padding-left: 4px;
padding-right: 4px;
}

View File

@@ -19,18 +19,3 @@ limitations under the License.
color: $primary-fg-color;
cursor: pointer;
}
.mx_GroupRoomTile_delete {
opacity: 0.4;
position: absolute;
top: 6px;
right: 10px;
cursor: pointer;
display: none;
}
.mx_GroupRoomTile:hover > .mx_GroupRoomTile_delete {
display: initial;
}

View File

@@ -14,9 +14,8 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
.mx_AppsDrawer {
margin-bottom: 3px;
}
// .mx_AppsDrawer {
// }
.mx_AppsContainer {
display: flex;
@@ -51,11 +50,13 @@ limitations under the License.
.mx_AppTile {
max-width: 960px;
width: 50%;
margin: 0 5px 2px 0;
margin-right: 5px;
border: 1px solid $primary-hairline-color;
border-radius: 2px;
// height: 350px;
// display: inline-block;
}
.mx_AppTile:last-child {
margin-right: 1px;
}
.mx_AppTileFullWidth {
@@ -69,12 +70,16 @@ limitations under the License.
// display: inline-block;
}
.mx_AppTile, .mx_AppTileFullWidth {
margin-top: 3px;
}
.mx_AppTileMenuBar {
// height: 15px;
margin: 0;
padding: 2px 10px;
// background-color: $e2e-verified-color;
// border-bottom: 1px solid $primary-hairline-color;
border-bottom: 1px solid $primary-hairline-color;
font-size: 10px;
}
@@ -116,8 +121,8 @@ limitations under the License.
display: block;
}
.mx_CloseAppWidget {
}
// .mx_CloseAppWidget {
// }
.mx_AppTileMenuBarWidgetPadding {
margin-right: 5px;
@@ -235,3 +240,7 @@ form.mx_Custom_Widget_Form div {
align-items: center;
font-weight: bold;
}
.mx_AppLoading iframe {
display: none;
}

View File

@@ -56,6 +56,8 @@ limitations under the License.
overflow: hidden;
font-size: 14px;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 155px;
}
.mx_EntityTile_details {
@@ -66,8 +68,6 @@ limitations under the License.
.mx_EntityTile_name_hover {
font-size: 13px;
overflow: hidden;
text-overflow: ellipsis;
}
.mx_EntityTile_chevron {

View File

@@ -67,8 +67,9 @@ limitations under the License.
}
.mx_EventTile .mx_SenderProfile .mx_Flair img {
vertical-align: -3px;
vertical-align: -2px;
margin-right: 2px;
border-radius: 8px;
}
.mx_EventTile .mx_MessageTimestamp {

View File

@@ -94,3 +94,19 @@ limitations under the License.
cursor: pointer;
}
.mx_MemberInfo label {
font-size: 13px;
}
.mx_MemberInfo label .mx_MemberInfo_label_text {
display: inline-block;
max-width: 180px;
vertical-align: text-top;
}
.mx_MemberInfo input[type="radio"] {
vertical-align: -2px;
margin-right: 5px;
margin-left: 8px;
}

View File

@@ -92,6 +92,7 @@ limitations under the License.
}
*/
.mx_GroupMemberList_invited h2,
.mx_MemberList_invited h2 {
text-transform: uppercase;
color: $h3-color;

View File

@@ -0,0 +1,67 @@
/*
Copyright 2017 Travis Ralston
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
.mx_PinnedEventTile {
min-height: 40px;
margin-bottom: 5px;
width: 100%;
border-radius: 5px; // for the hover
}
.mx_PinnedEventTile:hover {
background-color: $event-selected-color;
}
.mx_PinnedEventTile .mx_PinnedEventTile_sender {
color: #868686;
font-size: 0.8em;
vertical-align: top;
display: block;
padding-bottom: 3px;
}
.mx_PinnedEventTile .mx_EventTile_content {
margin-left: 50px;
position: relative;
top: 0;
left: 0;
}
.mx_PinnedEventTile .mx_BaseAvatar {
float: left;
margin-right: 10px;
}
.mx_PinnedEventTile:hover .mx_PinnedEventTile_actions {
display: block;
}
.mx_PinnedEventTile_actions {
float: right;
margin-right: 10px;
display: none;
}
.mx_PinnedEventTile_unpinButton {
display: inline-block;
cursor: pointer;
margin-left: 10px;
}
.mx_PinnedEventTile_gotoButton {
display: inline-block;
font-size: 0.8em;
}

View File

@@ -0,0 +1,37 @@
/*
Copyright 2017 Travis Ralston
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
.mx_PinnedEventsPanel {
border-top: 1px solid $primary-hairline-color;
}
.mx_PinnedEventsPanel_body {
max-height: 300px;
overflow-y: auto;
padding-bottom: 15px;
}
.mx_PinnedEventsPanel_header {
margin: 0;
padding-top: 8px;
padding-bottom: 15px;
}
.mx_PinnedEventsPanel_cancel {
margin: 12px;
float: right;
display: inline-block;
}

View File

@@ -60,6 +60,10 @@ limitations under the License.
padding-right: 12px;
}
.mx_RoomHeader_textButton_danger {
background-color: $warning-color;
}
.mx_RoomHeader_cancelButton {
order: 2;
cursor: pointer;
@@ -138,10 +142,17 @@ limitations under the License.
.mx_RoomHeader_name,
.mx_RoomHeader_avatar,
.mx_RoomHeader_avatarPicker,
.mx_RoomHeader_avatarPicker_edit {
.mx_RoomHeader_avatarPicker_edit,
.mx_RoomHeader_avatarPicker_remove {
cursor: pointer;
}
.mx_RoomHeader_avatarPicker_remove {
position: absolute;
top: -11px;
right: -9px;
}
.mx_RoomHeader_name:hover div:not(.mx_RoomHeader_editable) {
color: $accent-color;
}
@@ -165,7 +176,7 @@ limitations under the License.
.mx_RoomHeader_topic {
vertical-align: bottom;
float: left;
max-height: 42px;
max-height: 38px;
color: $settings-grey-fg-color;
font-weight: 300;
font-size: 13px;
@@ -174,6 +185,7 @@ limitations under the License.
overflow: hidden;
text-overflow: ellipsis;
border-bottom: 1px solid transparent;
column-width: 960px;
}
.mx_RoomHeader_avatar {
@@ -187,8 +199,12 @@ limitations under the License.
object-fit: cover;
}
.mx_RoomHeader_avatarPicker {
margin-top: 23px;
position: relative;
}
.mx_RoomHeader_avatarPicker_edit {
position: absolute;
margin-left: 16px;
margin-top: 4px;
}
@@ -217,3 +233,21 @@ limitations under the License.
.mx_RoomHeader_voipButtons {
margin-top: 18px;
}
.mx_RoomHeader_pinnedButton {
position: relative;
}
.mx_RoomHeader_pinsIndicator {
position: absolute;
right: 0;
bottom: 4px;
width: 8px;
height: 8px;
border-radius: 8px;
background-color: $pinned-color;
}
.mx_RoomHeader_pinsIndicatorUnread {
background-color: $pinned-unread-color;
}

View File

@@ -42,4 +42,8 @@ limitations under the License.
.mx_VideoView_localVideoFeed video {
width: auto;
height: 100%;
}
}
.mx_VideoView_localVideoFeed.mx_VideoView_localVideoFeed_flipped video {
transform: scale(-1, 1);
}

View File

@@ -22,7 +22,13 @@ $warning-color: #ff0064;
$mention-user-pill-bg-color: #ff0064;
$other-user-pill-bg-color: rgba(0, 0, 0, 0.1);
$group-alert-color: #774f7e;
// pinned events indicator
$pinned-unread-color: #ff0064; // $warning-color
$pinned-color: #888;
// informational plinth
$info-plinth-bg-color: #f7f7f7;
$info-plinth-fg-color: #888;
$preview-bar-bg-color: #f7f7f7;

View File

@@ -20,6 +20,9 @@ $focus-brightness: 200%;
// red warning colour
$warning-color: #ff0064;
// groups
$info-plinth-bg-color: #454545;
$other-user-pill-bg-color: rgba(255, 255, 255, 0.1);
$preview-bar-bg-color: #333;
@@ -131,6 +134,9 @@ $progressbar-color: #000;
}
// markdown overrides:
.mx_EventTile_content .markdown-body pre:hover {
border-color: #808080 !important; // inverted due to rules below
}
.mx_EventTile_content .markdown-body {
pre, code {
filter: invert(1);

View File

@@ -94,30 +94,26 @@ limitations under the License.
}
.mx_RightPanel_footer .mx_RightPanel_invite {
line-height: 35px;
font-size: 14px;
color: $primary-fg-color;
padding-top: 13px;
padding-left: 5px;
cursor: pointer;
display: flex;
align-items: center;
}
.collapsed .mx_RightPanel_footer .mx_RightPanel_invite {
display: none;
}
.mx_RightPanel_invite .mx_RightPanel_icon {
display: inline-block;
}
.mx_RightPanel_invite .mx_RightPanel_icon object {
pointer-events: none;
}
.mx_RightPanel_invite .mx_RightPanel_message {
display: inline-block;
vertical-align: top;
padding-left: 10px
padding-left: 10px;
line-height: 18px;
}
.mx_MatrixChat_useCompactLayout {

View File

@@ -100,6 +100,7 @@ limitations under the License.
display: inline;
padding-left: 5px;
padding-right: 5px;
margin-right: 5px;
height: 15px;
border-radius: 11px;
background-color: $plinth-bg-color;

View File

@@ -17,3 +17,150 @@ limitations under the License.
.mx_DevTools_RoomStateExplorer_button, .mx_DevTools_RoomStateExplorer_query {
margin-bottom: 10px;
}
.mx_DevTools_label_left {
float: left;
}
.mx_DevTools_label_right {
float: right;
}
.mx_DevTools_label_bottom {
clear: both;
border-bottom: 1px solid #e5e5e5;
}
.mx_DevTools_inputRow
{
display: table-row;
}
.mx_DevTools_inputLabelCell
{
padding-bottom: 21px;
display: table-cell;
font-weight: bold;
padding-right: 24px;
}
.mx_DevTools_inputCell {
display: table-cell;
padding-bottom: 21px;
width: 240px;
}
.mx_DevTools_inputCell input
{
display: inline-block;
border: 0;
border-bottom: 1px solid $input-underline-color;
padding: 0;
width: 240px;
color: $input-fg-color;
font-family: 'Open Sans', Helvetica, Arial, Sans-Serif;
font-size: 16px;
}
.mx_DevTools_tgl {
display: none;
// add default box-sizing for this scope
&,
&:after,
&:before,
& *,
& *:after,
& *:before,
& + .mx_DevTools_tgl-btn {
box-sizing: border-box;
&::selection {
background: none;
}
}
+ .mx_DevTools_tgl-btn {
outline: 0;
display: block;
width: 7em;
height: 2em;
position: relative;
cursor: pointer;
user-select: none;
&:after,
&:before {
position: relative;
display: block;
content: "";
width: 50%;
height: 100%;
}
&:after {
left: 0;
}
&:before {
display: none;
}
}
&:checked + .mx_DevTools_tgl-btn:after {
left: 50%;
}
}
.mx_DevTools_tgl-flip {
+ .mx_DevTools_tgl-btn {
padding: 2px;
transition: all .2s ease;
font-family: sans-serif;
perspective: 100px;
&:after,
&:before {
display: inline-block;
transition: all .4s ease;
width: 100%;
text-align: center;
position: absolute;
line-height: 2em;
font-weight: bold;
color: #fff;
top: 0;
left: 0;
backface-visibility: hidden;
border-radius: 4px;
}
&:after {
content: attr(data-tg-on);
background: #02C66F;
transform: rotateY(-180deg);
}
&:before {
background: #FF3A19;
content: attr(data-tg-off);
}
&:active:before {
transform: rotateY(-20deg);
}
}
&:checked + .mx_DevTools_tgl-btn {
&:before {
transform: rotateY(180deg);
}
&:after {
transform: rotateY(0);
left: 0;
background: #7FC6A6;
}
&:active:after {
transform: rotateY(20deg);
}
}
}

View File

@@ -0,0 +1,24 @@
/*
Copyright 2017 New Vector Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
.mx_InlineSpinner {
display: inline;
}
.mx_InlineSpinner img {
margin: 0px 6px;
vertical-align: -3px;
}

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
<g>
<path fill="#FF0064" d="M85.633,454.889c0,31.168,25.553,56.661,56.79,56.661h227.156c31.234,0,56.787-25.493,56.787-56.661
V128.225H85.633V454.889z M468.958,43.042H362.479L326.828,0.45H185.173l-35.652,42.591H43.042v42.592h425.916V43.042z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 738 B

View File

@@ -1,127 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="25px"
height="25px"
viewBox="0 0 25 25"
version="1.1"
id="svg4196"
inkscape:version="0.91 r13725"
sodipodi:docname="icons-room.svg">
<metadata
id="metadata4216">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>81230A28-D944-4572-B5DB-C03CAA2B1FCA</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1199"
inkscape:window-height="897"
id="namedview4214"
showgrid="false"
inkscape:zoom="18.441345"
inkscape:cx="12.5"
inkscape:cy="12.5"
inkscape:window-x="486"
inkscape:window-y="77"
inkscape:window-maximized="0"
inkscape:current-layer="g4240" />
<!-- Generator: sketchtool 39.1 (31720) - http://www.bohemiancoding.com/sketch -->
<title
id="title4198">81230A28-D944-4572-B5DB-C03CAA2B1FCA</title>
<desc
id="desc4200">Created with sketchtool.</desc>
<defs
id="defs4202" />
<g
id="Symbols"
stroke="none"
stroke-width="1"
fill="none"
fill-rule="evenodd">
<g
id="Left-nav-default"
transform="translate(-50.000000, -725.000000)">
<g
id="Left-panel">
<g
id="g4207">
<g
id="icons_people"
transform="translate(50.000000, 725.000000)">
<path
d="M12.5,25 C19.4035594,25 25,19.4035594 25,12.5 C25,5.59644063 19.4035594,0 12.5,0 C5.59644063,0 0,5.59644063 0,12.5 C0,19.4035594 5.59644063,25 12.5,25 Z"
id="Oval-1-Copy-7"
fill="#76CFA6" />
<g
id="icons_people_svg"
transform="translate(2.1738878,5.8373221)"
style="stroke:#ffffff">
<path
d="m 10.5,12 c 0,-2.7614237 0,-5 -5,-5 -5.0000002,0 -5,2.2385763 -5,5 3.4756747,0 5.5712891,0 10,0 z"
id="Oval-40"
inkscape:connector-curvature="0"
style="stroke-linecap:round;stroke-linejoin:round" />
<circle
id="Oval"
cx="5.5"
cy="2.75"
r="2.75" />
</g>
<g
style="stroke:#ffffff"
transform="translate(12.151468,5.8373221)"
id="g4246">
<path
style="stroke-linecap:round;stroke-linejoin:round"
inkscape:connector-curvature="0"
id="path4248"
d="m 10.5,12 c 0,-2.7614237 0,-5 -5,-5 -5.0000002,0 -5,2.2385763 -5,5 3.4756747,0 5.5712891,0 10,0 z" />
<circle
r="2.75"
cy="2.75"
cx="5.5"
id="circle4250" />
</g>
<g
transform="translate(6.945774,9.0366549)"
id="g4240"
style="stroke:#ffffff">
<path
id="path4242"
d="m 10.5,12 c 0,-2.7614237 0,-5 -5,-5 -5.0000002,0 -5,2.2385763 -5,5 3.4756747,0 5.5712891,0 10,0 z"
inkscape:connector-curvature="0"
style="stroke-linecap:round;stroke-linejoin:round;fill:#76cfa6;fill-opacity:1" />
<circle
r="2.75"
cy="2.75"
cx="5.5"
id="circle4244"
style="fill:#76cfa6;fill-opacity:1" />
</g>
</g>
</g>
</g>
</g>
</g>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 25 25" style="enable-background:new 0 0 25 25;" xml:space="preserve">
<style type="text/css">
.st4{fill:none;stroke-miterlimit:10;}
</style>
<g id="icons_people" transform="translate(50.000000, 725.000000)">
<path id="Oval-1-Copy-7" fill="#76CFA6" d="M-37.5-700c6.9,0,12.5-5.6,12.5-12.5S-30.6-725-37.5-725S-50-719.4-50-712.5
S-44.4-700-37.5-700z"/>
<g id="g4240_1_" transform="translate(6.945774,9.0366549)">
<path id="path4242_1_" class="st4" stroke="#FFFFFF" d="M-38.8-714.1c0-3.2,0-5.7-5.7-5.7s-5.7,2.5-5.7,5.7C-46.2-714.1-43.8-714.1-38.8-714.1z"/>
<circle id="circle4244_1_" class="st4" stroke="#FFFFFF" cx="-44.5" cy="-724.7" r="3.2"/>
</g>
<g>
<path fill="#FFFFFF" d="M-45.8-708.7c0-2.5,0.3-4,4.5-4c0.3,0,0.6,0,0.8,0c-0.3-0.3-0.6-0.6-0.8-1c0,0,0,0-0.1,0
c-5.5,0-5.5,2.7-5.5,5.5v0.5h2.7c0.1-0.3,0.1-0.7,0.2-1H-45.8z"/>
<path fill="#FFFFFF" d="M-43.6-717.4c0-1.3,1-2.3,2.3-2.3c0.6,0,1.1,0.2,1.5,0.5c0.3-0.2,0.6-0.3,1-0.5c-0.6-0.7-1.5-1.1-2.4-1.1
c-1.8,0-3.3,1.5-3.3,3.3c0,1.8,1.4,3.2,3.2,3.3c-0.1-0.3-0.2-0.7-0.3-1C-42.8-715.3-43.6-716.2-43.6-717.4z"/>
<path fill="#FFFFFF" d="M-27.8-708.2c0-2.8,0-5.5-5.5-5.5c-0.2,0-0.3,0-0.5,0c-0.2,0.4-0.5,0.7-0.8,1c0.4,0,0.8-0.1,1.3-0.1
c4.2,0,4.5,1.5,4.5,4h-2.4c0.1,0.3,0.2,0.7,0.2,1h3.1V-708.2z"/>
<path fill="#FFFFFF" d="M-33.3-719.7c1.3,0,2.3,1,2.3,2.3c0,1.3-1,2.3-2.3,2.3c0,0,0,0,0,0c0,0.3-0.1,0.7-0.3,1c0.1,0,0.2,0,0.3,0
c1.8,0,3.3-1.5,3.3-3.3c0-1.8-1.5-3.3-3.3-3.3c-1,0-1.9,0.5-2.5,1.2c0.3,0.1,0.6,0.3,0.9,0.5C-34.6-719.4-34-719.7-33.3-719.7z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,7 @@
<svg width="16px" height="16px" viewbox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<g transform="scale(0.03125)">
<path id="svg_2" fill="none" stroke="#76cfa6" stroke-width="40" stroke-linecap="round" stroke-linejoin="round" d="m315.802,402.338c12.73,-33.537 13.503,-69.629 3.623,-102.697l93.245,-103.107l7.831,7.831c10.411,10.409 27.283,10.409 37.691,0c10.41,-10.408 10.41,-27.281 0.001,-37.69l-112.869,-112.867c-10.407,-10.409 -27.279,-10.41 -37.689,-0.001c-10.408,10.41 -10.409,27.283 0.001,37.693l7.833,7.833l-103.107,93.243c-33.069,-9.878 -69.163,-9.107 -102.697,3.626c-4.7,1.785 -8.001,5.646 -9.059,10.604c-1.175,5.473 0.627,11.402 4.697,15.472l184.42,184.421c4.069,4.07 10,5.871 15.472,4.695c4.959,-1.055 8.82,-4.357 10.607,-9.056z"/>
<polyline id="svg_3" fill="none" stroke="#76cfa6" stroke-width="40" stroke-linecap="round" stroke-linejoin="round" points=" 180.951,297.927 46,466 215.319,332.295 "/>
<!--<line id="svg_4" fill="none" stroke="#76cfa6" stroke-width="40" stroke-linecap="round" stroke-linejoin="round" y2="219.549" y1="138.166" x2="255.531" x1="336.915"/>-->
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,159 +1,23 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="25px"
height="25px"
viewBox="0 0 25 25"
version="1.1"
id="svg4196"
inkscape:version="0.48.4 r9939"
sodipodi:docname="icons-room.svg">
<metadata
id="metadata4216">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>81230A28-D944-4572-B5DB-C03CAA2B1FCA</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1918"
inkscape:window-height="1050"
id="namedview4214"
showgrid="false"
inkscape:zoom="18.441345"
inkscape:cx="-1.0720921"
inkscape:cy="5.6865774"
inkscape:window-x="0"
inkscape:window-y="28"
inkscape:window-maximized="0"
inkscape:current-layer="text3879"
inkscape:snap-object-midpoints="true"
inkscape:snap-global="true"
inkscape:snap-bbox="true"
inkscape:bbox-paths="false"
inkscape:snap-bbox-midpoints="true"
inkscape:snap-page="true"
showguides="true"
inkscape:guide-bbox="true" />
<!-- Generator: sketchtool 39.1 (31720) - http://www.bohemiancoding.com/sketch -->
<title
id="title4198">81230A28-D944-4572-B5DB-C03CAA2B1FCA</title>
<desc
id="desc4200">Created with sketchtool.</desc>
<defs
id="defs4202" />
<g
id="Symbols"
stroke="none"
stroke-width="1"
fill="none"
fill-rule="evenodd">
<g
id="Left-nav-default"
transform="translate(-50.000000, -725.000000)">
<g
id="Left-panel">
<g
id="g4207">
<g
id="icons_people"
transform="translate(50.000000, 725.000000)">
<path
d="M12.5,25 C19.4035594,25 25,19.4035594 25,12.5 C25,5.59644063 19.4035594,0 12.5,0 C5.59644063,0 0,5.59644063 0,12.5 C0,19.4035594 5.59644063,25 12.5,25 Z"
id="Oval-1-Copy-7"
fill="#76CFA6"
style="fill:#76cfa6;fill-opacity:1" />
<path
style="fill:#a0a0a0;stroke:none"
d="m 4.4538552,16.721536 c 0.680539,-0.0086 1.7786151,-0.0086 2.4401691,2.1e-5 0.6615541,0.0086 0.1047495,0.01567 -1.2373435,0.01565 -1.342093,-1.2e-5 -1.8833645,-0.0071 -1.2028256,-0.01567 z"
id="path3032"
inkscape:connector-curvature="0" />
<g
transform="matrix(1.0243293,0,0,0.97624855,-24.996028,0.15844144)"
style="font-size:20.13689613px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
id="text3879">
<g
id="g3249"
transform="matrix(0.69732039,0,0,0.73166379,24.402336,-0.16229621)"
style="opacity:1;fill:#de8787">
<g
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
id="g3183">
<g
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
id="g3169">
<g
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
id="g3156">
<g
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
id="Symbols-3">
<g
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
id="Right-panel/Footer"
transform="translate(-26,-34)">
<g
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
id="icon_invite_people"
transform="translate(26,34)">
<g
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
id="Group-5"
transform="translate(8,9)">
<g
style="opacity:0.80000000000000004;fill:none;fill-opacity:1;stroke-linecap:round;stroke:#ffffff;stroke-opacity:1"
id="Group-3"
transform="translate(14.4375,3.9375)">
<path
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 0,3.28125 6.5625,0"
id="Line" />
<path
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
inkscape:connector-curvature="0"
d="m 3.28125,0 0,6.5625"
id="path3142" />
</g>
<g
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
id="icons_people_svg" />
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<path
d="m 37.394645,11.340164 -0.511365,2.634303 2.19267,0 0,0.999487 -2.378621,0 -0.650828,3.331619 -1.06147,0 0.650829,-3.331619 -2.34763,0 -0.635332,3.331619 -1.053721,0 0.619835,-3.331619 -2.029963,0 0,-0.999487 2.223663,0 0.52686,-2.634303 -2.146183,0 0,-0.98399 2.316638,0 0.635332,-3.3781075 1.076965,0 -0.635332,3.3781075 2.363126,0 0.650827,-3.3781075 1.038226,0 -0.650827,3.3781075 2.045459,0 0,0.98399 -2.239158,0 m -3.920464,2.634303 2.347629,0 0.511365,-2.634303 -2.347629,0 -0.511365,2.634303"
style="font-variant:normal;font-stretch:normal;fill:#ffffff;font-family:Open Sans;-inkscape-font-specification:Open Sans"
id="path3002"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
</g>
</g>
</g>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="svg4196" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 25 25"
style="enable-background:new 0 0 25 25;" xml:space="preserve">
<style type="text/css">
.st1{opacity:0.7;}
.st2{fill:none;stroke-linecap:round;}
</style>
<g id="icons_people" transform="translate(50.000000, 725.000000)">
<path id="Oval-1-Copy-7" fill="#76CFA6" d="M-37.5-700c6.9,0,12.5-5.6,12.5-12.5S-30.6-725-37.5-725S-50-719.4-50-712.5
S-44.4-700-37.5-700z"/>
<g id="text3879" transform="matrix(1.0243293,0,0,0.97624855,-24.996028,0.15844144)">
<g id="Group-3" transform="translate(14.4375,3.9375)" class="st1">
<path id="Line" class="st2" stroke="#ffffff" d="M-23.2-733.8h4.6"/>
<path id="path3142" class="st2" stroke="#ffffff" d="M-20.9-736.2v4.8"/>
</g>
<path id="path3002" fill="#ffffff" d="M-11.4-731.3l-0.5,2.6h2.2v1h-2.4l-0.7,3.3h-1.1l0.7-3.3
h-2.3l-0.6,3.3h-1.1l0.6-3.3h-2v-1h2.2l0.5-2.6H-18v-1h2.3l0.6-3.4h1.1l-0.6,3.4h2.4l0.7-3.4h1l-0.7,3.4h2v1H-11.4 M-15.3-728.7
h2.3l0.5-2.6h-2.3L-15.3-728.7"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,109 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="25px"
height="25px"
viewBox="0 0 25 25"
version="1.1"
id="svg4196"
inkscape:version="0.48.4 r9939"
sodipodi:docname="lukes-icons-room.svg">
<metadata
id="metadata4216">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>81230A28-D944-4572-B5DB-C03CAA2B1FCA</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1918"
inkscape:window-height="1078"
id="namedview4214"
showgrid="false"
inkscape:zoom="13.04"
inkscape:cx="3.0259155"
inkscape:cy="11.779524"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="text3879"
inkscape:snap-object-midpoints="true"
inkscape:snap-global="true"
inkscape:snap-bbox="true"
inkscape:bbox-paths="false"
inkscape:snap-bbox-midpoints="true"
inkscape:snap-page="true"
showguides="true"
inkscape:guide-bbox="true">
<sodipodi:guide
orientation="0,1"
position="10.352761,19.555215"
id="guide4072" />
</sodipodi:namedview>
<!-- Generator: sketchtool 39.1 (31720) - http://www.bohemiancoding.com/sketch -->
<title
id="title4198">81230A28-D944-4572-B5DB-C03CAA2B1FCA</title>
<desc
id="desc4200">Created with sketchtool.</desc>
<defs
id="defs4202" />
<g
id="Symbols"
stroke="none"
stroke-width="1"
fill="none"
fill-rule="evenodd">
<g
id="Left-nav-default"
transform="translate(-50.000000, -725.000000)">
<g
id="Left-panel">
<g
id="g4207">
<g
id="icons_people"
transform="translate(50.000000, 725.000000)">
<path
d="M12.5,25 C19.4035594,25 25,19.4035594 25,12.5 C25,5.59644063 19.4035594,0 12.5,0 C5.59644063,0 0,5.59644063 0,12.5 C0,19.4035594 5.59644063,25 12.5,25 Z"
id="Oval-1-Copy-7"
fill="#76CFA6"
style="fill:#76cfa6;fill-opacity:1" />
<path
style="fill:#a0a0a0;stroke:none"
d="m 4.4538552,16.721536 c 0.680539,-0.0086 1.7786151,-0.0086 2.4401691,2.1e-5 0.6615541,0.0086 0.1047495,0.01567 -1.2373435,0.01565 -1.342093,-1.2e-5 -1.8833645,-0.0071 -1.2028256,-0.01567 z"
id="path3032"
inkscape:connector-curvature="0" />
<g
transform="scale(1.0243293,0.97624855)"
style="font-size:20.13689613px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans"
id="text3879">
<path
d="m 15.354413,11.152262 -0.648943,3.343039 2.782589,0 0,1.268389 -3.018568,0 -0.825927,4.227962 -1.347049,0 0.825928,-4.227962 -2.979238,0 -0.8062628,4.227962 -1.3372158,0 0.7865976,-4.227962 -2.5761069,0 0,-1.268389 2.8219186,0 0.6686079,-3.343039 -2.7235939,0 0,-1.2487235 2.9399082,0 0.8062621,-4.2869564 1.366713,0 -0.806262,4.2869564 2.998903,0 0.825927,-4.2869564 1.317551,0 -0.825927,4.2869564 2.595772,0 0,1.2487235 -2.841584,0 m -4.975229,3.343039 2.979238,0 0.648943,-3.343039 -2.979238,0 -0.648943,3.343039"
style="font-variant:normal;font-stretch:normal;fill:#ffffff;font-family:Open Sans;-inkscape-font-specification:Open Sans"
id="path3002" />
</g>
</g>
</g>
</g>
</g>
</g>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 25 25" style="enable-background:new 0 0 25 25;" xml:space="preserve">
<g id="icons_people">
<path id="Oval-1-Copy-7" fill="#76CFA6" d="M12.5,25C19.4,25,25,19.4,25,12.5S19.4,0,12.5,0S0,5.6,0,12.5S5.6,25,12.5,25z"/>
<g id="text3879" transform="scale(1.0243293,0.97624855)">
<path id="path3002" fill="#ffffff" d="M15.3,11.1l-0.6,3.3h2.8v1.3h-3l-0.8,4.2h-1.3l0.8-4.2h-3l-0.8,4.2H8.1l0.8-4.2H6.3v-1.3h2.8
l0.7-3.3H7.1V9.9H10l0.8-4.3h1.4l-0.8,4.3h3l0.8-4.3h1.3l-0.8,4.3h2.6v1.2H15.3 M10.4,14.5h3l0.6-3.3h-3L10.4,14.5"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 814 B

View File

@@ -69,6 +69,8 @@ import Promise from 'bluebird';
var request = require('browser-request');
import * as UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
import * as languageHandler from 'matrix-react-sdk/lib/languageHandler';
// Also import _t directly so we can call it just `_t` as this is what gen-i18n.js expects
import { _t } from 'matrix-react-sdk/lib/languageHandler';
import url from 'url';
@@ -248,13 +250,13 @@ async function loadApp() {
if (!preventRedirect) {
if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
if (confirm(languageHandler._t("Riot is not supported on mobile web. Install the app?"))) {
if (confirm(_t("Riot is not supported on mobile web. Install the app?"))) {
window.location = "https://itunes.apple.com/us/app/vector.im/id1083446067";
return;
}
}
else if (/Android/.test(navigator.userAgent)) {
if (confirm(languageHandler._t("Riot is not supported on mobile web. Install the app?"))) {
if (confirm(_t("Riot is not supported on mobile web. Install the app?"))) {
window.location = "https://play.google.com/store/apps/details?id=im.vector.alpha";
return;
}