Compare commits
299 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aad2069a51 | ||
|
|
bac8b34e26 | ||
|
|
6ebab2cb8d | ||
|
|
538e1d2446 | ||
|
|
dff791d478 | ||
|
|
629a18ebef | ||
|
|
7e5f80c9f7 | ||
|
|
898bb6f9d8 | ||
|
|
02c2e1a14c | ||
|
|
ad0cb6f0a8 | ||
|
|
29ddf98592 | ||
|
|
5e8ddc6d7c | ||
|
|
e1c762dcaa | ||
|
|
ef9f2f7ce6 | ||
|
|
d9bb6c52b4 | ||
|
|
ea0cfa92b4 | ||
|
|
150fa43735 | ||
|
|
718f48ba04 | ||
|
|
73e7581fc6 | ||
|
|
277a6dee10 | ||
|
|
5c9dd17d21 | ||
|
|
b494b458bb | ||
|
|
0630d856f8 | ||
|
|
1008ede4d1 | ||
|
|
cf1beb1d94 | ||
|
|
d0fe0499aa | ||
|
|
bfa4f59f3d | ||
|
|
63f520b5ee | ||
|
|
a0b0b6f053 | ||
|
|
88cd46bfcf | ||
|
|
7094df900a | ||
|
|
1f524f3085 | ||
|
|
405504dca4 | ||
|
|
2bb13fba7e | ||
|
|
d45940f204 | ||
|
|
81b085fbb8 | ||
|
|
910a5f7e6c | ||
|
|
092ec1cc6c | ||
|
|
106430f7b6 | ||
|
|
76570a0f14 | ||
|
|
e7fbad2236 | ||
|
|
e90419e40d | ||
|
|
16991a8f68 | ||
|
|
b788e759da | ||
|
|
3ee45b21b8 | ||
|
|
8af90b052b | ||
|
|
60de1dbffb | ||
|
|
38b5b27aa9 | ||
|
|
c7dba61d92 | ||
|
|
26d9677bbe | ||
|
|
beddf3a2cb | ||
|
|
144cbd144e | ||
|
|
1bdc666197 | ||
|
|
a72cc77e24 | ||
|
|
4c22f9a549 | ||
|
|
f280fe3c66 | ||
|
|
4c0e956cc1 | ||
|
|
e1d16acddb | ||
|
|
a45ae588e5 | ||
|
|
c8edaf1ba9 | ||
|
|
9ff1fe8a72 | ||
|
|
aa4feb0563 | ||
|
|
d87d6cbc64 | ||
|
|
3633f55e20 | ||
|
|
a8bdde9f55 | ||
|
|
e1eba559fe | ||
|
|
01401fe4f8 | ||
|
|
ba1ab9bdd1 | ||
|
|
25782404d4 | ||
|
|
a1512af9f9 | ||
|
|
cd26f63315 | ||
|
|
68bb61d281 | ||
|
|
b4b4fefffb | ||
|
|
2b49b68ba5 | ||
|
|
5a1498dec3 | ||
|
|
441aa91831 | ||
|
|
31c5122fa6 | ||
|
|
f290569487 | ||
|
|
c0b343c89f | ||
|
|
a42414eabd | ||
|
|
c90834114b | ||
|
|
038b3ed1eb | ||
|
|
5d9a1b42a6 | ||
|
|
290a501523 | ||
|
|
67bc346ebb | ||
|
|
8518e2b056 | ||
|
|
04c866ce9c | ||
|
|
f59ea648f0 | ||
|
|
3192c345be | ||
|
|
6432792d86 | ||
|
|
22b82182a7 | ||
|
|
c60ff5d283 | ||
|
|
a3d15e05b1 | ||
|
|
2c4c6e82bb | ||
|
|
4d11e739b5 | ||
|
|
f6974407e3 | ||
|
|
61287b5f08 | ||
|
|
69a82f7859 | ||
|
|
ee71c72685 | ||
|
|
06ce467876 | ||
|
|
c01ea56676 | ||
|
|
ac89b5dc5e | ||
|
|
fb8e41a9c1 | ||
|
|
7ab3be0a11 | ||
|
|
2e8f960ee3 | ||
|
|
65ea7a8460 | ||
|
|
819122c111 | ||
|
|
cd84d86fd1 | ||
|
|
2163a54617 | ||
|
|
62d249442e | ||
|
|
007ff8d177 | ||
|
|
56c6a15ddf | ||
|
|
04d1a72307 | ||
|
|
ea785aa888 | ||
|
|
841503f907 | ||
|
|
ba1ad84d59 | ||
|
|
1ffa7ae906 | ||
|
|
2d69595beb | ||
|
|
cd6a3d2293 | ||
|
|
d86841c1c8 | ||
|
|
58b9b04e35 | ||
|
|
71fc072301 | ||
|
|
07a17829ea | ||
|
|
c39044f397 | ||
|
|
71c8dca91a | ||
|
|
6da2f88dc5 | ||
|
|
ea9b630082 | ||
|
|
19320c37df | ||
|
|
159343dd23 | ||
|
|
c74e6c3c0c | ||
|
|
4c7d07c109 | ||
|
|
c971aab453 | ||
|
|
3dcc397f67 | ||
|
|
0a81419978 | ||
|
|
7bae7fe9e5 | ||
|
|
52ae5ba5dc | ||
|
|
de3a384513 | ||
|
|
3df1808fd0 | ||
|
|
d188fdb9fe | ||
|
|
7588814ec5 | ||
|
|
ffd526af1a | ||
|
|
0453b1c422 | ||
|
|
15466f02ed | ||
|
|
507cef3ba4 | ||
|
|
044519f9ea | ||
|
|
5db44bd4ae | ||
|
|
007177b7ba | ||
|
|
bc3df74c2f | ||
|
|
3fc0c455fa | ||
|
|
4a8729dd1d | ||
|
|
f6a920a018 | ||
|
|
7e7acb6922 | ||
|
|
a627784c41 | ||
|
|
fcfec1694e | ||
|
|
a3b82bcd3d | ||
|
|
7c7ae3a31f | ||
|
|
cd0888ce5a | ||
|
|
9679051269 | ||
|
|
0561c5bd4f | ||
|
|
313f4f03b7 | ||
|
|
3bff844a62 | ||
|
|
a747a78e06 | ||
|
|
bd15a88c89 | ||
|
|
e2b80e9e80 | ||
|
|
858e1fa341 | ||
|
|
a58ea58380 | ||
|
|
e2924d30df | ||
|
|
f258b3253f | ||
|
|
01d6577abd | ||
|
|
43f1951f37 | ||
|
|
1704a2fb9c | ||
|
|
6a0ecfba7f | ||
|
|
6e5ae0c664 | ||
|
|
ff5fbd4863 | ||
|
|
b5629ac3e6 | ||
|
|
f1a700ef99 | ||
|
|
cc1fb8ac94 | ||
|
|
d91c652590 | ||
|
|
8672939f0c | ||
|
|
c8f89fbc9b | ||
|
|
61e06d8cf3 | ||
|
|
e05ec68a61 | ||
|
|
c7d18ff52e | ||
|
|
508a850dec | ||
|
|
ec12b8ee93 | ||
|
|
0e20b20fb2 | ||
|
|
052c00bd86 | ||
|
|
146a75f7e7 | ||
|
|
d9fa11d03a | ||
|
|
b16d4280b7 | ||
|
|
eb45b00b32 | ||
|
|
84d1f838f0 | ||
|
|
16cd69f7dd | ||
|
|
9d56f7e214 | ||
|
|
5898a972a8 | ||
|
|
14b5006645 | ||
|
|
94454333d5 | ||
|
|
b33998c1f9 | ||
|
|
63bcca1c7d | ||
|
|
060b5d100f | ||
|
|
3e435e4581 | ||
|
|
95b5bcc6b0 | ||
|
|
25a7fb07a3 | ||
|
|
b72d35e0df | ||
|
|
667556f3ce | ||
|
|
483762cc35 | ||
|
|
a76fdc750a | ||
|
|
1f9b5b25cb | ||
|
|
0e3fbb6770 | ||
|
|
cc0a6d5c94 | ||
|
|
449af3c2e1 | ||
|
|
b2288e6525 | ||
|
|
c6f75fbf37 | ||
|
|
7369719492 | ||
|
|
62fd98245d | ||
|
|
8317bcbb9f | ||
|
|
b2e9b36978 | ||
|
|
ea459c84ba | ||
|
|
86226bc22d | ||
|
|
289743c5fe | ||
|
|
acb678afbd | ||
|
|
42ca840fef | ||
|
|
fc87fd2bb4 | ||
|
|
e5df06b2ab | ||
|
|
9d8b59e082 | ||
|
|
7395d866f6 | ||
|
|
c4de42c6af | ||
|
|
00f902cab1 | ||
|
|
ae9263fa59 | ||
|
|
f712804018 | ||
|
|
4e31aea402 | ||
|
|
568cd0aac6 | ||
|
|
ae3229b40c | ||
|
|
987072b25a | ||
|
|
6910b83c20 | ||
|
|
42ddafcfd4 | ||
|
|
4711356c3f | ||
|
|
137cf32d3b | ||
|
|
7bb0ed4a66 | ||
|
|
6b589c4945 | ||
|
|
fe490341d0 | ||
|
|
6e24f4ba09 | ||
|
|
f3b1c6cc5b | ||
|
|
e5c128fcb8 | ||
|
|
7c399974ce | ||
|
|
6ccacfee46 | ||
|
|
2effdfb840 | ||
|
|
55b14d5d5d | ||
|
|
f24fd61ae0 | ||
|
|
85307ffd23 | ||
|
|
e85f205e8f | ||
|
|
fdf07f6d89 | ||
|
|
027b751bbc | ||
|
|
8716f93a6d | ||
|
|
2401f21336 | ||
|
|
102651332a | ||
|
|
12ebe91f83 | ||
|
|
0807a2a26d | ||
|
|
2cefa58d5d | ||
|
|
18faa2d8ba | ||
|
|
498ae90040 | ||
|
|
da67a2c078 | ||
|
|
f9186ae8fc | ||
|
|
b71bcb4e9b | ||
|
|
f143315618 | ||
|
|
4a5e2e347b | ||
|
|
6926c96f36 | ||
|
|
6f819606c1 | ||
|
|
3e066d3aef | ||
|
|
2667ed2561 | ||
|
|
5bb2992f93 | ||
|
|
b70bd1987a | ||
|
|
5c1e2a8a82 | ||
|
|
6f81142bde | ||
|
|
56e775c56a | ||
|
|
c7723ba0b0 | ||
|
|
1adb63ac74 | ||
|
|
783aebe5eb | ||
|
|
2d153a72c1 | ||
|
|
078ee54edf | ||
|
|
2d5acfc0bc | ||
|
|
b0190f6a65 | ||
|
|
0a3bc1c667 | ||
|
|
aff02885de | ||
|
|
965a25ba84 | ||
|
|
f7389b70aa | ||
|
|
efdb4b02c6 | ||
|
|
59a253af37 | ||
|
|
9b11f576fe | ||
|
|
fa5a23e0df | ||
|
|
5daa16ab53 | ||
|
|
774c3dbd38 | ||
|
|
7d033e1c0e | ||
|
|
fca86be077 | ||
|
|
a30d8cfa2f | ||
|
|
52717ae486 | ||
|
|
0f09cca0e3 | ||
|
|
9541fc1033 | ||
|
|
16357a9bc7 |
153
CHANGELOG.md
@@ -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)
|
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)
|
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.7-rc.3...v0.12.7)
|
||||||
|
|||||||
@@ -5,7 +5,10 @@
|
|||||||
"integrations_ui_url": "https://scalar.vector.im/",
|
"integrations_ui_url": "https://scalar.vector.im/",
|
||||||
"integrations_rest_url": "https://scalar.vector.im/api",
|
"integrations_rest_url": "https://scalar.vector.im/api",
|
||||||
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
|
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
|
||||||
"enableLabs": true,
|
"features": {
|
||||||
|
"feature_groups": "labs",
|
||||||
|
"feature_pinning": "labs"
|
||||||
|
},
|
||||||
"default_federate": true,
|
"default_federate": true,
|
||||||
"roomDirectory": {
|
"roomDirectory": {
|
||||||
"servers": [
|
"servers": [
|
||||||
|
|||||||
@@ -28,9 +28,10 @@ function getColorName(hex) {
|
|||||||
|
|
||||||
## Adding new strings
|
## 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.
|
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.
|
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.
|
||||||
3. Add the String to the ``en_EN.json`` file in ``src/i18n/strings`` (respect which repository you are on).
|
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.
|
## Adding variables inside a string.
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "riot-web",
|
"name": "riot-web",
|
||||||
"productName": "Riot",
|
"productName": "Riot",
|
||||||
"main": "src/electron-main.js",
|
"main": "src/electron-main.js",
|
||||||
"version": "0.12.7",
|
"version": "0.13.1",
|
||||||
"description": "A feature-rich client for Matrix.org",
|
"description": "A feature-rich client for Matrix.org",
|
||||||
"author": "Vector Creations Ltd.",
|
"author": "Vector Creations Ltd.",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
"integrations_rest_url": "https://scalar.vector.im/api",
|
"integrations_rest_url": "https://scalar.vector.im/api",
|
||||||
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
|
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
|
||||||
"welcomeUserId": "@riot-bot:matrix.org",
|
"welcomeUserId": "@riot-bot:matrix.org",
|
||||||
"enableLabs": true,
|
|
||||||
"roomDirectory": {
|
"roomDirectory": {
|
||||||
"servers": [
|
"servers": [
|
||||||
"matrix.org"
|
"matrix.org"
|
||||||
|
|||||||
9512
package-lock.json
generated
Normal file
12
package.json
@@ -2,7 +2,7 @@
|
|||||||
"name": "riot-web",
|
"name": "riot-web",
|
||||||
"productName": "Riot",
|
"productName": "Riot",
|
||||||
"main": "electron_app/src/electron-main.js",
|
"main": "electron_app/src/electron-main.js",
|
||||||
"version": "0.12.7",
|
"version": "0.13.1",
|
||||||
"description": "A feature-rich client for Matrix.org",
|
"description": "A feature-rich client for Matrix.org",
|
||||||
"author": "Vector Creations Ltd.",
|
"author": "Vector Creations Ltd.",
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -28,6 +28,8 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"reskindex": "reskindex -h src/header",
|
"reskindex": "reskindex -h src/header",
|
||||||
"reskindex:watch": "reskindex -h src/header -w",
|
"reskindex:watch": "reskindex -h src/header -w",
|
||||||
|
"i18n": "matrix-gen-i18n",
|
||||||
|
"prunei18n": "matrix-prune-i18n",
|
||||||
"build:res": "node scripts/copy-res.js",
|
"build:res": "node scripts/copy-res.js",
|
||||||
"build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js",
|
"build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js",
|
||||||
"build:compile": "npm run reskindex && babel --source-maps -d lib src",
|
"build:compile": "npm run reskindex && babel --source-maps -d lib src",
|
||||||
@@ -66,8 +68,8 @@
|
|||||||
"gfm.css": "^1.1.1",
|
"gfm.css": "^1.1.1",
|
||||||
"highlight.js": "^9.0.0",
|
"highlight.js": "^9.0.0",
|
||||||
"linkifyjs": "^2.1.3",
|
"linkifyjs": "^2.1.3",
|
||||||
"matrix-js-sdk": "0.8.5",
|
"matrix-js-sdk": "0.9.1",
|
||||||
"matrix-react-sdk": "0.10.7",
|
"matrix-react-sdk": "0.11.1",
|
||||||
"modernizr": "^3.1.0",
|
"modernizr": "^3.1.0",
|
||||||
"pako": "^1.0.5",
|
"pako": "^1.0.5",
|
||||||
"prop-types": "^15.5.10",
|
"prop-types": "^15.5.10",
|
||||||
@@ -110,7 +112,7 @@
|
|||||||
"eslint-config-google": "^0.7.1",
|
"eslint-config-google": "^0.7.1",
|
||||||
"eslint-plugin-babel": "^4.1.1",
|
"eslint-plugin-babel": "^4.1.1",
|
||||||
"eslint-plugin-flowtype": "^2.30.0",
|
"eslint-plugin-flowtype": "^2.30.0",
|
||||||
"eslint-plugin-react": "^6.9.0",
|
"eslint-plugin-react": "^7.4.0",
|
||||||
"expect": "^1.16.0",
|
"expect": "^1.16.0",
|
||||||
"fs-extra": "^0.30.0",
|
"fs-extra": "^0.30.0",
|
||||||
"html-webpack-plugin": "^2.24.0",
|
"html-webpack-plugin": "^2.24.0",
|
||||||
@@ -130,7 +132,7 @@
|
|||||||
"minimist": "^1.2.0",
|
"minimist": "^1.2.0",
|
||||||
"mkdirp": "^0.5.1",
|
"mkdirp": "^0.5.1",
|
||||||
"mocha": "^2.4.5",
|
"mocha": "^2.4.5",
|
||||||
"parallelshell": "^1.2.0",
|
"parallelshell": "^3.0.2",
|
||||||
"postcss-extend": "^1.0.5",
|
"postcss-extend": "^1.0.5",
|
||||||
"postcss-import": "^9.0.0",
|
"postcss-import": "^9.0.0",
|
||||||
"postcss-loader": "^1.2.2",
|
"postcss-loader": "^1.2.2",
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ const INCLUDE_LANGS = [
|
|||||||
{'value': 'pt_BR', 'label': 'Português do Brasil'},
|
{'value': 'pt_BR', 'label': 'Português do Brasil'},
|
||||||
{'value': 'ru', 'label': 'Русский'},
|
{'value': 'ru', 'label': 'Русский'},
|
||||||
{'value': 'sv', 'label': 'Svenska'},
|
{'value': 'sv', 'label': 'Svenska'},
|
||||||
|
{'value': 'sk', 'label': 'Slovenčina'},
|
||||||
{'value': 'th', 'label': 'ไทย'},
|
{'value': 'th', 'label': 'ไทย'},
|
||||||
{'value': 'te', 'label': 'తెలుగు'},
|
{'value': 'te', 'label': 'తెలుగు'},
|
||||||
{'value': 'tr', 'label': 'Türk'},
|
{'value': 'tr', 'label': 'Türk'},
|
||||||
|
|||||||
@@ -170,9 +170,6 @@ module.exports = React.createClass({
|
|||||||
const GroupsButton = sdk.getComponent('elements.GroupsButton');
|
const GroupsButton = sdk.getComponent('elements.GroupsButton');
|
||||||
const SettingsButton = sdk.getComponent('elements.SettingsButton');
|
const SettingsButton = sdk.getComponent('elements.SettingsButton');
|
||||||
|
|
||||||
const groupsButton = UserSettingsStore.isFeatureEnabled('feature_groups') ?
|
|
||||||
<GroupsButton tooltip={true} /> : null;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mx_BottomLeftMenu">
|
<div className="mx_BottomLeftMenu">
|
||||||
<div className="mx_BottomLeftMenu_options">
|
<div className="mx_BottomLeftMenu_options">
|
||||||
@@ -186,12 +183,12 @@ module.exports = React.createClass({
|
|||||||
<div ref={this._collectCreateRoomButton}>
|
<div ref={this._collectCreateRoomButton}>
|
||||||
<CreateRoomButton tooltip={true} />
|
<CreateRoomButton tooltip={true} />
|
||||||
</div>
|
</div>
|
||||||
{ groupsButton }
|
<GroupsButton tooltip={true} />
|
||||||
<span className="mx_BottomLeftMenu_settings">
|
<span className="mx_BottomLeftMenu_settings">
|
||||||
<SettingsButton tooltip={true} />
|
<SettingsButton tooltip={true} />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ limitations under the License.
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { DragDropContext } from 'react-dnd';
|
import { DragDropContext } from 'react-dnd';
|
||||||
import HTML5Backend from 'react-dnd-html5-backend';
|
import HTML5Backend from 'react-dnd-html5-backend';
|
||||||
|
import classNames from 'classnames';
|
||||||
import KeyCode from 'matrix-react-sdk/lib/KeyCode';
|
import KeyCode from 'matrix-react-sdk/lib/KeyCode';
|
||||||
import sdk from 'matrix-react-sdk';
|
import sdk from 'matrix-react-sdk';
|
||||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
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.
|
// We just need to update if any of these things change.
|
||||||
if (
|
if (
|
||||||
this.props.collapsed !== nextProps.collapsed ||
|
this.props.collapsed !== nextProps.collapsed ||
|
||||||
this.props.opacity !== nextProps.opacity
|
this.props.disabled !== nextProps.disabled
|
||||||
) {
|
) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -176,14 +177,16 @@ var LeftPanel = React.createClass({
|
|||||||
topBox = <SearchBox collapsed={ this.props.collapsed } onSearch={ this.onSearch } />;
|
topBox = <SearchBox collapsed={ this.props.collapsed } onSearch={ this.onSearch } />;
|
||||||
}
|
}
|
||||||
|
|
||||||
let classes = "mx_LeftPanel mx_fadable";
|
let classes = classNames(
|
||||||
if (this.props.collapsed) {
|
"mx_LeftPanel", "mx_fadable",
|
||||||
classes += " collapsed";
|
{
|
||||||
}
|
"collapsed": this.props.collapsed,
|
||||||
|
"mx_fadable_faded": this.props.disabled,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<aside className={classes} style={{ opacity: this.props.opacity }}
|
<aside className={classes} onKeyDown={ this._onKeyDown } onFocus={ this._onFocus } onBlur={ this._onBlur }>
|
||||||
onKeyDown={ this._onKeyDown } onFocus={ this._onFocus } onBlur={ this._onBlur }>
|
|
||||||
{ topBox }
|
{ topBox }
|
||||||
<CallPreview ConferenceHandler={VectorConferenceHandler} />
|
<CallPreview ConferenceHandler={VectorConferenceHandler} />
|
||||||
<RoomList
|
<RoomList
|
||||||
|
|||||||
@@ -18,14 +18,16 @@ limitations under the License.
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
import classNames from 'classnames';
|
||||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||||
import sdk from 'matrix-react-sdk';
|
import sdk from 'matrix-react-sdk';
|
||||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
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 Analytics from 'matrix-react-sdk/lib/Analytics';
|
||||||
import rate_limited_func from 'matrix-react-sdk/lib/ratelimitedfunc';
|
import rate_limited_func from 'matrix-react-sdk/lib/ratelimitedfunc';
|
||||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||||
import { showGroupInviteDialog, showGroupAddRoomDialog } from 'matrix-react-sdk/lib/GroupAddressPicker';
|
import { showGroupInviteDialog, showGroupAddRoomDialog } from 'matrix-react-sdk/lib/GroupAddressPicker';
|
||||||
|
import GroupStoreCache from 'matrix-react-sdk/lib/stores/GroupStoreCache';
|
||||||
|
|
||||||
class HeaderButton extends React.Component {
|
class HeaderButton extends React.Component {
|
||||||
constructor() {
|
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
|
collapsed: React.PropTypes.bool, // currently unused property to request for a minimized view of the panel
|
||||||
},
|
},
|
||||||
|
|
||||||
|
contextTypes: {
|
||||||
|
matrixClient: PropTypes.instanceOf(MatrixClient),
|
||||||
|
},
|
||||||
|
|
||||||
Phase: {
|
Phase: {
|
||||||
RoomMemberList: 'RoomMemberList',
|
RoomMemberList: 'RoomMemberList',
|
||||||
GroupMemberList: 'GroupMemberList',
|
GroupMemberList: 'GroupMemberList',
|
||||||
GroupRoomList: 'GroupRoomList',
|
GroupRoomList: 'GroupRoomList',
|
||||||
|
GroupRoomInfo: 'GroupRoomInfo',
|
||||||
FilePanel: 'FilePanel',
|
FilePanel: 'FilePanel',
|
||||||
NotificationPanel: 'NotificationPanel',
|
NotificationPanel: 'NotificationPanel',
|
||||||
RoomMemberInfo: 'RoomMemberInfo',
|
RoomMemberInfo: 'RoomMemberInfo',
|
||||||
@@ -92,29 +99,53 @@ module.exports = React.createClass({
|
|||||||
|
|
||||||
componentWillMount: function() {
|
componentWillMount: function() {
|
||||||
this.dispatcherRef = dis.register(this.onAction);
|
this.dispatcherRef = dis.register(this.onAction);
|
||||||
const cli = MatrixClientPeg.get();
|
const cli = this.context.matrixClient;
|
||||||
cli.on("RoomState.members", this.onRoomStateMember);
|
cli.on("RoomState.members", this.onRoomStateMember);
|
||||||
|
this._initGroupStore(this.props.groupId);
|
||||||
},
|
},
|
||||||
|
|
||||||
componentWillUnmount: function() {
|
componentWillUnmount: function() {
|
||||||
dis.unregister(this.dispatcherRef);
|
dis.unregister(this.dispatcherRef);
|
||||||
if (MatrixClientPeg.get()) {
|
if (this.context.matrixClient) {
|
||||||
MatrixClientPeg.get().removeListener("RoomState.members", this.onRoomStateMember);
|
this.context.matrixClient.removeListener("RoomState.members", this.onRoomStateMember);
|
||||||
}
|
}
|
||||||
|
this._unregisterGroupStore();
|
||||||
},
|
},
|
||||||
|
|
||||||
getInitialState: function() {
|
getInitialState: function() {
|
||||||
if (this.props.groupId) {
|
return {
|
||||||
return {
|
phase: this.props.groupId ? this.Phase.GroupMemberList : this.Phase.RoomMemberList,
|
||||||
phase: this.Phase.GroupMemberList,
|
isUserPrivilegedInGroup: null,
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
phase: this.Phase.RoomMemberList,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
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() {
|
onCollapseClick: function() {
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'hide_right_panel',
|
action: 'hide_right_panel',
|
||||||
@@ -122,7 +153,7 @@ module.exports = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
onInviteButtonClick: function() {
|
onInviteButtonClick: function() {
|
||||||
if (MatrixClientPeg.get().isGuest()) {
|
if (this.context.matrixClient.isGuest()) {
|
||||||
dis.dispatch({action: 'view_set_mxid'});
|
dis.dispatch({action: 'view_set_mxid'});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -176,7 +207,6 @@ module.exports = React.createClass({
|
|||||||
} else if (this.props.groupId) {
|
} else if (this.props.groupId) {
|
||||||
this.setState({
|
this.setState({
|
||||||
phase: this.Phase.GroupMemberList,
|
phase: this.Phase.GroupMemberList,
|
||||||
groupId: payload.groupId,
|
|
||||||
member: payload.member,
|
member: payload.member,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -184,13 +214,20 @@ module.exports = React.createClass({
|
|||||||
} else if (payload.action === "view_group") {
|
} else if (payload.action === "view_group") {
|
||||||
this.setState({
|
this.setState({
|
||||||
phase: this.Phase.GroupMemberList,
|
phase: this.Phase.GroupMemberList,
|
||||||
groupId: payload.groupId,
|
|
||||||
member: null,
|
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") {
|
} else if (payload.action === "view_group_user") {
|
||||||
this.setState({
|
this.setState({
|
||||||
phase: this.Phase.GroupMemberInfo,
|
phase: this.Phase.GroupMemberInfo,
|
||||||
groupId: payload.groupId,
|
|
||||||
member: payload.member,
|
member: payload.member,
|
||||||
});
|
});
|
||||||
} else if (payload.action === "view_room") {
|
} else if (payload.action === "view_room") {
|
||||||
@@ -213,6 +250,7 @@ module.exports = React.createClass({
|
|||||||
const GroupMemberList = sdk.getComponent('groups.GroupMemberList');
|
const GroupMemberList = sdk.getComponent('groups.GroupMemberList');
|
||||||
const GroupMemberInfo = sdk.getComponent('groups.GroupMemberInfo');
|
const GroupMemberInfo = sdk.getComponent('groups.GroupMemberInfo');
|
||||||
const GroupRoomList = sdk.getComponent('groups.GroupRoomList');
|
const GroupRoomList = sdk.getComponent('groups.GroupRoomList');
|
||||||
|
const GroupRoomInfo = sdk.getComponent('groups.GroupRoomInfo');
|
||||||
|
|
||||||
const TintableSvg = sdk.getComponent("elements.TintableSvg");
|
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)
|
if ((this.state.phase == this.Phase.RoomMemberList || this.state.phase === this.Phase.RoomMemberInfo)
|
||||||
&& this.props.roomId
|
&& this.props.roomId
|
||||||
) {
|
) {
|
||||||
const cli = MatrixClientPeg.get();
|
const cli = this.context.matrixClient;
|
||||||
const room = cli.getRoom(this.props.roomId);
|
const room = cli.getRoom(this.props.roomId);
|
||||||
let userIsInRoom;
|
let userIsInRoom;
|
||||||
if (room) {
|
if (room) {
|
||||||
membersBadge = room.getJoinedMembers().length;
|
membersBadge = room.getJoinedMembers().length;
|
||||||
userIsInRoom = room.hasMembershipState(
|
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 = [];
|
let headerButtons = [];
|
||||||
if (this.props.roomId) {
|
if (this.props.roomId) {
|
||||||
headerButtons = [
|
headerButtons = [
|
||||||
@@ -266,12 +309,12 @@ module.exports = React.createClass({
|
|||||||
} else if (this.props.groupId) {
|
} else if (this.props.groupId) {
|
||||||
headerButtons = [
|
headerButtons = [
|
||||||
<HeaderButton key="_groupMembersButton" title={_t('Members')} iconSrc="img/icons-people.svg"
|
<HeaderButton key="_groupMembersButton" title={_t('Members')} iconSrc="img/icons-people.svg"
|
||||||
isHighlighted={this.state.phase === this.Phase.GroupMemberList}
|
isHighlighted={isPhaseGroup}
|
||||||
clickPhase={this.Phase.GroupMemberList}
|
clickPhase={this.Phase.GroupMemberList}
|
||||||
analytics={['Right Panel', 'Group Member List Button', 'click']}
|
analytics={['Right Panel', 'Group Member List Button', 'click']}
|
||||||
/>,
|
/>,
|
||||||
<HeaderButton key="_roomsButton" title={_t('Rooms')} iconSrc="img/icons-room.svg"
|
<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}
|
clickPhase={this.Phase.GroupRoomList}
|
||||||
analytics={['Right Panel', 'Group Room List Button', 'click']}
|
analytics={['Right Panel', 'Group Room List Button', 'click']}
|
||||||
/>,
|
/>,
|
||||||
@@ -306,6 +349,11 @@ module.exports = React.createClass({
|
|||||||
groupMember={this.state.member}
|
groupMember={this.state.member}
|
||||||
groupId={this.props.groupId}
|
groupId={this.props.groupId}
|
||||||
key={this.state.member.user_id} />;
|
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) {
|
} else if (this.state.phase == this.Phase.NotificationPanel) {
|
||||||
panel = <NotificationPanel />;
|
panel = <NotificationPanel />;
|
||||||
} else if (this.state.phase == this.Phase.FilePanel) {
|
} else if (this.state.phase == this.Phase.FilePanel) {
|
||||||
@@ -317,31 +365,34 @@ module.exports = React.createClass({
|
|||||||
panel = <div className="mx_RightPanel_blank"></div>;
|
panel = <div className="mx_RightPanel_blank"></div>;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.props.groupId) {
|
if (this.props.groupId && this.state.isUserPrivilegedInGroup) {
|
||||||
inviteGroup = this.state.phase === this.Phase.GroupMemberList ? (
|
inviteGroup = isPhaseGroup ? (
|
||||||
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
||||||
<div className="mx_RightPanel_icon" >
|
<div className="mx_RightPanel_icon" >
|
||||||
<TintableSvg src="img/icon-invite-people.svg" width="35" height="35" />
|
<TintableSvg src="img/icon-invite-people.svg" width="35" height="35" />
|
||||||
</div>
|
</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>
|
||||||
) : (
|
) : (
|
||||||
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
||||||
<div className="mx_RightPanel_icon" >
|
<div className="mx_RightPanel_icon" >
|
||||||
<TintableSvg src="img/icons-room-add.svg" width="35" height="35" />
|
<TintableSvg src="img/icons-room-add.svg" width="35" height="35" />
|
||||||
</div>
|
</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>
|
</AccessibleButton>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let classes = "mx_RightPanel mx_fadable";
|
let classes = classNames(
|
||||||
if (this.props.collapsed) {
|
"mx_RightPanel", "mx_fadable",
|
||||||
classes += " collapsed";
|
{
|
||||||
}
|
"collapsed": this.props.collapsed,
|
||||||
|
"mx_fadable_faded": this.props.disabled,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<aside className={classes} style={{ opacity: this.props.opacity }}>
|
<aside className={classes}>
|
||||||
<div className="mx_RightPanel_header">
|
<div className="mx_RightPanel_header">
|
||||||
<div className="mx_RightPanel_headerButtonGroup">
|
<div className="mx_RightPanel_headerButtonGroup">
|
||||||
{headerButtons}
|
{headerButtons}
|
||||||
|
|||||||
@@ -89,17 +89,17 @@ module.exports = React.createClass({
|
|||||||
});
|
});
|
||||||
|
|
||||||
// dis.dispatch({
|
// dis.dispatch({
|
||||||
// action: 'ui_opacity',
|
// action: 'panel_disable',
|
||||||
// sideOpacity: 0.3,
|
// sideDisabled: true,
|
||||||
// middleOpacity: 0.3,
|
// middleDisabled: true,
|
||||||
// });
|
// });
|
||||||
},
|
},
|
||||||
|
|
||||||
componentWillUnmount: function() {
|
componentWillUnmount: function() {
|
||||||
// dis.dispatch({
|
// dis.dispatch({
|
||||||
// action: 'ui_opacity',
|
// action: 'panel_disable',
|
||||||
// sideOpacity: 1.0,
|
// sideDisabled: false,
|
||||||
// middleOpacity: 1.0,
|
// middleDisabled: false,
|
||||||
// });
|
// });
|
||||||
if (this.filterTimeout) {
|
if (this.filterTimeout) {
|
||||||
clearTimeout(this.filterTimeout);
|
clearTimeout(this.filterTimeout);
|
||||||
@@ -409,7 +409,7 @@ module.exports = React.createClass({
|
|||||||
|
|
||||||
perms = null;
|
perms = null;
|
||||||
if (guestRead || guestJoin) {
|
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 || '';
|
var topic = rooms[i].topic || '';
|
||||||
|
|||||||
@@ -246,10 +246,14 @@ var RoomSubList = React.createClass({
|
|||||||
roomNotificationCount: function(truncateAt) {
|
roomNotificationCount: function(truncateAt) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
if (this.props.isInvite) {
|
||||||
|
return [0, true];
|
||||||
|
}
|
||||||
|
|
||||||
return this.props.list.reduce(function(result, room, index) {
|
return this.props.list.reduce(function(result, room, index) {
|
||||||
if (truncateAt === undefined || index >= truncateAt) {
|
if (truncateAt === undefined || index >= truncateAt) {
|
||||||
var roomNotifState = RoomNotifs.getRoomNotifsState(room.roomId);
|
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();
|
var notificationCount = room.getUnreadNotificationCount();
|
||||||
|
|
||||||
const notifBadges = notificationCount > 0 && self._shouldShowNotifBadge(roomNotifState);
|
const notifBadges = notificationCount > 0 && self._shouldShowNotifBadge(roomNotifState);
|
||||||
@@ -394,7 +398,8 @@ var RoomSubList = React.createClass({
|
|||||||
var subListNotifCount = subListNotifications[0];
|
var subListNotifCount = subListNotifications[0];
|
||||||
var subListNotifHighlight = subListNotifications[1];
|
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({
|
var chevronClasses = classNames({
|
||||||
'mx_RoomSubList_chevron': true,
|
'mx_RoomSubList_chevron': true,
|
||||||
|
|||||||
@@ -43,26 +43,40 @@ module.exports = React.createClass({
|
|||||||
getInitialState: function() {
|
getInitialState: function() {
|
||||||
return {
|
return {
|
||||||
canRedact: false,
|
canRedact: false,
|
||||||
|
canPin: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
componentWillMount: function() {
|
componentWillMount: function() {
|
||||||
MatrixClientPeg.get().on('RoomMember.powerLevel', this._checkCanRedact);
|
MatrixClientPeg.get().on('RoomMember.powerLevel', this._checkPermissions);
|
||||||
this._checkCanRedact();
|
this._checkPermissions();
|
||||||
},
|
},
|
||||||
|
|
||||||
componentWillUnmount: function() {
|
componentWillUnmount: function() {
|
||||||
const cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
if (cli) {
|
if (cli) {
|
||||||
cli.removeListener('RoomMember.powerLevel', this._checkCanRedact);
|
cli.removeListener('RoomMember.powerLevel', this._checkPermissions);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_checkCanRedact: function() {
|
_checkPermissions: function() {
|
||||||
const cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
const room = cli.getRoom(this.props.mxEvent.getRoomId());
|
const room = cli.getRoom(this.props.mxEvent.getRoomId());
|
||||||
|
|
||||||
const canRedact = room.currentState.maySendRedactionForEvent(this.props.mxEvent, cli.credentials.userId);
|
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() {
|
onResendClick: function() {
|
||||||
@@ -122,6 +136,28 @@ module.exports = React.createClass({
|
|||||||
this.closeMenu();
|
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() {
|
closeMenu: function() {
|
||||||
if (this.props.onFinished) this.props.onFinished();
|
if (this.props.onFinished) this.props.onFinished();
|
||||||
},
|
},
|
||||||
@@ -147,6 +183,7 @@ module.exports = React.createClass({
|
|||||||
let redactButton;
|
let redactButton;
|
||||||
let cancelButton;
|
let cancelButton;
|
||||||
let forwardButton;
|
let forwardButton;
|
||||||
|
let pinButton;
|
||||||
let viewSourceButton;
|
let viewSourceButton;
|
||||||
let viewClearSourceButton;
|
let viewClearSourceButton;
|
||||||
let unhidePreviewButton;
|
let unhidePreviewButton;
|
||||||
@@ -186,6 +223,14 @@ module.exports = React.createClass({
|
|||||||
{ _t('Forward Message') }
|
{ _t('Forward Message') }
|
||||||
</div>
|
</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}
|
{redactButton}
|
||||||
{cancelButton}
|
{cancelButton}
|
||||||
{forwardButton}
|
{forwardButton}
|
||||||
|
{pinButton}
|
||||||
{viewSourceButton}
|
{viewSourceButton}
|
||||||
{viewClearSourceButton}
|
{viewClearSourceButton}
|
||||||
{unhidePreviewButton}
|
{unhidePreviewButton}
|
||||||
|
|||||||
@@ -15,35 +15,24 @@ limitations under the License.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
import sdk from 'matrix-react-sdk';
|
import sdk from 'matrix-react-sdk';
|
||||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||||
|
|
||||||
class SendCustomEvent extends React.Component {
|
class DevtoolsComponent extends React.Component {
|
||||||
static propTypes = {
|
static contextTypes = {
|
||||||
roomId: React.PropTypes.string.isRequired,
|
roomId: PropTypes.string.isRequired,
|
||||||
onBack: React.PropTypes.func.isRequired,
|
|
||||||
|
|
||||||
eventType: React.PropTypes.string.isRequired,
|
|
||||||
evContent: React.PropTypes.string.isRequired,
|
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
static defaultProps = {
|
class GenericEditor extends DevtoolsComponent {
|
||||||
eventType: '',
|
// static propTypes = {onBack: PropTypes.func.isRequired};
|
||||||
evContent: '{\n\n}',
|
|
||||||
};
|
|
||||||
|
|
||||||
constructor(props, context) {
|
constructor(props, context) {
|
||||||
super(props, context);
|
super(props, context);
|
||||||
this._send = this._send.bind(this);
|
|
||||||
this.onBack = this.onBack.bind(this);
|
|
||||||
this._onChange = this._onChange.bind(this);
|
this._onChange = this._onChange.bind(this);
|
||||||
|
this.onBack = this.onBack.bind(this);
|
||||||
this.state = {
|
|
||||||
message: null,
|
|
||||||
input_eventType: this.props.eventType,
|
|
||||||
input_evContent: this.props.evContent,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onBack() {
|
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() {
|
_buttons() {
|
||||||
return <div className="mx_Dialog_buttons">
|
return <div className="mx_Dialog_buttons">
|
||||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
<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>;
|
</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) {
|
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() {
|
async _send() {
|
||||||
if (this.state.input_eventType === '') {
|
if (this.state.eventType === '') {
|
||||||
this.setState({ message: _t('You must specify an event type!') });
|
this.setState({ message: _t('You must specify an event type!') });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let message;
|
let message;
|
||||||
try {
|
try {
|
||||||
const content = JSON.parse(this.state.input_evContent);
|
const content = JSON.parse(this.state.evContent);
|
||||||
await this.send(content);
|
await this.send(content);
|
||||||
message = _t('Event sent!');
|
message = _t('Event sent!');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -82,107 +120,188 @@ class SendCustomEvent extends React.Component {
|
|||||||
this.setState({ message });
|
this.setState({ message });
|
||||||
}
|
}
|
||||||
|
|
||||||
_additionalFields() {
|
render() {
|
||||||
return <div/>;
|
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) {
|
send(content) {
|
||||||
this.setState({[`input_${e.target.id}`]: e.target.value});
|
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() {
|
render() {
|
||||||
if (this.state.message) {
|
if (this.state.message) {
|
||||||
return <div>
|
return <div>
|
||||||
<div className="mx_Dialog_content">
|
<div className="mx_Dialog_content">
|
||||||
{this.state.message}
|
{ this.state.message }
|
||||||
</div>
|
</div>
|
||||||
{this._buttons()}
|
{ this._buttons() }
|
||||||
</div>;
|
</div>;
|
||||||
}
|
}
|
||||||
|
|
||||||
return <div>
|
return <div>
|
||||||
<div className="mx_Dialog_content">
|
<div className="mx_Dialog_content">
|
||||||
{this._additionalFields()}
|
{ this.textInput('eventType', _t('Event Type')) }
|
||||||
<div className="mx_TextInputDialog_label">
|
<br />
|
||||||
<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>
|
|
||||||
|
|
||||||
<div className="mx_TextInputDialog_label">
|
<div className="mx_UserSettings_profileLabelCell">
|
||||||
<label htmlFor="evContent"> { _t('Event Content') } </label>
|
<label htmlFor="evContent"> { _t('Event Content') } </label>
|
||||||
</div>
|
</div>
|
||||||
<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>
|
||||||
</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>;
|
</div>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SendCustomStateEvent extends SendCustomEvent {
|
class FilteredList extends React.Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
roomId: React.PropTypes.string.isRequired,
|
children: PropTypes.any,
|
||||||
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: '',
|
|
||||||
};
|
};
|
||||||
|
|
||||||
constructor(props, context) {
|
constructor(props, context) {
|
||||||
super(props, context);
|
super(props, context);
|
||||||
this.state['input_stateKey'] = this.props.stateKey;
|
this.onQuery = this.onQuery.bind(this);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
query: '',
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
send(content) {
|
onQuery(ev) {
|
||||||
const cli = MatrixClientPeg.get();
|
this.setState({ query: ev.target.value });
|
||||||
return cli.sendStateEvent(this.props.roomId, this.state.input_eventType, content, this.state.input_stateKey);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_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>
|
return <div>
|
||||||
<div className="mx_TextInputDialog_label">
|
<input size="64"
|
||||||
<label htmlFor="stateKey"> { _t('State Key') } </label>
|
onChange={this.onQuery}
|
||||||
</div>
|
value={this.state.query}
|
||||||
<div>
|
placeholder={_t('Filter results')}
|
||||||
<input id="stateKey" onChange={this._onChange} value={this.state.input_stateKey} className="mx_TextInputDialog_input" size="64" />
|
className="mx_TextInputDialog_input mx_DevTools_RoomStateExplorer_query" />
|
||||||
</div>
|
{ this.filterChildren() }
|
||||||
</div>;
|
</div>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class RoomStateExplorer extends React.Component {
|
class RoomStateExplorer extends DevtoolsComponent {
|
||||||
|
static getLabel() { return _t('Explore Room State'); }
|
||||||
|
|
||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
setMode: React.PropTypes.func.isRequired,
|
onBack: PropTypes.func.isRequired,
|
||||||
roomId: React.PropTypes.string.isRequired,
|
|
||||||
onBack: React.PropTypes.func.isRequired,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
constructor(props, context) {
|
constructor(props, context) {
|
||||||
super(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.roomStateEvents = room.currentState.events;
|
||||||
|
|
||||||
this.onBack = this.onBack.bind(this);
|
this.onBack = this.onBack.bind(this);
|
||||||
this.editEv = this.editEv.bind(this);
|
this.editEv = this.editEv.bind(this);
|
||||||
this.onQuery = this.onQuery.bind(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
state = {
|
this.state = {
|
||||||
query: '',
|
eventType: null,
|
||||||
eventType: null,
|
event: null,
|
||||||
event: null,
|
editing: false,
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
browseEventType(eventType) {
|
browseEventType(eventType) {
|
||||||
return () => {
|
return () => {
|
||||||
@@ -197,7 +316,9 @@ class RoomStateExplorer extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onBack() {
|
onBack() {
|
||||||
if (this.state.event) {
|
if (this.state.editing) {
|
||||||
|
this.setState({ editing: false });
|
||||||
|
} else if (this.state.event) {
|
||||||
this.setState({ event: null });
|
this.setState({ event: null });
|
||||||
} else if (this.state.eventType) {
|
} else if (this.state.eventType) {
|
||||||
this.setState({ eventType: null });
|
this.setState({ eventType: null });
|
||||||
@@ -207,23 +328,22 @@ class RoomStateExplorer extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
editEv() {
|
editEv() {
|
||||||
const ev = this.state.event;
|
this.setState({ editing: true });
|
||||||
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 });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
if (this.state.event) {
|
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">
|
return <div className="mx_ViewSource">
|
||||||
<div className="mx_Dialog_content">
|
<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>
|
||||||
<div className="mx_Dialog_buttons">
|
<div className="mx_Dialog_buttons">
|
||||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||||
@@ -234,11 +354,9 @@ class RoomStateExplorer extends React.Component {
|
|||||||
|
|
||||||
const rows = [];
|
const rows = [];
|
||||||
|
|
||||||
|
const classes = 'mx_DevTools_RoomStateExplorer_button';
|
||||||
if (this.state.eventType === null) {
|
if (this.state.eventType === null) {
|
||||||
Object.keys(this.roomStateEvents).forEach((evType) => {
|
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 stateGroup = this.roomStateEvents[evType];
|
||||||
const stateKeys = Object.keys(stateGroup);
|
const stateKeys = Object.keys(stateGroup);
|
||||||
|
|
||||||
@@ -249,7 +367,7 @@ class RoomStateExplorer extends React.Component {
|
|||||||
onClickFn = this.onViewSourceClick(stateGroup[stateKeys[0]]);
|
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 }
|
{ evType }
|
||||||
</button>);
|
</button>);
|
||||||
});
|
});
|
||||||
@@ -257,12 +375,8 @@ class RoomStateExplorer extends React.Component {
|
|||||||
const evType = this.state.eventType;
|
const evType = this.state.eventType;
|
||||||
const stateGroup = this.roomStateEvents[evType];
|
const stateGroup = this.roomStateEvents[evType];
|
||||||
Object.keys(stateGroup).forEach((stateKey) => {
|
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];
|
const ev = stateGroup[stateKey];
|
||||||
rows.push(<button className="mx_DevTools_RoomStateExplorer_button" key={stateKey}
|
rows.push(<button className={classes} key={stateKey} onClick={this.onViewSourceClick(ev)}>
|
||||||
onClick={this.onViewSourceClick(ev)}>
|
|
||||||
{ stateKey }
|
{ stateKey }
|
||||||
</button>);
|
</button>);
|
||||||
});
|
});
|
||||||
@@ -270,8 +384,9 @@ class RoomStateExplorer extends React.Component {
|
|||||||
|
|
||||||
return <div>
|
return <div>
|
||||||
<div className="mx_Dialog_content">
|
<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} />
|
<FilteredList>
|
||||||
{rows}
|
{ rows }
|
||||||
|
</FilteredList>
|
||||||
</div>
|
</div>
|
||||||
<div className="mx_Dialog_buttons">
|
<div className="mx_Dialog_buttons">
|
||||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
<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 = {
|
static propTypes = {
|
||||||
roomId: React.PropTypes.string.isRequired,
|
onBack: PropTypes.func.isRequired,
|
||||||
onFinished: React.PropTypes.func.isRequired,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
state = {
|
constructor(props, context) {
|
||||||
mode: null,
|
super(props, context);
|
||||||
modeArgs: {},
|
|
||||||
|
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) {
|
constructor(props, context) {
|
||||||
super(props, context);
|
super(props, context);
|
||||||
this.onBack = this.onBack.bind(this);
|
this.onBack = this.onBack.bind(this);
|
||||||
this.setMode = this.setMode.bind(this);
|
|
||||||
this.onCancel = this.onCancel.bind(this);
|
this.onCancel = this.onCancel.bind(this);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
mode: null,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
this._unmounted = true;
|
this._unmounted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getChildContext() {
|
||||||
|
return { roomId: this.props.roomId };
|
||||||
|
}
|
||||||
|
|
||||||
_setMode(mode) {
|
_setMode(mode) {
|
||||||
return () => {
|
return () => {
|
||||||
this.setMode(mode);
|
this.setState({ mode });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
setMode(mode, modeArgs={}) {
|
|
||||||
this.setState({ mode, modeArgs });
|
|
||||||
}
|
|
||||||
|
|
||||||
onBack() {
|
onBack() {
|
||||||
this.setState({ mode: null });
|
if (this.prevMode) {
|
||||||
|
this.setState({ mode: this.prevMode });
|
||||||
|
this.prevMode = null;
|
||||||
|
} else {
|
||||||
|
this.setState({ mode: null });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onCancel() {
|
onCancel() {
|
||||||
@@ -324,14 +556,27 @@ export default class DevtoolsDialog extends React.Component {
|
|||||||
let body;
|
let body;
|
||||||
|
|
||||||
if (this.state.mode) {
|
if (this.state.mode) {
|
||||||
body =
|
|
||||||
<this.state.mode {...this.props} {...this.state.modeArgs} onBack={this.onBack} setMode={this.setMode} />;
|
|
||||||
} else {
|
|
||||||
body = <div>
|
body = <div>
|
||||||
<div className="mx_Dialog_content">
|
<div className="mx_DevTools_label_left">{ this.state.mode.getLabel() }</div>
|
||||||
<button onClick={this._setMode(SendCustomEvent)}>{ _t('Send Custom Event') }</button>
|
<div className="mx_DevTools_label_right">Room ID: { this.props.roomId }</div>
|
||||||
<button onClick={this._setMode(SendCustomStateEvent)}>{ _t('Send Custom State Event') }</button>
|
<div className="mx_DevTools_label_bottom" />
|
||||||
<button onClick={this._setMode(RoomStateExplorer)}>{ _t('Explore Room State') }</button>
|
<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>
|
||||||
<div className="mx_Dialog_buttons">
|
<div className="mx_Dialog_buttons">
|
||||||
<button onClick={this.onCancel}>{ _t('Cancel') }</button>
|
<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');
|
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
|
||||||
return (
|
return (
|
||||||
<BaseDialog className="mx_QuestionDialog" onFinished={this.props.onFinished} title={_t('Developer Tools')}>
|
<BaseDialog className="mx_QuestionDialog" onFinished={this.props.onFinished} title={_t('Developer Tools')}>
|
||||||
<div>Room ID: { this.props.roomId }</div>
|
|
||||||
{ body }
|
{ body }
|
||||||
</BaseDialog>
|
</BaseDialog>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -150,7 +150,21 @@ export default class NetworkDropdown extends React.Component {
|
|||||||
if (this.props.protocols) {
|
if (this.props.protocols) {
|
||||||
for (const proto of Object.keys(this.props.protocols)) {
|
for (const proto of Object.keys(this.props.protocols)) {
|
||||||
if (!this.props.protocols[proto].instances) continue;
|
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;
|
if (!instance.instance_id) continue;
|
||||||
options.push(this._makeMenuOption(server, instance, false));
|
options.push(this._makeMenuOption(server, instance, false));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,8 +150,16 @@ module.exports = React.createClass({
|
|||||||
|
|
||||||
var eventMeta;
|
var eventMeta;
|
||||||
if(showEventMeta) {
|
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">
|
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>);
|
</div>);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
33
src/components/views/elements/InlineSpinner.js
Normal 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>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2015, 2016 OpenMarket Ltd
|
Copyright 2015, 2016 OpenMarket Ltd
|
||||||
|
Copyright 2017 New Vector Ltd
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with 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') }
|
{ _t('Custom Server Options') }
|
||||||
</div>
|
</div>
|
||||||
<div className="mx_Dialog_content">
|
<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>
|
||||||
<div className="mx_Dialog_buttons">
|
<div className="mx_Dialog_buttons">
|
||||||
<button onClick={this.props.onFinished} autoFocus={true}>
|
<button onClick={this.props.onFinished} autoFocus={true}>
|
||||||
|
|||||||
@@ -19,13 +19,16 @@ limitations under the License.
|
|||||||
var React = require('react');
|
var React = require('react');
|
||||||
var ReactDOM = require('react-dom');
|
var ReactDOM = require('react-dom');
|
||||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||||
|
import classNames from 'classnames';
|
||||||
|
|
||||||
module.exports = React.createClass({
|
module.exports = React.createClass({
|
||||||
displayName: 'RoomTooltip',
|
displayName: 'RoomTooltip',
|
||||||
|
|
||||||
propTypes: {
|
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,
|
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
|
// The tooltip is derived from either the room name or a label
|
||||||
room: React.PropTypes.object,
|
room: React.PropTypes.object,
|
||||||
label: React.PropTypes.string,
|
label: React.PropTypes.string,
|
||||||
@@ -69,8 +72,12 @@ module.exports = React.createClass({
|
|||||||
style.left = 6 + parent.getBoundingClientRect().right + window.pageXOffset;
|
style.left = 6 + parent.getBoundingClientRect().right + window.pageXOffset;
|
||||||
style.display = "block";
|
style.display = "block";
|
||||||
|
|
||||||
|
const tooltipClasses = classNames(
|
||||||
|
"mx_RoomTooltip", this.props.tooltipClassName,
|
||||||
|
);
|
||||||
|
|
||||||
var tooltip = (
|
var tooltip = (
|
||||||
<div className="mx_RoomTooltip" style={style} >
|
<div className={tooltipClasses} style={style} >
|
||||||
<div className="mx_RoomTooltip_chevron"></div>
|
<div className="mx_RoomTooltip_chevron"></div>
|
||||||
{ label }
|
{ label }
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,16 +14,19 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict';
|
import React from 'react';
|
||||||
var React = require('react');
|
|
||||||
import { _t, _tJsx } from 'matrix-react-sdk/lib/languageHandler';
|
|
||||||
import Promise from 'bluebird';
|
import Promise from 'bluebird';
|
||||||
var sdk = require('matrix-react-sdk');
|
import sdk from 'matrix-react-sdk';
|
||||||
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
import { _t, _tJsx } from 'matrix-react-sdk/lib/languageHandler';
|
||||||
var UserSettingsStore = require('matrix-react-sdk/lib/UserSettingsStore');
|
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||||
var Modal = require('matrix-react-sdk/lib/Modal');
|
import UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
|
||||||
|
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||||
var notifications = require('../../../notifications');
|
import {
|
||||||
|
NotificationUtils,
|
||||||
|
VectorPushRulesDefinitions,
|
||||||
|
PushRuleVectorState,
|
||||||
|
ContentRules
|
||||||
|
} from '../../../notifications';
|
||||||
|
|
||||||
// TODO: this "view" component still has far too much application logic in it,
|
// TODO: this "view" component still has far too much application logic in it,
|
||||||
// which should be factored out to other files.
|
// 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
|
// TODO: this component also does a lot of direct poking into this.state, which
|
||||||
// is VERY NAUGHTY.
|
// 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.
|
* 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 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.
|
* 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.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_one_to_one": ".m.rule.room_one_to_one",
|
||||||
"im.vector.rule.room_message": ".m.rule.message",
|
"im.vector.rule.room_message": ".m.rule.message",
|
||||||
@@ -51,7 +50,7 @@ var LEGACY_RULES = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function portLegacyActions(actions) {
|
function portLegacyActions(actions) {
|
||||||
var decoded = NotificationUtils.decodeActions(actions);
|
const decoded = NotificationUtils.decodeActions(actions);
|
||||||
if (decoded !== null) {
|
if (decoded !== null) {
|
||||||
return NotificationUtils.encodeActions(decoded);
|
return NotificationUtils.encodeActions(decoded);
|
||||||
} else {
|
} else {
|
||||||
@@ -62,7 +61,7 @@ function portLegacyActions(actions) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = React.createClass({
|
module.exports = React.createClass({
|
||||||
displayName: 'Notififications',
|
displayName: 'Notifications',
|
||||||
|
|
||||||
phases: {
|
phases: {
|
||||||
LOADING: "LOADING", // The component is loading or sending data to the hs
|
LOADING: "LOADING", // The component is loading or sending data to the hs
|
||||||
@@ -102,7 +101,7 @@ module.exports = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
onEnableNotificationsChange: function(event) {
|
onEnableNotificationsChange: function(event) {
|
||||||
var self = this;
|
const self = this;
|
||||||
this.setState({
|
this.setState({
|
||||||
phase: this.phases.LOADING
|
phase: this.phases.LOADING
|
||||||
});
|
});
|
||||||
@@ -116,21 +115,26 @@ module.exports = React.createClass({
|
|||||||
UserSettingsStore.setEnableNotifications(event.target.checked);
|
UserSettingsStore.setEnableNotifications(event.target.checked);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onEnableDesktopNotificationBodyChange: function(event) {
|
||||||
|
UserSettingsStore.setEnableNotificationBody(event.target.checked);
|
||||||
|
this.forceUpdate();
|
||||||
|
},
|
||||||
|
|
||||||
onEnableEmailNotificationsChange: function(address, event) {
|
onEnableEmailNotificationsChange: function(address, event) {
|
||||||
var emailPusherPromise;
|
let emailPusherPromise;
|
||||||
if (event.target.checked) {
|
if (event.target.checked) {
|
||||||
var data = {}
|
const data = {}
|
||||||
data['brand'] = this.props.brand || 'Riot';
|
data['brand'] = this.props.brand || 'Riot';
|
||||||
emailPusherPromise = UserSettingsStore.addEmailPusher(address, data);
|
emailPusherPromise = UserSettingsStore.addEmailPusher(address, data);
|
||||||
} else {
|
} else {
|
||||||
var emailPusher = UserSettingsStore.getEmailPusher(this.state.pushers, address);
|
const emailPusher = UserSettingsStore.getEmailPusher(this.state.pushers, address);
|
||||||
emailPusher.kind = null;
|
emailPusher.kind = null;
|
||||||
emailPusherPromise = MatrixClientPeg.get().setPusher(emailPusher);
|
emailPusherPromise = MatrixClientPeg.get().setPusher(emailPusher);
|
||||||
}
|
}
|
||||||
emailPusherPromise.done(() => {
|
emailPusherPromise.done(() => {
|
||||||
this._refreshFromServer();
|
this._refreshFromServer();
|
||||||
}, (error) => {
|
}, (error) => {
|
||||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||||
Modal.createTrackedDialog('Error saving email notification preferences', '', ErrorDialog, {
|
Modal.createTrackedDialog('Error saving email notification preferences', '', ErrorDialog, {
|
||||||
title: _t('Error saving email notification preferences'),
|
title: _t('Error saving email notification preferences'),
|
||||||
description: _t('An error occurred whilst saving your 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) {
|
onNotifStateButtonClicked: function(event) {
|
||||||
// FIXME: use .bind() rather than className metadata here surely
|
// FIXME: use .bind() rather than className metadata here surely
|
||||||
var vectorRuleId = event.target.className.split("-")[0];
|
const vectorRuleId = event.target.className.split("-")[0];
|
||||||
var newPushRuleVectorState = event.target.className.split("-")[1];
|
const newPushRuleVectorState = event.target.className.split("-")[1];
|
||||||
|
|
||||||
if ("_keywords" === vectorRuleId) {
|
if ("_keywords" === vectorRuleId) {
|
||||||
this._setKeywordsPushRuleVectorState(newPushRuleVectorState)
|
this._setKeywordsPushRuleVectorState(newPushRuleVectorState)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var rule = this.getRule(vectorRuleId);
|
const rule = this.getRule(vectorRuleId);
|
||||||
if (rule) {
|
if (rule) {
|
||||||
this._setPushRuleVectorState(rule, newPushRuleVectorState);
|
this._setPushRuleVectorState(rule, newPushRuleVectorState);
|
||||||
}
|
}
|
||||||
@@ -155,12 +159,12 @@ module.exports = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
onKeywordsClicked: function(event) {
|
onKeywordsClicked: function(event) {
|
||||||
var self = this;
|
const self = this;
|
||||||
|
|
||||||
// Compute the keywords list to display
|
// Compute the keywords list to display
|
||||||
var keywords = [];
|
let keywords = [];
|
||||||
for (var i in this.state.vectorContentRules.rules) {
|
for (let i in this.state.vectorContentRules.rules) {
|
||||||
var rule = this.state.vectorContentRules.rules[i];
|
const rule = this.state.vectorContentRules.rules[i];
|
||||||
keywords.push(rule.pattern);
|
keywords.push(rule.pattern);
|
||||||
}
|
}
|
||||||
if (keywords.length) {
|
if (keywords.length) {
|
||||||
@@ -174,7 +178,7 @@ module.exports = React.createClass({
|
|||||||
keywords = "";
|
keywords = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
var TextInputDialog = sdk.getComponent("dialogs.TextInputDialog");
|
const TextInputDialog = sdk.getComponent("dialogs.TextInputDialog");
|
||||||
Modal.createTrackedDialog('Keywords Dialog', '', TextInputDialog, {
|
Modal.createTrackedDialog('Keywords Dialog', '', TextInputDialog, {
|
||||||
title: _t('Keywords'),
|
title: _t('Keywords'),
|
||||||
description: _t('Enter keywords separated by a comma:'),
|
description: _t('Enter keywords separated by a comma:'),
|
||||||
@@ -183,8 +187,8 @@ module.exports = React.createClass({
|
|||||||
onFinished: function onFinished(should_leave, newValue) {
|
onFinished: function onFinished(should_leave, newValue) {
|
||||||
|
|
||||||
if (should_leave && newValue !== keywords) {
|
if (should_leave && newValue !== keywords) {
|
||||||
var newKeywords = newValue.split(',');
|
let newKeywords = newValue.split(',');
|
||||||
for (var i in newKeywords) {
|
for (let i in newKeywords) {
|
||||||
newKeywords[i] = newKeywords[i].trim();
|
newKeywords[i] = newKeywords[i].trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,8 +207,8 @@ module.exports = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
getRule: function(vectorRuleId) {
|
getRule: function(vectorRuleId) {
|
||||||
for (var i in this.state.vectorPushRules) {
|
for (let i in this.state.vectorPushRules) {
|
||||||
var rule = this.state.vectorPushRules[i];
|
const rule = this.state.vectorPushRules[i];
|
||||||
if (rule.vectorRuleId === vectorRuleId) {
|
if (rule.vectorRuleId === vectorRuleId) {
|
||||||
return rule;
|
return rule;
|
||||||
}
|
}
|
||||||
@@ -218,13 +222,13 @@ module.exports = React.createClass({
|
|||||||
phase: this.phases.LOADING
|
phase: this.phases.LOADING
|
||||||
});
|
});
|
||||||
|
|
||||||
var self = this;
|
const self = this;
|
||||||
var cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
var deferreds = [];
|
const deferreds = [];
|
||||||
var ruleDefinition = VectorPushRulesDefinitions[rule.vectorRuleId];
|
const ruleDefinition = VectorPushRulesDefinitions[rule.vectorRuleId];
|
||||||
|
|
||||||
if (rule.rule) {
|
if (rule.rule) {
|
||||||
var actions = ruleDefinition.vectorStateToActions[newPushRuleVectorState];
|
const actions = ruleDefinition.vectorStateToActions[newPushRuleVectorState];
|
||||||
|
|
||||||
if (!actions) {
|
if (!actions) {
|
||||||
// The new state corresponds to disabling the rule.
|
// The new state corresponds to disabling the rule.
|
||||||
@@ -239,7 +243,7 @@ module.exports = React.createClass({
|
|||||||
Promise.all(deferreds).done(function() {
|
Promise.all(deferreds).done(function() {
|
||||||
self._refreshFromServer();
|
self._refreshFromServer();
|
||||||
}, function(error) {
|
}, function(error) {
|
||||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||||
console.error("Failed to change settings: " + error);
|
console.error("Failed to change settings: " + error);
|
||||||
Modal.createTrackedDialog('Failed to change settings', '', ErrorDialog, {
|
Modal.createTrackedDialog('Failed to change settings', '', ErrorDialog, {
|
||||||
title: _t('Failed to change settings'),
|
title: _t('Failed to change settings'),
|
||||||
@@ -257,19 +261,19 @@ module.exports = React.createClass({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var self = this;
|
const self = this;
|
||||||
var cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
phase: this.phases.LOADING
|
phase: this.phases.LOADING
|
||||||
});
|
});
|
||||||
|
|
||||||
// Update all rules in self.state.vectorContentRules
|
// Update all rules in self.state.vectorContentRules
|
||||||
var deferreds = [];
|
const deferreds = [];
|
||||||
for (var i in this.state.vectorContentRules.rules) {
|
for (let i in this.state.vectorContentRules.rules) {
|
||||||
var rule = this.state.vectorContentRules.rules[i];
|
const rule = this.state.vectorContentRules.rules[i];
|
||||||
|
|
||||||
var enabled, actions;
|
let enabled, actions;
|
||||||
switch (newPushRuleVectorState) {
|
switch (newPushRuleVectorState) {
|
||||||
case PushRuleVectorState.ON:
|
case PushRuleVectorState.ON:
|
||||||
if (rule.actions.length !== 1) {
|
if (rule.actions.length !== 1) {
|
||||||
@@ -309,7 +313,7 @@ module.exports = React.createClass({
|
|||||||
Promise.all(deferreds).done(function(resps) {
|
Promise.all(deferreds).done(function(resps) {
|
||||||
self._refreshFromServer();
|
self._refreshFromServer();
|
||||||
}, function(error) {
|
}, function(error) {
|
||||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||||
console.error("Can't update user notification settings: " + error);
|
console.error("Can't update user notification settings: " + error);
|
||||||
Modal.createTrackedDialog('Can\'t update user notifcation settings', '', ErrorDialog, {
|
Modal.createTrackedDialog('Can\'t update user notifcation settings', '', ErrorDialog, {
|
||||||
title: _t('Can\'t update user notification settings'),
|
title: _t('Can\'t update user notification settings'),
|
||||||
@@ -324,14 +328,14 @@ module.exports = React.createClass({
|
|||||||
phase: this.phases.LOADING
|
phase: this.phases.LOADING
|
||||||
});
|
});
|
||||||
|
|
||||||
var self = this;
|
const self = this;
|
||||||
var cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
var removeDeferreds = [];
|
const removeDeferreds = [];
|
||||||
|
|
||||||
// Remove per-word push rules of keywords that are no more in the list
|
// Remove per-word push rules of keywords that are no more in the list
|
||||||
var vectorContentRulesPatterns = [];
|
const vectorContentRulesPatterns = [];
|
||||||
for (var i in self.state.vectorContentRules.rules) {
|
for (let i in self.state.vectorContentRules.rules) {
|
||||||
var rule = self.state.vectorContentRules.rules[i];
|
const rule = self.state.vectorContentRules.rules[i];
|
||||||
|
|
||||||
vectorContentRulesPatterns.push(rule.pattern);
|
vectorContentRulesPatterns.push(rule.pattern);
|
||||||
|
|
||||||
@@ -342,16 +346,16 @@ module.exports = React.createClass({
|
|||||||
|
|
||||||
// If the keyword is part of `externalContentRules`, remove the rule
|
// If the keyword is part of `externalContentRules`, remove the rule
|
||||||
// before recreating it in the right Vector path
|
// before recreating it in the right Vector path
|
||||||
for (var i in self.state.externalContentRules) {
|
for (let i in self.state.externalContentRules) {
|
||||||
var rule = self.state.externalContentRules[i];
|
const rule = self.state.externalContentRules[i];
|
||||||
|
|
||||||
if (newKeywords.indexOf(rule.pattern) >= 0) {
|
if (newKeywords.indexOf(rule.pattern) >= 0) {
|
||||||
removeDeferreds.push(cli.deletePushRule('global', rule.kind, rule.rule_id));
|
removeDeferreds.push(cli.deletePushRule('global', rule.kind, rule.rule_id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var onError = function(error) {
|
const onError = function(error) {
|
||||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||||
console.error("Failed to update keywords: " + error);
|
console.error("Failed to update keywords: " + error);
|
||||||
Modal.createTrackedDialog('Failed to update keywords', '', ErrorDialog, {
|
Modal.createTrackedDialog('Failed to update keywords', '', ErrorDialog, {
|
||||||
title: _t('Failed to update keywords'),
|
title: _t('Failed to update keywords'),
|
||||||
@@ -362,9 +366,9 @@ module.exports = React.createClass({
|
|||||||
|
|
||||||
// Then, add the new ones
|
// Then, add the new ones
|
||||||
Promise.all(removeDeferreds).done(function(resps) {
|
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) {
|
if (pushRuleVectorStateKind === PushRuleVectorState.OFF) {
|
||||||
// When the current global keywords rule is OFF, we need to look at
|
// When the current global keywords rule is OFF, we need to look at
|
||||||
// the flavor of rules in 'vectorContentRules' to apply the same actions
|
// the flavor of rules in 'vectorContentRules' to apply the same actions
|
||||||
@@ -379,8 +383,8 @@ module.exports = React.createClass({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i in newKeywords) {
|
for (let i in newKeywords) {
|
||||||
var keyword = newKeywords[i];
|
const keyword = newKeywords[i];
|
||||||
|
|
||||||
if (vectorContentRulesPatterns.indexOf(keyword) < 0) {
|
if (vectorContentRulesPatterns.indexOf(keyword) < 0) {
|
||||||
if (self.state.vectorContentRules.vectorState !== PushRuleVectorState.OFF) {
|
if (self.state.vectorContentRules.vectorState !== PushRuleVectorState.OFF) {
|
||||||
@@ -407,31 +411,31 @@ module.exports = React.createClass({
|
|||||||
|
|
||||||
// Create a push rule but disabled
|
// Create a push rule but disabled
|
||||||
_addDisabledPushRule: function(scope, kind, ruleId, body) {
|
_addDisabledPushRule: function(scope, kind, ruleId, body) {
|
||||||
var cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
return cli.addPushRule(scope, kind, ruleId, body).then(function() {
|
return cli.addPushRule(scope, kind, ruleId, body).then(() =>
|
||||||
return cli.setPushRuleEnabled(scope, kind, ruleId, false);
|
cli.setPushRuleEnabled(scope, kind, ruleId, false)
|
||||||
});
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
// Check if any legacy im.vector rules need to be ported to the new API
|
// Check if any legacy im.vector rules need to be ported to the new API
|
||||||
// for overriding the actions of default rules.
|
// for overriding the actions of default rules.
|
||||||
_portRulesToNewAPI: function(rulesets) {
|
_portRulesToNewAPI: function(rulesets) {
|
||||||
var self = this;
|
const self = this;
|
||||||
var needsUpdate = [];
|
const needsUpdate = [];
|
||||||
var cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
|
|
||||||
for (var kind in rulesets.global) {
|
for (let kind in rulesets.global) {
|
||||||
var ruleset = rulesets.global[kind];
|
const ruleset = rulesets.global[kind];
|
||||||
for (var i = 0; i < ruleset.length; ++i) {
|
for (let i = 0; i < ruleset.length; ++i) {
|
||||||
var rule = ruleset[i];
|
const rule = ruleset[i];
|
||||||
if (rule.rule_id in LEGACY_RULES) {
|
if (rule.rule_id in LEGACY_RULES) {
|
||||||
console.log("Porting legacy rule", rule);
|
console.log("Porting legacy rule", rule);
|
||||||
needsUpdate.push( function(kind, rule) {
|
needsUpdate.push( function(kind, rule) {
|
||||||
return cli.setPushRuleActions(
|
return cli.setPushRuleActions(
|
||||||
'global', kind, LEGACY_RULES[rule.rule_id], portLegacyActions(rule.actions)
|
'global', kind, LEGACY_RULES[rule.rule_id], portLegacyActions(rule.actions)
|
||||||
).then( function() {
|
).then(() =>
|
||||||
return cli.deletePushRule('global', kind, rule.rule_id);
|
cli.deletePushRule('global', kind, rule.rule_id)
|
||||||
}).catch( (e) => {
|
).catch( (e) => {
|
||||||
console.warn(`Error when porting legacy rule: ${e}`);
|
console.warn(`Error when porting legacy rule: ${e}`);
|
||||||
});
|
});
|
||||||
}(kind, rule));
|
}(kind, rule));
|
||||||
@@ -442,9 +446,9 @@ module.exports = React.createClass({
|
|||||||
if (needsUpdate.length > 0) {
|
if (needsUpdate.length > 0) {
|
||||||
// If some of the rules need to be ported then wait for the porting
|
// If some of the rules need to be ported then wait for the porting
|
||||||
// to happen and then fetch the rules again.
|
// to happen and then fetch the rules again.
|
||||||
return Promise.all(needsUpdate).then( function() {
|
return Promise.all(needsUpdate).then(() =>
|
||||||
return cli.getPushRules();
|
cli.getPushRules()
|
||||||
});
|
);
|
||||||
} else {
|
} else {
|
||||||
// Otherwise return the rules that we already have.
|
// Otherwise return the rules that we already have.
|
||||||
return rulesets;
|
return rulesets;
|
||||||
@@ -452,15 +456,14 @@ module.exports = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_refreshFromServer: function() {
|
_refreshFromServer: function() {
|
||||||
var self = this;
|
const self = this;
|
||||||
var pushRulesPromise = MatrixClientPeg.get().getPushRules().then(self._portRulesToNewAPI).then(function(rulesets) {
|
const pushRulesPromise = MatrixClientPeg.get().getPushRules().then(self._portRulesToNewAPI).then(function(rulesets) {
|
||||||
//console.log("resolving pushRulesPromise");
|
|
||||||
|
|
||||||
/// XXX seriously? wtf is this?
|
/// XXX seriously? wtf is this?
|
||||||
MatrixClientPeg.get().pushRules = rulesets;
|
MatrixClientPeg.get().pushRules = rulesets;
|
||||||
|
|
||||||
// Get homeserver default rules and triage them by categories
|
// Get homeserver default rules and triage them by categories
|
||||||
var rule_categories = {
|
const rule_categories = {
|
||||||
// The master rule (all notifications disabling)
|
// The master rule (all notifications disabling)
|
||||||
'.m.rule.master': 'master',
|
'.m.rule.master': 'master',
|
||||||
|
|
||||||
@@ -478,12 +481,12 @@ module.exports = React.createClass({
|
|||||||
};
|
};
|
||||||
|
|
||||||
// HS default rules
|
// HS default rules
|
||||||
var defaultRules = {master: [], vector: {}, others: []};
|
const defaultRules = {master: [], vector: {}, others: []};
|
||||||
|
|
||||||
for (var kind in rulesets.global) {
|
for (let kind in rulesets.global) {
|
||||||
for (var i = 0; i < Object.keys(rulesets.global[kind]).length; ++i) {
|
for (let i = 0; i < Object.keys(rulesets.global[kind]).length; ++i) {
|
||||||
var r = rulesets.global[kind][i];
|
const r = rulesets.global[kind][i];
|
||||||
var cat = rule_categories[r.rule_id];
|
const cat = rule_categories[r.rule_id];
|
||||||
r.kind = kind;
|
r.kind = kind;
|
||||||
|
|
||||||
if (r.rule_id[0] === '.') {
|
if (r.rule_id[0] === '.') {
|
||||||
@@ -506,7 +509,7 @@ module.exports = React.createClass({
|
|||||||
}
|
}
|
||||||
|
|
||||||
// parse the keyword rules into our state
|
// parse the keyword rules into our state
|
||||||
var contentRules = ContentRules.parseContentRules(rulesets);
|
const contentRules = ContentRules.parseContentRules(rulesets);
|
||||||
self.state.vectorContentRules = {
|
self.state.vectorContentRules = {
|
||||||
vectorState: contentRules.vectorState,
|
vectorState: contentRules.vectorState,
|
||||||
rules: contentRules.rules,
|
rules: contentRules.rules,
|
||||||
@@ -517,7 +520,7 @@ module.exports = React.createClass({
|
|||||||
self.state.vectorPushRules = [];
|
self.state.vectorPushRules = [];
|
||||||
self.state.externalPushRules = [];
|
self.state.externalPushRules = [];
|
||||||
|
|
||||||
var vectorRuleIds = [
|
const vectorRuleIds = [
|
||||||
'.m.rule.contains_display_name',
|
'.m.rule.contains_display_name',
|
||||||
'.m.rule.contains_user_name',
|
'.m.rule.contains_user_name',
|
||||||
'_keywords',
|
'_keywords',
|
||||||
@@ -528,8 +531,8 @@ module.exports = React.createClass({
|
|||||||
'.m.rule.call',
|
'.m.rule.call',
|
||||||
'.m.rule.suppress_notices'
|
'.m.rule.suppress_notices'
|
||||||
];
|
];
|
||||||
for (var i in vectorRuleIds) {
|
for (let i in vectorRuleIds) {
|
||||||
var vectorRuleId = vectorRuleIds[i];
|
const vectorRuleId = vectorRuleIds[i];
|
||||||
|
|
||||||
if (vectorRuleId === '_keywords') {
|
if (vectorRuleId === '_keywords') {
|
||||||
// keywords needs a special handling
|
// keywords needs a special handling
|
||||||
@@ -541,9 +544,8 @@ module.exports = React.createClass({
|
|||||||
<span>
|
<span>
|
||||||
{ _tJsx('Messages containing <span>keywords</span>',
|
{ _tJsx('Messages containing <span>keywords</span>',
|
||||||
/<span>(.*?)<\/span>/,
|
/<span>(.*?)<\/span>/,
|
||||||
(sub) => {
|
(sub) =>
|
||||||
return <span className="mx_UserNotifSettings_keywords" onClick={ self.onKeywordsClicked }>{sub}</span>;
|
<span className="mx_UserNotifSettings_keywords" onClick={ self.onKeywordsClicked }>{sub}</span>
|
||||||
}
|
|
||||||
)}
|
)}
|
||||||
</span>
|
</span>
|
||||||
),
|
),
|
||||||
@@ -551,10 +553,10 @@ module.exports = React.createClass({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var ruleDefinition = VectorPushRulesDefinitions[vectorRuleId];
|
const ruleDefinition = VectorPushRulesDefinitions[vectorRuleId];
|
||||||
var rule = defaultRules.vector[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);
|
//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
|
// Build the rules not managed by Vector UI
|
||||||
var otherRulesDescriptions = {
|
const otherRulesDescriptions = {
|
||||||
'.m.rule.message': _t('Notify for all other messages/rooms'),
|
'.m.rule.message': _t('Notify for all other messages/rooms'),
|
||||||
'.m.rule.fallback': _t('Notify me for anything else'),
|
'.m.rule.fallback': _t('Notify me for anything else'),
|
||||||
};
|
};
|
||||||
|
|
||||||
for (var i in defaultRules.others) {
|
for (let i in defaultRules.others) {
|
||||||
var rule = defaultRules.others[i];
|
const rule = defaultRules.others[i];
|
||||||
var ruleDescription = otherRulesDescriptions[rule.rule_id];
|
const ruleDescription = otherRulesDescriptions[rule.rule_id];
|
||||||
|
|
||||||
// Show enabled default rules that was modified by the user
|
// Show enabled default rules that was modified by the user
|
||||||
if (ruleDescription && rule.enabled && !rule.default) {
|
if (ruleDescription && rule.enabled && !rule.default) {
|
||||||
@@ -591,8 +593,7 @@ module.exports = React.createClass({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var pushersPromise = MatrixClientPeg.get().getPushers().then(function(resp) {
|
const pushersPromise = MatrixClientPeg.get().getPushers().then(function(resp) {
|
||||||
//console.log("resolving pushersPromise");
|
|
||||||
self.setState({pushers: resp.pushers});
|
self.setState({pushers: resp.pushers});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -618,7 +619,7 @@ module.exports = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_updatePushRuleActions: function(rule, actions, enabled) {
|
_updatePushRuleActions: function(rule, actions, enabled) {
|
||||||
var cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
|
|
||||||
return cli.setPushRuleActions(
|
return cli.setPushRuleActions(
|
||||||
'global', rule.kind, rule.rule_id, actions
|
'global', rule.kind, rule.rule_id, actions
|
||||||
@@ -664,9 +665,9 @@ module.exports = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
renderNotifRulesTableRows: function() {
|
renderNotifRulesTableRows: function() {
|
||||||
var rows = [];
|
const rows = [];
|
||||||
for (var i in this.state.vectorPushRules) {
|
for (let i in this.state.vectorPushRules) {
|
||||||
var rule = this.state.vectorPushRules[i];
|
const rule = this.state.vectorPushRules[i];
|
||||||
//console.log("rendering: " + rule.description + ", " + rule.vectorRuleId + ", " + rule.vectorState);
|
//console.log("rendering: " + rule.description + ", " + rule.vectorRuleId + ", " + rule.vectorState);
|
||||||
rows.push(this.renderNotifRulesTableRow(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() {
|
render: function() {
|
||||||
var self = this;
|
const self = this;
|
||||||
|
|
||||||
var spinner;
|
let spinner;
|
||||||
if (this.state.phase === this.phases.LOADING) {
|
if (this.state.phase === this.phases.LOADING) {
|
||||||
var Loader = sdk.getComponent("elements.Spinner");
|
const Loader = sdk.getComponent("elements.Spinner");
|
||||||
spinner = <Loader />;
|
spinner = <Loader />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let masterPushRuleDiv;
|
||||||
if (this.state.masterPushRule) {
|
if (this.state.masterPushRule) {
|
||||||
var masterPushRuleDiv = (
|
masterPushRuleDiv = (
|
||||||
<div className="mx_UserNotifSettings_tableRow">
|
<div className="mx_UserNotifSettings_tableRow">
|
||||||
<div className="mx_UserNotifSettings_inputCell">
|
<div className="mx_UserNotifSettings_inputCell">
|
||||||
<input id="enableNotifications"
|
<input id="enableNotifications"
|
||||||
ref="enableNotifications"
|
ref="enableNotifications"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
checked={ !this.state.masterPushRule.enabled }
|
checked={ !this.state.masterPushRule.enabled }
|
||||||
onChange={ this.onEnableNotificationsChange } />
|
onChange={ this.onEnableNotificationsChange }
|
||||||
</div>
|
/>
|
||||||
<div className="mx_UserNotifSettings_labelCell">
|
|
||||||
<label htmlFor="enableNotifications">
|
|
||||||
{ _t('Enable notifications for this account') }
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
</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
|
// This only supports the first email address in your profile for now
|
||||||
emailNotificationsRow = this.emailNotificationsRow(
|
emailNotificationsRow = this.emailNotificationsRow(
|
||||||
emailThreepids[0].address,
|
emailThreepids[0].address,
|
||||||
_t('Enable email notifications') + ' (' + emailThreepids[0].address + ')'
|
`${_t('Enable email notifications')} (${emailThreepids[0].address})`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build external push rules
|
// Build external push rules
|
||||||
var externalRules = [];
|
const externalRules = [];
|
||||||
for (var i in this.state.externalPushRules) {
|
for (let i in this.state.externalPushRules) {
|
||||||
var rule = this.state.externalPushRules[i];
|
const rule = this.state.externalPushRules[i];
|
||||||
externalRules.push(<li>{ _t(rule.description) }</li>);
|
externalRules.push(<li>{ _t(rule.description) }</li>);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show keywords not displayed by the vector UI as a single external push rule
|
// Show keywords not displayed by the vector UI as a single external push rule
|
||||||
var externalKeyWords = [];
|
let externalKeywords = [];
|
||||||
for (var i in this.state.externalContentRules) {
|
for (let i in this.state.externalContentRules) {
|
||||||
var rule = this.state.externalContentRules[i];
|
const rule = this.state.externalContentRules[i];
|
||||||
externalKeyWords.push(rule.pattern);
|
externalKeywords.push(rule.pattern);
|
||||||
}
|
}
|
||||||
if (externalKeyWords.length) {
|
if (externalKeywords.length) {
|
||||||
externalKeyWords = externalKeyWords.join(", ");
|
externalKeywords = externalKeywords.join(", ");
|
||||||
externalRules.push(<li>{ _t('Notifications on the following keywords follow rules which can’t be displayed here:') } { externalKeyWords }</li>);
|
externalRules.push(<li>{ _t('Notifications on the following keywords follow rules which can’t be displayed here:') } { externalKeywords }</li>);
|
||||||
}
|
}
|
||||||
|
|
||||||
var devicesSection;
|
let devicesSection;
|
||||||
if (this.state.pushers === undefined) {
|
if (this.state.pushers === undefined) {
|
||||||
devicesSection = <div className="error">{ _t('Unable to fetch notification target list') }</div>
|
devicesSection = <div className="error">{ _t('Unable to fetch notification target list') }</div>
|
||||||
} else if (this.state.pushers.length == 0) {
|
} else if (this.state.pushers.length == 0) {
|
||||||
@@ -773,8 +776,8 @@ module.exports = React.createClass({
|
|||||||
} else {
|
} else {
|
||||||
// TODO: It would be great to be able to delete pushers from here too,
|
// TODO: It would be great to be able to delete pushers from here too,
|
||||||
// and this wouldn't be hard to add.
|
// and this wouldn't be hard to add.
|
||||||
var rows = [];
|
const rows = [];
|
||||||
for (var i = 0; i < this.state.pushers.length; ++i) {
|
for (let i = 0; i < this.state.pushers.length; ++i) {
|
||||||
rows.push(<tr key={ i }>
|
rows.push(<tr key={ i }>
|
||||||
<td>{this.state.pushers[i].app_display_name}</td>
|
<td>{this.state.pushers[i].app_display_name}</td>
|
||||||
<td>{this.state.pushers[i].device_display_name}</td>
|
<td>{this.state.pushers[i].device_display_name}</td>
|
||||||
@@ -793,7 +796,7 @@ module.exports = React.createClass({
|
|||||||
</div>);
|
</div>);
|
||||||
}
|
}
|
||||||
|
|
||||||
var advancedSettings;
|
let advancedSettings;
|
||||||
if (externalRules.length) {
|
if (externalRules.length) {
|
||||||
advancedSettings = (
|
advancedSettings = (
|
||||||
<div>
|
<div>
|
||||||
@@ -831,6 +834,21 @@ module.exports = React.createClass({
|
|||||||
</div>
|
</div>
|
||||||
</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_tableRow">
|
||||||
<div className="mx_UserNotifSettings_inputCell">
|
<div className="mx_UserNotifSettings_inputCell">
|
||||||
<input id="enableDesktopAudioNotifications"
|
<input id="enableDesktopAudioNotifications"
|
||||||
|
|||||||
@@ -59,7 +59,6 @@
|
|||||||
"Permalink": "Пастаянная спасылка",
|
"Permalink": "Пастаянная спасылка",
|
||||||
"powered by Matrix": "працуе на Matrix",
|
"powered by Matrix": "працуе на Matrix",
|
||||||
"Quote": "Цытата",
|
"Quote": "Цытата",
|
||||||
"Redact": "Адрэдагаваць",
|
|
||||||
"Reject": "Адхіліць",
|
"Reject": "Адхіліць",
|
||||||
"Remove %(name)s from the directory?": "Выдаліць %(name)s з каталога?",
|
"Remove %(name)s from the directory?": "Выдаліць %(name)s з каталога?",
|
||||||
"Remove": "Выдалiць",
|
"Remove": "Выдалiць",
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
"Hide panel": "Skrýt panel",
|
"Hide panel": "Skrýt panel",
|
||||||
"I understand the risks and wish to continue": "Rozumím rizikům a přeji si pokračovat",
|
"I understand the risks and wish to continue": "Rozumím rizikům a přeji si pokračovat",
|
||||||
"Keywords": "Klíčová slova",
|
"Keywords": "Klíčová slova",
|
||||||
"Leave": "Opustit",
|
"Leave": "Odejít",
|
||||||
"Loading bug report module": "Nahrává se modul nahlašování chyb",
|
"Loading bug report module": "Nahrává se modul nahlašování chyb",
|
||||||
"Low Priority": "Nízká priorita",
|
"Low Priority": "Nízká priorita",
|
||||||
"Mentions only": "Pouze zmínky",
|
"Mentions only": "Pouze zmínky",
|
||||||
@@ -54,17 +54,17 @@
|
|||||||
"Continue": "Pokračovat",
|
"Continue": "Pokračovat",
|
||||||
"Please set a password!": "Prosím nastavte si heslo!",
|
"Please set a password!": "Prosím nastavte si heslo!",
|
||||||
"You have successfully set a password!": "Úspěšně jste si nastavili 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.",
|
"No update available.": "Není dostupná žádná aktualizace.",
|
||||||
"Downloading update...": "Stahování aktualizace...",
|
"Downloading update...": "Stahování aktualizace...",
|
||||||
"Welcome to Riot.im": "Vítá vás Riot.im",
|
"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 email notifications": "Zapnout upozornění přes e-mail",
|
||||||
"Enable notifications for this account": "Zapnout upozornění na tomto účtu",
|
"Enable notifications for this account": "Zapnout upozornění na tomto účtu",
|
||||||
"#example": "#příklad",
|
"#example": "#příklad",
|
||||||
"Off": "Vypnout",
|
"Off": "Vypnout",
|
||||||
"On": "Zapnout",
|
"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 %(name)s from the directory?": "Odebrat %(name)s z adresáře?",
|
||||||
"Remove": "Odebrat",
|
"Remove": "Odebrat",
|
||||||
"remove %(name)s from the directory.": "odebrat %(name)s z adresáře.",
|
"remove %(name)s from the directory.": "odebrat %(name)s z adresáře.",
|
||||||
@@ -138,7 +138,7 @@
|
|||||||
"Uploading report": "Nahrávám hlášení",
|
"Uploading report": "Nahrávám hlášení",
|
||||||
"View Decrypted Source": "Zobrazit dešifrovaný zdroj",
|
"View Decrypted Source": "Zobrazit dešifrovaný zdroj",
|
||||||
"When I'm invited to a room": "Pokud jsem pozván do místnosti",
|
"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í",
|
"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).",
|
"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.",
|
"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",
|
"Filter results": "Filtrovat výsledky",
|
||||||
"You must specify an event type!": "Musíte určit typ události!",
|
"You must specify an event type!": "Musíte určit typ události!",
|
||||||
"Event sent!": "Událost odeslána!",
|
"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.",
|
"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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,16 +2,13 @@
|
|||||||
"Add an email address above to configure email notifications": "Tilføj en emailadresse ovenfor for at konfigurere e-mail-underretninger",
|
"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.",
|
"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.",
|
"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",
|
"Can't update user notification settings": "Kan ikke opdatere brugermeddelelsesindstillinger",
|
||||||
"Couldn't find a matching Matrix room": "Kunne ikke finde et matchende Matrix-rum",
|
"Couldn't find a matching Matrix room": "Kunne ikke finde et matchende Matrix-rum",
|
||||||
"Custom Server Options": "Brugerdefinerede serverindstillinger",
|
"Custom Server Options": "Brugerdefinerede serverindstillinger",
|
||||||
"delete the alias.": "Slet aliaset.",
|
"delete the alias.": "Slet aliaset.",
|
||||||
"Delete the room alias": "Slet room alias",
|
|
||||||
"Direct Chat": "Personligt Chat",
|
"Direct Chat": "Personligt Chat",
|
||||||
"Directory": "Rum fortegnelse",
|
"Directory": "Rum fortegnelse",
|
||||||
"Dismiss": "Afskedige",
|
"Dismiss": "Afskedige",
|
||||||
"Drop here to": "Drop her til",
|
|
||||||
"Enable audible notifications in web client": "Aktivér hørbare underretninger i webklienten",
|
"Enable audible notifications in web client": "Aktivér hørbare underretninger i webklienten",
|
||||||
"Enable desktop notifications": "Aktivér desktop meddelelser",
|
"Enable desktop notifications": "Aktivér desktop meddelelser",
|
||||||
"Enable email notifications": "Aktivér e-mail-underretninger",
|
"Enable email notifications": "Aktivér e-mail-underretninger",
|
||||||
@@ -21,19 +18,16 @@
|
|||||||
"Error": "Fejl",
|
"Error": "Fejl",
|
||||||
"Error saving email notification preferences": "Fejl ved at gemme e-mail-underretningsindstillinger",
|
"Error saving email notification preferences": "Fejl ved at gemme e-mail-underretningsindstillinger",
|
||||||
"#example": "#eksempel",
|
"#example": "#eksempel",
|
||||||
"Failed to add tag ": "Kunne ikke tilføje tag ",
|
|
||||||
"Failed to change settings": "Kunne ikke ændre indstillinger",
|
"Failed to change settings": "Kunne ikke ændre indstillinger",
|
||||||
"Failed to update keywords": "Kunne ikke opdatere søgeord",
|
"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 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 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",
|
"Failed to set Direct Message status of room": "Kunne ikke indstille direkte beskedstatus for rumet",
|
||||||
"Favourite": "Favorit",
|
"Favourite": "Favorit",
|
||||||
"Fetching third party location failed": "Hentning af tredjeparts placering mislykkedes",
|
"Fetching third party location failed": "Hentning af tredjeparts placering mislykkedes",
|
||||||
"Files": "Filer",
|
"Files": "Filer",
|
||||||
"Filter room names": "Filtrer rumnavne",
|
"Filter room names": "Filtrer rumnavne",
|
||||||
"Forget": "Glem",
|
"Forget": "Glem",
|
||||||
"from the directory": "fra fortegnelsen",
|
|
||||||
"Guests can join": "Gæster kan deltage",
|
"Guests can join": "Gæster kan deltage",
|
||||||
"Invite to this room": "Inviter til dette rum",
|
"Invite to this room": "Inviter til dette rum",
|
||||||
"Keywords": "Søgeord",
|
"Keywords": "Søgeord",
|
||||||
@@ -53,7 +47,6 @@
|
|||||||
"powered by Matrix": "Drevet af Matrix",
|
"powered by Matrix": "Drevet af Matrix",
|
||||||
"Reject": "Afvise",
|
"Reject": "Afvise",
|
||||||
"Remove": "Fjerne",
|
"Remove": "Fjerne",
|
||||||
"remove": "fjerner",
|
|
||||||
"Remove from Directory": "Fjern fra fortegnelse",
|
"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",
|
"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",
|
"Room not found": "Rumet ikke fundet",
|
||||||
|
|||||||
@@ -10,41 +10,34 @@
|
|||||||
"Failed to get protocol list from Home Server": "Fehler beim Abrufen der Protokoll-Liste vom Home-Server",
|
"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",
|
"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",
|
"Directory": "Raum-Verzeichnis",
|
||||||
"#example:": "#beispiel:",
|
|
||||||
"Search for a room": "Nach einem Raum suchen",
|
"Search for a room": "Nach einem Raum suchen",
|
||||||
"No rooms to show": "Keine Räume gefunden",
|
"No rooms to show": "Keine anzeigbaren Räume",
|
||||||
"World readable": "Alle können mitlesen",
|
"World readable": "Lesbar für alle",
|
||||||
"Guests can join": "Gäste können beitreten",
|
"Guests can join": "Gäste können beitreten",
|
||||||
"You are not receiving desktop notifications": "Du erhältst keine Desktop-Benachrichtigungen",
|
"You are not receiving desktop notifications": "Du erhältst keine Desktop-Benachrichtigungen",
|
||||||
"Enable them now": "Aktiviere diese jetzt",
|
"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",
|
"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.",
|
"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",
|
"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",
|
"Couldn't find a matching Matrix room": "Konnte keinen entsprechenden Matrix-Raum finden",
|
||||||
"delete the alias.": "Lösche den Alias.",
|
"delete the alias.": "Lösche den Alias.",
|
||||||
"Delete the room alias": "Lösche den Raum Alias",
|
|
||||||
"Direct Chat": "Direkt-Chat",
|
"Direct Chat": "Direkt-Chat",
|
||||||
"Drop here to": "Hier ablegen",
|
|
||||||
"Enable audible notifications in web client": "Audio-Benachrichtigungen im Web-Client aktivieren",
|
"Enable audible notifications in web client": "Audio-Benachrichtigungen im Web-Client aktivieren",
|
||||||
"Enable desktop notifications": "Desktop-Benachrichtigungen aktivieren",
|
"Enable desktop notifications": "Desktop-Benachrichtigungen aktivieren",
|
||||||
"Enable email notifications": "E-Mail-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:",
|
"Enter keywords separated by a comma:": "Schlüsselwörter kommagetrennt eingeben:",
|
||||||
"Error": "Fehler",
|
"Error": "Fehler",
|
||||||
"Error saving email notification preferences": "Fehler beim Speichern der E-Mail-Benachrichtigungseinstellungen",
|
"Error saving email notification preferences": "Fehler beim Speichern der E-Mail-Benachrichtigungseinstellungen",
|
||||||
"#example": "#Beispiel",
|
"#example": "#Beispiel",
|
||||||
"Failed to add tag ": "Konnte Tag nicht hinzufügen ",
|
|
||||||
"Failed to change settings": "Einstellungen konnten nicht geändert werden",
|
"Failed to change settings": "Einstellungen konnten nicht geändert werden",
|
||||||
"Failed to update keywords": "Schlüsselwörter konnten nicht aktualisiert 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 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",
|
"Failed to set Direct Message status of room": "Konnte den direkten Benachrichtigungsstatus nicht setzen",
|
||||||
"Favourite": "Favorit",
|
"Favourite": "Favorit",
|
||||||
"Fetching third party location failed": "Das Abrufen des Drittanbieterstandorts ist fehlgeschlagen",
|
"Fetching third party location failed": "Das Abrufen des Drittanbieterstandorts ist fehlgeschlagen",
|
||||||
"Forget": "Entfernen",
|
"Forget": "Entfernen",
|
||||||
"from the directory": "aus dem Verzeichnis",
|
|
||||||
"Keywords": "Schlüsselwörter",
|
"Keywords": "Schlüsselwörter",
|
||||||
"Leave": "Verlassen",
|
"Leave": "Verlassen",
|
||||||
"Low Priority": "Niedrige Priorität",
|
"Low Priority": "Niedrige Priorität",
|
||||||
@@ -55,7 +48,6 @@
|
|||||||
"Operation failed": "Aktion fehlgeschlagen",
|
"Operation failed": "Aktion fehlgeschlagen",
|
||||||
"Reject": "Ablehnen",
|
"Reject": "Ablehnen",
|
||||||
"Remove": "Entfernen",
|
"Remove": "Entfernen",
|
||||||
"remove": "Entferner",
|
|
||||||
"Remove from Directory": "Aus dem Raum-Verzeichnis entfernen",
|
"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",
|
"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",
|
"Room not found": "Raum nicht gefunden",
|
||||||
@@ -83,14 +75,13 @@
|
|||||||
"Mute": "Stummschalten",
|
"Mute": "Stummschalten",
|
||||||
"Permalink": "Permanenter Link",
|
"Permalink": "Permanenter Link",
|
||||||
"Quote": "Zitieren",
|
"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?": "Soll der Raum %(name)s aus dem Verzeichnis entfernt werden?",
|
||||||
"remove %(name)s from the directory.": "entferne %(name)s aus dem Verzeichnis.",
|
"remove %(name)s from the directory.": "entferne %(name)s aus dem Verzeichnis.",
|
||||||
"Resend": "Erneut senden",
|
"Resend": "Erneut senden",
|
||||||
"Source URL": "Quell-URL",
|
"Source URL": "Quell-URL",
|
||||||
"Unable to look up room ID from server": "Es ist nicht möglich, die Raum-ID auf dem Server nachzuschlagen",
|
"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",
|
"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 Decrypted Source": "Entschlüsselten Quellcode ansehen",
|
||||||
"View Source": "Quellcode ansehen",
|
"View Source": "Quellcode ansehen",
|
||||||
"You cannot delete this image. (%(code)s)": "Das Bild kann nicht gelöscht werden. (%(code)s)",
|
"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: ",
|
"Failed to send report: ": "Senden des Reports fehlgeschlagen: ",
|
||||||
"Forward Message": "Nachricht weiterleiten",
|
"Forward Message": "Nachricht weiterleiten",
|
||||||
"Hide panel": "Panel verbergen",
|
"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",
|
"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.",
|
"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 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?",
|
"Riot is not supported on mobile web. Install the app?": "Riot wird im mobilen Web nicht unterstützt. App installieren?",
|
||||||
"Search": "Suchen",
|
"Search": "Suchen",
|
||||||
"Search…": "Suchen…",
|
"Search…": "Suchen…",
|
||||||
"Send": "Sende",
|
"Send": "Senden",
|
||||||
"Send logs": "Logdateien übermitteln",
|
"Send logs": "Logdateien übermitteln",
|
||||||
"This Room": "In diesem Raum",
|
"This Room": "In diesem Raum",
|
||||||
"Unavailable": "Nicht verfügbar",
|
"Unavailable": "Nicht verfügbar",
|
||||||
@@ -161,14 +152,13 @@
|
|||||||
"Search the room directory": "Raum-Verzeichnis durchsuchen",
|
"Search the room directory": "Raum-Verzeichnis durchsuchen",
|
||||||
"Chat with Riot Bot": "Mit dem Riot-Bot chatten",
|
"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!",
|
"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!",
|
"Discussion of all things Matrix!": "\"Diskussion über alle Dinge\"-Matrix!",
|
||||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop-Chat",
|
"Riot/Web & Desktop chat": "Riot/Web & Desktop-Chat",
|
||||||
"Riot/iOS & matrix-ios-sdk chat": "Riot-iOS & \"matrix-ios-sdk\"-Chat",
|
"Riot/iOS & matrix-ios-sdk chat": "Riot-iOS & \"matrix-ios-sdk\"-Chat",
|
||||||
"Riot/Android & matrix-android-sdk chat": "Riot-Android & matrix-android-sdk-Chat",
|
"Riot/Android & matrix-android-sdk chat": "Riot-Android & matrix-android-sdk-Chat",
|
||||||
"Matrix technical discussions": "Technische Diskussion über Matrix",
|
"Matrix technical discussions": "Technische Diskussion über Matrix",
|
||||||
"Running Matrix services": "Matrix-Dienste betreiben",
|
"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",
|
"Admin support for Dendrite": "Admin-Unterstützung für Dendrite",
|
||||||
"Announcements about Synapse releases": "Ankündigungen über Synapse-Versionen",
|
"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",
|
"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!",
|
"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?",
|
"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 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",
|
"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.",
|
"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",
|
"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",
|
"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.",
|
"Failed to send custom event.": "Senden des benutzerdefinierten Events fehlgeschlagen.",
|
||||||
"Send Custom Event": "Benutzerdefiniertes Event senden",
|
"Send Custom Event": "Benutzerdefiniertes Event senden",
|
||||||
"Send Custom State Event": "Benutzerdefiniertes Status-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 sent!": "Event gesendet!",
|
||||||
"Event Type": "Event-Typ",
|
"Event Type": "Event-Typ",
|
||||||
"Event Content": "Event-Inhalt",
|
"Event Content": "Event-Inhalt",
|
||||||
"State Key": "Status-Schlüssel",
|
"State Key": "Status-Schlüssel",
|
||||||
"Invite to this group": "In diese Gruppe einladen",
|
|
||||||
"Filter results": "Ergebnisse filtern",
|
"Filter results": "Ergebnisse filtern",
|
||||||
"You must specify an event type!": "Du musst einen Event-Typ spezifizieren!",
|
"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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,6 @@
|
|||||||
"Notify me for anything else": "Ειδοποίηση για οτιδήποτε άλλο",
|
"Notify me for anything else": "Ειδοποίηση για οτιδήποτε άλλο",
|
||||||
"Operation failed": "Η λειτουργία απέτυχε",
|
"Operation failed": "Η λειτουργία απέτυχε",
|
||||||
"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?": "Παρακαλούμε περιγράψτε το σφάλμα. Τι κάνατε; Τι περιμένατε να συμβεί; Τι έγινε τελικά;",
|
||||||
"Redact": "Ανάκληση",
|
|
||||||
"Reject": "Απόρριψη",
|
"Reject": "Απόρριψη",
|
||||||
"Remove": "Αφαίρεση",
|
"Remove": "Αφαίρεση",
|
||||||
"Remove from Directory": "Αφαίρεση από το ευρετήριο",
|
"Remove from Directory": "Αφαίρεση από το ευρετήριο",
|
||||||
|
|||||||
@@ -1,211 +1,219 @@
|
|||||||
{
|
{
|
||||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s",
|
"Riot is not supported on mobile web. Install the app?": "Riot is not supported on mobile web. Install the app?",
|
||||||
"<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.",
|
"Collecting app version information": "Collecting app version information",
|
||||||
"A new version of Riot is available.": "A new version of Riot is available.",
|
"Collecting logs": "Collecting logs",
|
||||||
"Add an email address above to configure email notifications": "Add an email address above to configure email notifications",
|
"Uploading report": "Uploading report",
|
||||||
"Advanced notification settings": "Advanced notification settings",
|
"Waiting for response from server": "Waiting for response from server",
|
||||||
"All messages": "All messages",
|
"Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s",
|
||||||
"All messages (loud)": "All messages (loud)",
|
"Unknown device": "Unknown device",
|
||||||
"All Rooms": "All Rooms",
|
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s",
|
||||||
"All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.",
|
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
||||||
"An error occurred whilst saving your email notification preferences.": "An error occurred whilst saving your email notification preferences.",
|
"Messages containing my display name": "Messages containing my display name",
|
||||||
"Back": "Back",
|
"Messages containing my user name": "Messages containing my user name",
|
||||||
"Bug report sent": "Bug report sent",
|
"Messages in one-to-one chats": "Messages in one-to-one chats",
|
||||||
"Call invitation": "Call invitation",
|
"Messages in group chats": "Messages in group chats",
|
||||||
"Cancel": "Cancel",
|
"When I'm invited to a room": "When I'm invited to a room",
|
||||||
"Cancel Sending": "Cancel Sending",
|
"Call invitation": "Call invitation",
|
||||||
"Can't update user notification settings": "Can't update user notification settings",
|
"Messages sent by bot": "Messages sent by bot",
|
||||||
"Changelog": "Changelog",
|
"Error saving email notification preferences": "Error saving email notification preferences",
|
||||||
"Close": "Close",
|
"An error occurred whilst saving your email notification preferences.": "An error occurred whilst saving your email notification preferences.",
|
||||||
"Collapse panel": "Collapse panel",
|
"Keywords": "Keywords",
|
||||||
"Collecting app version information": "Collecting app version information",
|
"Enter keywords separated by a comma:": "Enter keywords separated by a comma:",
|
||||||
"Collecting logs": "Collecting logs",
|
"OK": "OK",
|
||||||
"Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room",
|
"Failed to change settings": "Failed to change settings",
|
||||||
"Custom Server Options": "Custom Server Options",
|
"Operation failed": "Operation failed",
|
||||||
"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.",
|
"Can't update user notification settings": "Can't update user notification settings",
|
||||||
"delete the alias.": "delete the alias.",
|
"Failed to update keywords": "Failed to update keywords",
|
||||||
"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?",
|
"Messages containing <span>keywords</span>": "Messages containing <span>keywords</span>",
|
||||||
"Describe your problem here.": "Describe your problem here.",
|
"Notify for all other messages/rooms": "Notify for all other messages/rooms",
|
||||||
"Developer Tools": "Developer Tools",
|
"Notify me for anything else": "Notify me for anything else",
|
||||||
"Direct Chat": "Direct Chat",
|
"Enable notifications for this account": "Enable notifications for this account",
|
||||||
"Directory": "Directory",
|
"All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.",
|
||||||
"Dismiss": "Dismiss",
|
"Add an email address above to configure email notifications": "Add an email address above to configure email notifications",
|
||||||
"Download this file": "Download this file",
|
"Enable email notifications": "Enable email notifications",
|
||||||
"Enable audible notifications in web client": "Enable audible notifications in web client",
|
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notifications on the following keywords follow rules which can’t be displayed here:",
|
||||||
"Enable desktop notifications": "Enable desktop notifications",
|
"Unable to fetch notification target list": "Unable to fetch notification target list",
|
||||||
"Enable email notifications": "Enable email notifications",
|
"Notification targets": "Notification targets",
|
||||||
"Enable notifications for this account": "Enable notifications for this account",
|
"Advanced notification settings": "Advanced notification settings",
|
||||||
"Enable them now": "Enable them now",
|
"There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here",
|
||||||
"Enter keywords separated by a comma:": "Enter keywords separated by a comma:",
|
"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",
|
||||||
"Error": "Error",
|
"Enable desktop notifications": "Enable desktop notifications",
|
||||||
"Error saving email notification preferences": "Error saving email notification preferences",
|
"Show message in desktop notification": "Show message in desktop notification",
|
||||||
"#example": "#example",
|
"Enable audible notifications in web client": "Enable audible notifications in web client",
|
||||||
"Expand panel": "Expand panel",
|
"Off": "Off",
|
||||||
"Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room",
|
"On": "On",
|
||||||
"Failed to change settings": "Failed to change settings",
|
"Noisy": "Noisy",
|
||||||
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
|
"Failed to set direct chat tag": "Failed to set direct chat tag",
|
||||||
"Failed to update keywords": "Failed to update keywords",
|
"Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room",
|
||||||
"Failed to get protocol list from Home Server": "Failed to get protocol list from Home Server",
|
"Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room",
|
||||||
"Failed to get public room list": "Failed to get public room list",
|
"Search…": "Search…",
|
||||||
"Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room",
|
"Search": "Search",
|
||||||
"Failed to send custom event.": "Failed to send custom event.",
|
"This Room": "This Room",
|
||||||
"Failed to send report: ": "Failed to send report: ",
|
"All Rooms": "All Rooms",
|
||||||
"Failed to set direct chat tag": "Failed to set direct chat tag",
|
"Sunday": "Sunday",
|
||||||
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
|
"Monday": "Monday",
|
||||||
"Favourite": "Favourite",
|
"Tuesday": "Tuesday",
|
||||||
"Fetching third party location failed": "Fetching third party location failed",
|
"Wednesday": "Wednesday",
|
||||||
"Files": "Files",
|
"Thursday": "Thursday",
|
||||||
"Filter results": "Filter results",
|
"Friday": "Friday",
|
||||||
"Filter room names": "Filter room names",
|
"Saturday": "Saturday",
|
||||||
"Forget": "Forget",
|
"Today": "Today",
|
||||||
"Forward Message": "Forward Message",
|
"Yesterday": "Yesterday",
|
||||||
"Guests can join": "Guests can join",
|
"Custom Server Options": "Custom Server Options",
|
||||||
"Hide panel": "Hide panel",
|
"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.",
|
||||||
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
|
"Dismiss": "Dismiss",
|
||||||
"I understand the risks and wish to continue": "I understand the risks and wish to continue",
|
"powered by Matrix": "powered by Matrix",
|
||||||
"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:",
|
"You are not receiving desktop notifications": "You are not receiving desktop notifications",
|
||||||
"Invite to this room": "Invite to this room",
|
"Enable them now": "Enable them now",
|
||||||
"Keywords": "Keywords",
|
"What's New": "What's New",
|
||||||
"Leave": "Leave",
|
"Update": "Update",
|
||||||
"Login": "Login",
|
"What's new?": "What's new?",
|
||||||
"Loading bug report module": "Loading bug report module",
|
"A new version of Riot is available.": "A new version of Riot is available.",
|
||||||
"Low Priority": "Low Priority",
|
"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>",
|
||||||
"Members": "Members",
|
"Toolbox": "Toolbox",
|
||||||
"Mentions only": "Mentions only",
|
"Set Password": "Set Password",
|
||||||
"Messages containing my display name": "Messages containing my display name",
|
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
|
||||||
"Messages containing <span>keywords</span>": "Messages containing <span>keywords</span>",
|
"Checking for an update...": "Checking for an update...",
|
||||||
"Messages containing my user name": "Messages containing my user name",
|
"No update available.": "No update available.",
|
||||||
"Messages in group chats": "Messages in group chats",
|
"Downloading update...": "Downloading update...",
|
||||||
"Messages in one-to-one chats": "Messages in one-to-one chats",
|
"Warning": "Warning",
|
||||||
"Messages sent by bot": "Messages sent by bot",
|
"Error": "Error",
|
||||||
"more": "more",
|
"You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)",
|
||||||
"Mute": "Mute",
|
"Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s",
|
||||||
"No rooms to show": "No rooms to show",
|
"Remove": "Remove",
|
||||||
"Noisy": "Noisy",
|
"Close": "Close",
|
||||||
"Notification targets": "Notification targets",
|
"Download this file": "Download this file",
|
||||||
"Notifications": "Notifications",
|
"Please describe the bug and/or send logs.": "Please describe the bug and/or send logs.",
|
||||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notifications on the following keywords follow rules which can’t be displayed here:",
|
"Loading bug report module": "Loading bug report module",
|
||||||
"Notify for all other messages/rooms": "Notify for all other messages/rooms",
|
"Bug report sent": "Bug report sent",
|
||||||
"Notify me for anything else": "Notify me for anything else",
|
"Thank you!": "Thank you!",
|
||||||
"Off": "Off",
|
"Failed to send report: ": "Failed to send report: ",
|
||||||
"On": "On",
|
"Cancel": "Cancel",
|
||||||
"Operation failed": "Operation failed",
|
"Report a bug": "Report a bug",
|
||||||
"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. 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.",
|
||||||
"Please describe the bug and/or send logs.": "Please describe the bug and/or send logs.",
|
"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:",
|
||||||
"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.",
|
"Send logs": "Send logs",
|
||||||
"powered by Matrix": "powered by Matrix",
|
"Send": "Send",
|
||||||
"Quote": "Quote",
|
"Unavailable": "Unavailable",
|
||||||
"Reject": "Reject",
|
"Changelog": "Changelog",
|
||||||
"Remove %(name)s from the directory?": "Remove %(name)s from the directory?",
|
"Back": "Back",
|
||||||
"Remove": "Remove",
|
"You must specify an event type!": "You must specify an event type!",
|
||||||
"remove %(name)s from the directory.": "remove %(name)s from the directory.",
|
"Event sent!": "Event sent!",
|
||||||
"Remove from Directory": "Remove from Directory",
|
"Failed to send custom event.": "Failed to send custom event.",
|
||||||
"Report a bug": "Report a bug",
|
"Event Type": "Event Type",
|
||||||
"Resend": "Resend",
|
"Event Content": "Event Content",
|
||||||
"Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s",
|
"State Key": "State Key",
|
||||||
"Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network",
|
"Edit": "Edit",
|
||||||
"Riot is not supported on mobile web. Install the app?": "Riot is not supported on mobile web. Install the app?",
|
"Filter results": "Filter results",
|
||||||
"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.",
|
"Send Custom Event": "Send Custom Event",
|
||||||
"Room not found": "Room not found",
|
"Send Account Data": "Send Account Data",
|
||||||
"Search": "Search",
|
"Explore Account Data": "Explore Account Data",
|
||||||
"Search…": "Search…",
|
"Explore Room State": "Explore Room State",
|
||||||
"Search for a room": "Search for a room",
|
"Developer Tools": "Developer Tools",
|
||||||
"Send": "Send",
|
"You have successfully set a password!": "You have successfully set a password!",
|
||||||
"Send logs": "Send logs",
|
"You have successfully set a password and an email address!": "You have successfully set a password and an email address!",
|
||||||
"Send Custom Event": "Send Custom Event",
|
"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.",
|
||||||
"Send Custom State Event": "Send Custom State Event",
|
"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.",
|
||||||
"Explore Room State": "Explore Room State",
|
"Continue": "Continue",
|
||||||
"Source URL": "Source URL",
|
"Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?",
|
||||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, your browser is <b>not</b> able to run Riot.",
|
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
|
||||||
"The Home Server may be too old to support third party networks": "The Home Server may be too old to support third party networks",
|
"Please set a password!": "Please set a password!",
|
||||||
"There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here",
|
"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.",
|
||||||
"The server may be unavailable or overloaded": "The server may be unavailable or overloaded",
|
"You cannot delete this message. (%(code)s)": "You cannot delete this message. (%(code)s)",
|
||||||
"This Room": "This Room",
|
"Resend": "Resend",
|
||||||
"Unable to fetch notification target list": "Unable to fetch notification target list",
|
"Cancel Sending": "Cancel Sending",
|
||||||
"Unable to join network": "Unable to join network",
|
"Forward Message": "Forward Message",
|
||||||
"Unable to look up room ID from server": "Unable to look up room ID from server",
|
"Unpin Message": "Unpin Message",
|
||||||
"Unavailable": "Unavailable",
|
"Pin Message": "Pin Message",
|
||||||
"Unhide Preview": "Unhide Preview",
|
"View Source": "View Source",
|
||||||
"Unknown device": "Unknown device",
|
"View Decrypted Source": "View Decrypted Source",
|
||||||
"unknown error code": "unknown error code",
|
"Unhide Preview": "Unhide Preview",
|
||||||
"Unnamed room": "Unnamed room",
|
"Permalink": "Permalink",
|
||||||
"Update": "Update",
|
"Quote": "Quote",
|
||||||
"Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s",
|
"Source URL": "Source URL",
|
||||||
"Uploading report": "Uploading report",
|
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
|
||||||
"View Decrypted Source": "View Decrypted Source",
|
"unknown error code": "unknown error code",
|
||||||
"View Source": "View Source",
|
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
|
||||||
"What's New": "What's New",
|
"All messages (loud)": "All messages (loud)",
|
||||||
"What's new?": "What's new?",
|
"All messages": "All messages",
|
||||||
"Waiting for response from server": "Waiting for response from server",
|
"Mentions only": "Mentions only",
|
||||||
"When I'm invited to a room": "When I'm invited to a room",
|
"Mute": "Mute",
|
||||||
"World readable": "World readable",
|
"Leave": "Leave",
|
||||||
"You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)",
|
"Forget": "Forget",
|
||||||
"You cannot delete this message. (%(code)s)": "You cannot delete this message. (%(code)s)",
|
"Reject": "Reject",
|
||||||
"You are not receiving desktop notifications": "You are not receiving desktop notifications",
|
"Favourite": "Favourite",
|
||||||
"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",
|
"Low Priority": "Low Priority",
|
||||||
"You must specify an event type!": "You must specify an event type!",
|
"Direct Chat": "Direct Chat",
|
||||||
"Thank you!": "Thank you!",
|
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, your browser is <b>not</b> able to run Riot.",
|
||||||
"Sunday": "Sunday",
|
"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.",
|
||||||
"Monday": "Monday",
|
"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.",
|
||||||
"Tuesday": "Tuesday",
|
"<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.",
|
||||||
"Wednesday": "Wednesday",
|
"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!",
|
||||||
"Thursday": "Thursday",
|
"I understand the risks and wish to continue": "I understand the risks and wish to continue",
|
||||||
"Friday": "Friday",
|
"Couldn't load home page": "Couldn't load home page",
|
||||||
"Saturday": "Saturday",
|
"Login": "Login",
|
||||||
"Today": "Today",
|
"Register": "Register",
|
||||||
"Yesterday": "Yesterday",
|
"Invite to this room": "Invite to this room",
|
||||||
"OK": "OK",
|
"Members": "Members",
|
||||||
"Warning": "Warning",
|
"Files": "Files",
|
||||||
"Checking for an update...": "Checking for an update...",
|
"Notifications": "Notifications",
|
||||||
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
|
"Rooms": "Rooms",
|
||||||
"Event sent!": "Event sent!",
|
"Hide panel": "Hide panel",
|
||||||
"Event Type": "Event Type",
|
"Invite to this community": "Invite to this community",
|
||||||
"Event Content": "Event Content",
|
"Add rooms to this community": "Add rooms to this community",
|
||||||
"State Key": "State Key",
|
"Failed to get protocol list from Home Server": "Failed to get protocol list from Home Server",
|
||||||
"No update available.": "No update available.",
|
"The Home Server may be too old to support third party networks": "The Home Server may be too old to support third party networks",
|
||||||
"Downloading update...": "Downloading update...",
|
"Failed to get public room list": "Failed to get public room list",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
"The server may be unavailable or overloaded": "The server may be unavailable or overloaded",
|
||||||
"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!",
|
"Unnamed room": "Unnamed room",
|
||||||
"Welcome to Riot.im": "Welcome to Riot.im",
|
"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?",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]",
|
"Remove %(name)s from the directory?": "Remove %(name)s from the directory?",
|
||||||
"Search the room directory": "Search the room directory",
|
"Remove from Directory": "Remove from Directory",
|
||||||
"Chat with Riot Bot": "Chat with Riot Bot",
|
"remove %(name)s from the directory.": "remove %(name)s from the directory.",
|
||||||
"Get started with some tips from Riot Bot!": "Get started with some tips from Riot Bot!",
|
"delete the alias.": "delete the alias.",
|
||||||
"General discussion about Matrix and Riot": "General discussion about Matrix and Riot",
|
"Unable to join network": "Unable to join network",
|
||||||
"Discussion of all things Matrix!": "Discussion of all things Matrix!",
|
"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/Web & Desktop chat": "Riot/Web & Desktop chat",
|
"Room not found": "Room not found",
|
||||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
"Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room",
|
||||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
|
"Fetching third party location failed": "Fetching third party location failed",
|
||||||
"Matrix technical discussions": "Matrix technical discussions",
|
"Unable to look up room ID from server": "Unable to look up room ID from server",
|
||||||
"Running Matrix services": "Running Matrix services",
|
"World readable": "World readable",
|
||||||
"Community-run support for Synapse": "Community-run support for Synapse",
|
"Guests can join": "Guests can join",
|
||||||
"Admin support for Dendrite": "Admin support for Dendrite",
|
"Directory": "Directory",
|
||||||
"Announcements about Synapse releases": "Announcements about Synapse releases",
|
"No rooms to show": "No rooms to show",
|
||||||
"Support for those using and running matrix-appservice-irc": "Support for those using and running matrix-appservice-irc",
|
"Search for a room": "Search for a room",
|
||||||
"Building services on Matrix": "Building services on Matrix",
|
"#example": "#example",
|
||||||
"Support for those using the Matrix spec": "Support for those using the Matrix spec",
|
"more": "more",
|
||||||
"Design and implementation of E2E in Matrix": "Design and implementation of E2E in Matrix",
|
"Expand panel": "Expand panel",
|
||||||
"Implementing VR services with Matrix": "Implementing VR services with Matrix",
|
"Collapse panel": "Collapse panel",
|
||||||
"Implementing VoIP services with Matrix": "Implementing VoIP services with Matrix",
|
"Filter room names": "Filter room names",
|
||||||
"Discussion of the Identity Service API": "Discussion of the Identity Service API",
|
"Welcome to Riot.im": "Welcome to Riot.im",
|
||||||
"Support for those using, running and writing other bridges": "Support for those using, running and writing other bridges",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]",
|
||||||
"Contributing code to Matrix and Riot": "Contributing code to Matrix and Riot",
|
"Search the room directory": "Search the room directory",
|
||||||
"Dev chat for the Riot/Web dev team": "Dev chat for the Riot/Web dev team",
|
"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!",
|
||||||
"Dev chat for the Dendrite dev team": "Dev chat for the Dendrite dev team",
|
"Chat with Riot Bot": "Chat with Riot Bot",
|
||||||
"Co-ordination for Riot/Web translators": "Co-ordination for Riot/Web translators",
|
"Get started with some tips from Riot Bot!": "Get started with some tips from Riot Bot!",
|
||||||
"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!",
|
"General discussion about Matrix and Riot": "General discussion about Matrix and Riot",
|
||||||
"Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?",
|
"Discussion of all things Matrix!": "Discussion of all things Matrix!",
|
||||||
"You have successfully set a password!": "You have successfully set a password!",
|
"Riot/Web & Desktop chat": "Riot/Web & Desktop chat",
|
||||||
"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.",
|
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||||
"Continue": "Continue",
|
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
|
||||||
"Please set a password!": "Please set a password!",
|
"Matrix technical discussions": "Matrix technical discussions",
|
||||||
"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.",
|
"Running Matrix services": "Running Matrix services",
|
||||||
"You have successfully set a password and an email address!": "You have successfully set a password and an email address!",
|
"Community-run support for Synapse": "Community-run support for Synapse",
|
||||||
"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.",
|
"Admin support for Dendrite": "Admin support for Dendrite",
|
||||||
"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>",
|
"Announcements about Synapse releases": "Announcements about Synapse releases",
|
||||||
"Set Password": "Set Password",
|
"Support for those using and running matrix-appservice-irc": "Support for those using and running matrix-appservice-irc",
|
||||||
"Couldn't load home page": "Couldn't load home page",
|
"Building services on Matrix": "Building services on Matrix",
|
||||||
"Invite to this group": "Invite to this group",
|
"Support for those using the Matrix spec": "Support for those using the Matrix spec",
|
||||||
"Add room to this group": "Add room to this group"
|
"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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -185,6 +185,8 @@
|
|||||||
"You have successfully set a password and an email address!": "You have successfully set a password and an email address!",
|
"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.",
|
"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",
|
"Warning": "Warning",
|
||||||
|
"Pin Message": "Pin Message",
|
||||||
|
"Unpin Message": "Unpin Message",
|
||||||
"Checking for an update...": "Checking for an update...",
|
"Checking for an update...": "Checking for an update...",
|
||||||
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
|
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
|
||||||
"No update available.": "No update available.",
|
"No update available.": "No update available.",
|
||||||
|
|||||||
@@ -94,7 +94,6 @@
|
|||||||
"Operation failed": "La operacio malsukcesis",
|
"Operation failed": "La operacio malsukcesis",
|
||||||
"Permalink": "Konstanta ligilo",
|
"Permalink": "Konstanta ligilo",
|
||||||
"Please describe the bug and/or send logs.": "Bonvolu priskribi la cimon kaj/aŭ sendi protokolojn.",
|
"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 %(name)s from the directory?": "Forigi %(name)s el la dosierujo?",
|
||||||
"Remove": "Forigi",
|
"Remove": "Forigi",
|
||||||
"remove %(name)s from the directory.": "forigi %(name)s el la dosierujo.",
|
"remove %(name)s from the directory.": "forigi %(name)s el la dosierujo.",
|
||||||
|
|||||||
@@ -63,7 +63,6 @@
|
|||||||
"Operation failed": "Falló la operación",
|
"Operation failed": "Falló la operación",
|
||||||
"Permalink": "Enlace permanente",
|
"Permalink": "Enlace permanente",
|
||||||
"Quote": "Citar",
|
"Quote": "Citar",
|
||||||
"Redact": "Redactar",
|
|
||||||
"Reject": "Rechazar",
|
"Reject": "Rechazar",
|
||||||
"Remove %(name)s from the directory?": "¿Retirar %(name)s del directorio?",
|
"Remove %(name)s from the directory?": "¿Retirar %(name)s del directorio?",
|
||||||
"Remove": "Eliminar",
|
"Remove": "Eliminar",
|
||||||
|
|||||||
@@ -205,6 +205,5 @@
|
|||||||
"Event sent!": "Tapahtuma lähetetty!",
|
"Event sent!": "Tapahtuma lähetetty!",
|
||||||
"Event Type": "Tapahtuman tyyppi",
|
"Event Type": "Tapahtuman tyyppi",
|
||||||
"Event Content": "Tapahtuman sisältö",
|
"Event Content": "Tapahtuman sisältö",
|
||||||
"State Key": "Tila-avain",
|
"State Key": "Tila-avain"
|
||||||
"Invite to this group": "Kutsu tähän ryhmään"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,6 @@
|
|||||||
"Operation failed": "L'opération a échoué",
|
"Operation failed": "L'opération a échoué",
|
||||||
"powered by Matrix": "propulsé par Matrix",
|
"powered by Matrix": "propulsé par Matrix",
|
||||||
"Quote": "Citer",
|
"Quote": "Citer",
|
||||||
"Redact": "Rédiger",
|
|
||||||
"Reject": "Rejeter",
|
"Reject": "Rejeter",
|
||||||
"Remove %(name)s from the directory?": "Supprimer %(name)s du répertoire ?",
|
"Remove %(name)s from the directory?": "Supprimer %(name)s du répertoire ?",
|
||||||
"Remove": "Supprimer",
|
"Remove": "Supprimer",
|
||||||
@@ -78,7 +77,6 @@
|
|||||||
"Noisy": "Bruyant",
|
"Noisy": "Bruyant",
|
||||||
"Notification targets": "Appareils recevant les notifications",
|
"Notification targets": "Appareils recevant les notifications",
|
||||||
"Notifications": "Notifications",
|
"Notifications": "Notifications",
|
||||||
"Notifications on the following keywords follow rules which can’t 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 for all other messages/rooms": "Me notifier pour tous les autres messages/salons",
|
||||||
"Notify me for anything else": "Me notifier pour tout le reste",
|
"Notify me for anything else": "Me notifier pour tout le reste",
|
||||||
"Off": "Désactivé",
|
"Off": "Désactivé",
|
||||||
@@ -97,13 +95,13 @@
|
|||||||
"Unable to join network": "Impossible de rejoindre le réseau",
|
"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",
|
"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",
|
"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",
|
"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",
|
"View Decrypted Source": "Voir la source déchiffrée",
|
||||||
"When I'm invited to a room": "Quand je suis invité dans un salon",
|
"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",
|
"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",
|
"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.",
|
"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 can’t be displayed here:": "Les notifications pour les mots-clés suivant répondent à des critères qui ne peuvent pas être affichés ici :",
|
"Notifications on the following keywords follow rules which can’t 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 !",
|
"You must specify an event type!": "Vous devez spécifier un type d'événement !",
|
||||||
"Event sent!": "Événement envoyé !",
|
"Event sent!": "Événement envoyé !",
|
||||||
"Event Type": "Type d'événement",
|
"Event Type": "Type d'événement",
|
||||||
"Invite to this group": "Inviter à ce groupe",
|
|
||||||
"Event Content": "Contenu de l'événement",
|
"Event Content": "Contenu de l'événement",
|
||||||
"Failed to send custom event.": "Échec de l'envoi de l'événement personnalisé.",
|
"Failed to send custom event.": "Échec de l'envoi de l'événement personnalisé.",
|
||||||
"Send Custom Event": "Envoyer l'événement personnalisé",
|
"Send Custom Event": "Envoyer l'événement personnalisé",
|
||||||
"Send Custom State Event": "Envoyer l'événement d'état personnalisé",
|
"Send Custom State Event": "Envoyer l'événement d'état personnalisé",
|
||||||
"Explore Room State": "Parcourir l'état du salon",
|
"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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
"Collapse panel": "Agochar panel",
|
"Collapse panel": "Agochar panel",
|
||||||
"Collecting app version information": "Obtendo información sobre a versión da app",
|
"Collecting app version information": "Obtendo información sobre a versión da app",
|
||||||
"Collecting logs": "Obtendo rexistros",
|
"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",
|
"Couldn't find a matching Matrix room": "Non coincide con ningunha sala de Matrix",
|
||||||
"Custom Server Options": "Axustes do servidor personalizado",
|
"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.",
|
"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",
|
"Directory": "Directorio",
|
||||||
"Dismiss": "Desbotar",
|
"Dismiss": "Desbotar",
|
||||||
"Download this file": "Descargue este ficheiro",
|
"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 audible notifications in web client": "Habilitar notificacións audibles no cliente web",
|
||||||
"Enable desktop notifications": "Habilitar notificacións de escritorio",
|
"Enable desktop notifications": "Habilitar notificacións de escritorio",
|
||||||
"Enable email notifications": "Habilitar notificacións de correo",
|
"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",
|
"Error saving email notification preferences": "Fallo ao cargar os axustes de notificacións",
|
||||||
"#example": "#exemplo",
|
"#example": "#exemplo",
|
||||||
"Expand panel": "Expandir panel",
|
"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 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 change settings": "Fallo ao cambiar os axustes",
|
||||||
"Failed to forget room %(errCode)s": "Fallou ao esquecer a sala %(errCode)s",
|
"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 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 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 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 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 custom event.": "Fallo ao enviar evento personalizado.",
|
||||||
"Failed to send report: ": "Fallo no envío do informe: ",
|
"Failed to send report: ": "Fallo no envío do informe: ",
|
||||||
@@ -63,9 +59,7 @@
|
|||||||
"Filter room names": "Filtrar nomes de sala",
|
"Filter room names": "Filtrar nomes de sala",
|
||||||
"Forget": "Esquecer",
|
"Forget": "Esquecer",
|
||||||
"Forward Message": "Reenviar mensaxe",
|
"Forward Message": "Reenviar mensaxe",
|
||||||
" from room": " da sala",
|
|
||||||
"Guests can join": "Convidadas pódense unir",
|
"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",
|
"Hide panel": "Agochar panel",
|
||||||
"(HTTP status %(httpStatus)s)": "(Estado HTTP %(httpStatus)s)",
|
"(HTTP status %(httpStatus)s)": "(Estado HTTP %(httpStatus)s)",
|
||||||
"I understand the risks and wish to continue": "Entendos os riscos e desexo continuar",
|
"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. 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 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 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",
|
"powered by Matrix": "funcionando grazas a Matrix",
|
||||||
"Quote": "Cita",
|
"Quote": "Cita",
|
||||||
"Reject": "Rexeitar",
|
"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 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 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.",
|
"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",
|
"Room not found": "Non se atopou a sala",
|
||||||
"Search": "Buscar",
|
"Search": "Buscar",
|
||||||
"Search…": "Buscar…",
|
"Search…": "Buscar…",
|
||||||
@@ -124,16 +116,12 @@
|
|||||||
"Send Custom Event": "Enviar evento personalizado",
|
"Send Custom Event": "Enviar evento personalizado",
|
||||||
"Send Custom State Event": "Enviar evento de estado personalizado",
|
"Send Custom State Event": "Enviar evento de estado personalizado",
|
||||||
"Explore Room State": "Explorar estado da sala",
|
"Explore Room State": "Explorar estado da sala",
|
||||||
"Settings": "Axustes",
|
|
||||||
"Source URL": "URL fonte",
|
"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.",
|
"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",
|
"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í",
|
"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",
|
"The server may be unavailable or overloaded": "O servidor podería non estar dispoñible ou sobrecargado",
|
||||||
"This Room": "Esta sala",
|
"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 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 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",
|
"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 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 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 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!",
|
"You must specify an event type!": "Debe indicar un tipo de evento!",
|
||||||
"Thank you!": "Grazas!",
|
"Thank you!": "Grazas!",
|
||||||
"Sunday": "Domingo",
|
"Sunday": "Domingo",
|
||||||
@@ -178,7 +165,6 @@
|
|||||||
"No update available.": "Sen actualizacións.",
|
"No update available.": "Sen actualizacións.",
|
||||||
"Downloading update...": "Descargando actualización...",
|
"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.",
|
"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!",
|
"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",
|
"Welcome to Riot.im": "Benvida a Riot.im",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat & colaboración descentralizados e cifrados grazas a [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat & 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>",
|
"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",
|
"Set Password": "Establecer contrasinal",
|
||||||
"Couldn't load home page": "Non se cargou a páxina de inicio",
|
"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",
|
"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 & matrix-android-sdk chat": "Chat para Riot/Android & matrix-android-sdk"
|
"Riot/Android & matrix-android-sdk chat": "Chat para Riot/Android & 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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -179,7 +179,6 @@
|
|||||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s באמצעות הדפדפן %(browserName)s על גבי %(osName)s",
|
"%(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> עובדים גם כן.",
|
"<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 can’t be displayed here:": "התראה על מילות המפתח הבאות עוקבת אחר החוקים שאינם יכולים להיות מוצגים כאן:",
|
"Notifications on the following keywords follow rules which can’t 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!": "באמצעות הדפדפן הנוכחי שלך המראה של האפליקציה יכול להיות שגוי לחלוטין וחלק מהאפשרויות לא תתפקדנה. אם תרצה לנסות בכל זאת תוכל אבל אז הסיכון חל עליך!",
|
"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 & collaboration powered by [matrix]": "צ'ט מוצפן & ושת\"פ נעשה ע\"י ה [matrix]"
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "צ'ט מוצפן & ושת\"פ נעשה ע\"י ה [matrix]"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
"Files": "Fájlok",
|
"Files": "Fájlok",
|
||||||
"Filter room names": "Szoba nevek szűrése",
|
"Filter room names": "Szoba nevek szűrése",
|
||||||
"Forget": "Elfelejt",
|
"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",
|
"Invite to this room": "Meghívás a szobába",
|
||||||
"Keywords": "Kulcsszavak",
|
"Keywords": "Kulcsszavak",
|
||||||
"Leave": "Elhagy",
|
"Leave": "Elhagy",
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
"Messages sent by bot": "Botok által küldött üzenetek",
|
"Messages sent by bot": "Botok által küldött üzenetek",
|
||||||
"more": "további",
|
"more": "további",
|
||||||
"Mute": "Elnémít",
|
"Mute": "Elnémít",
|
||||||
"No rooms to show": "Nincs megjeleníthető szoba",
|
"No rooms to show": "Nincsenek megjelenítendő szobák",
|
||||||
"Noisy": "Hangos",
|
"Noisy": "Hangos",
|
||||||
"Notification targets": "Értesítések célpontja",
|
"Notification targets": "Értesítések célpontja",
|
||||||
"Notifications": "Értesítések",
|
"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.",
|
"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",
|
"powered by Matrix": "Matrixon alapul",
|
||||||
"Quote": "Idézet",
|
"Quote": "Idézet",
|
||||||
"Redact": "Szerkeszt",
|
|
||||||
"Reject": "Elutasít",
|
"Reject": "Elutasít",
|
||||||
"Remove %(name)s from the directory?": "Törlöd a %(name)s szobát a listából?",
|
"Remove %(name)s from the directory?": "Törlöd a %(name)s szobát a listából?",
|
||||||
"Remove": "Törlés",
|
"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",
|
"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",
|
"Unhide Preview": "Előkép felfedése",
|
||||||
"unknown error code": "ismeretlen hiba kód",
|
"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",
|
"Uploaded on %(date)s by %(user)s": "Feltöltés: %(date)s, %(user)s",
|
||||||
"View Decrypted Source": "Visszafejtett forrás megjelenítése",
|
"View Decrypted Source": "Visszafejtett forrás megjelenítése",
|
||||||
"View Source": "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",
|
"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 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 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",
|
"You are not receiving desktop notifications": "Nem fogadsz asztali értesítéseket",
|
||||||
@@ -205,8 +204,18 @@
|
|||||||
"Event Type": "Esemény típusa",
|
"Event Type": "Esemény típusa",
|
||||||
"Event Content": "Esemény tartalma",
|
"Event Content": "Esemény tartalma",
|
||||||
"State Key": "Állapot kulcs",
|
"State Key": "Állapot kulcs",
|
||||||
"Invite to this group": "Meghívás ebbe a csoportba",
|
|
||||||
"Filter results": "Találatok szűrése",
|
"Filter results": "Találatok szűrése",
|
||||||
"You must specify an event type!": "Meg kell határoznod az esemény típusát!",
|
"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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -206,6 +206,6 @@
|
|||||||
"Event Type": "Tipo di Evento",
|
"Event Type": "Tipo di Evento",
|
||||||
"Event Content": "Contenuto dell'Evento",
|
"Event Content": "Contenuto dell'Evento",
|
||||||
"State Key": "Chiave dello Stato",
|
"State Key": "Chiave dello Stato",
|
||||||
"Invite to this group": "Invita in questo gruppo",
|
"Show message in desktop notification": "Mostra i messaggi nelle notifiche desktop",
|
||||||
"Add room to this group": "Aggiungi stanza a questo gruppo"
|
"Edit": "Modifica"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,6 @@
|
|||||||
"Please describe the bug and/or send logs.": "오류를 적어주시거나 로그를 보내주세요.",
|
"Please describe the bug and/or send logs.": "오류를 적어주시거나 로그를 보내주세요.",
|
||||||
"powered by Matrix": "매트릭스의 지원을 받고 있어요",
|
"powered by Matrix": "매트릭스의 지원을 받고 있어요",
|
||||||
"Quote": "인용하기",
|
"Quote": "인용하기",
|
||||||
"Redact": "지우기",
|
|
||||||
"Reject": "거절하기",
|
"Reject": "거절하기",
|
||||||
"Remove %(name)s from the directory?": "목록에서 %(name)s을 지우시겠어요?",
|
"Remove %(name)s from the directory?": "목록에서 %(name)s을 지우시겠어요?",
|
||||||
"Remove": "지우기",
|
"Remove": "지우기",
|
||||||
|
|||||||
@@ -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.",
|
"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",
|
"powered by Matrix": "benytter seg av Matrix",
|
||||||
"Quote": "Sitat",
|
"Quote": "Sitat",
|
||||||
"Redact": "Maskere",
|
|
||||||
"Reject": "Avvis",
|
"Reject": "Avvis",
|
||||||
"Remove %(name)s from the directory?": "Fjern %(name)s fra katalogen?",
|
"Remove %(name)s from the directory?": "Fjern %(name)s fra katalogen?",
|
||||||
"Remove": "Fjern",
|
"Remove": "Fjern",
|
||||||
|
|||||||
1
src/i18n/strings/ne.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
@@ -105,7 +105,6 @@
|
|||||||
"Today": "Vandaag",
|
"Today": "Vandaag",
|
||||||
"Yesterday": "Gisteren",
|
"Yesterday": "Gisteren",
|
||||||
"Failed to set Direct Message status of room": "Het is mislukt om de directe-berichtenstatus van de kamer in te stellen",
|
"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.",
|
"A new version of Riot is available.": "Er is een nieuwe versie van Riot beschikbaar.",
|
||||||
"All Rooms": "Alle kamers",
|
"All Rooms": "Alle kamers",
|
||||||
"Cancel": "Annuleren",
|
"Cancel": "Annuleren",
|
||||||
@@ -199,7 +198,6 @@
|
|||||||
"Failed to send custom event.": "Aangepast Event verzenden mislukt.",
|
"Failed to send custom event.": "Aangepast Event verzenden mislukt.",
|
||||||
"Send Custom Event": "Verzend aangepast evenement",
|
"Send Custom Event": "Verzend aangepast evenement",
|
||||||
"Send Custom State Event": "Verzend aangepast State Event",
|
"Send Custom State Event": "Verzend aangepast State Event",
|
||||||
"Invite to this group": "Nodig uit voor deze groep",
|
|
||||||
"Developer Tools": "Ontwikkelaarsgereedschap",
|
"Developer Tools": "Ontwikkelaarsgereedschap",
|
||||||
"Filter results": "Resultaten filteren",
|
"Filter results": "Resultaten filteren",
|
||||||
"Explore Room State": "Verken Ruimtetoestand",
|
"Explore Room State": "Verken Ruimtetoestand",
|
||||||
@@ -207,6 +205,5 @@
|
|||||||
"Event sent!": "Event verstuurd!",
|
"Event sent!": "Event verstuurd!",
|
||||||
"Event Type": "Event-type",
|
"Event Type": "Event-type",
|
||||||
"Event Content": "Event-inhoud",
|
"Event Content": "Event-inhoud",
|
||||||
"State Key": "Toestandssleutel",
|
"State Key": "Toestandssleutel"
|
||||||
"Add room to this group": "Voeg een ruimte aan deze groep toe"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,7 +97,6 @@
|
|||||||
"Send logs": "Wyślij logi",
|
"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.",
|
"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",
|
"powered by Matrix": "napędzany przez Matrix",
|
||||||
"Redact": "Zredaguj",
|
|
||||||
"Reject": "Odrzuć",
|
"Reject": "Odrzuć",
|
||||||
"Remove": "Usuń",
|
"Remove": "Usuń",
|
||||||
"remove %(name)s from the directory.": "usuń %(name)s z katalogu.",
|
"remove %(name)s from the directory.": "usuń %(name)s z katalogu.",
|
||||||
@@ -207,5 +206,13 @@
|
|||||||
"Event Type": "Typ wydarzenia",
|
"Event Type": "Typ wydarzenia",
|
||||||
"Event Content": "Zawartość wydarzenia",
|
"Event Content": "Zawartość wydarzenia",
|
||||||
"State Key": "Klucz stanu",
|
"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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,14 +23,12 @@
|
|||||||
"Enter keywords separated by a comma:": "Insira palavras-chave separadas por vírgula:",
|
"Enter keywords separated by a comma:": "Insira palavras-chave separadas por vírgula:",
|
||||||
"Error": "Erro",
|
"Error": "Erro",
|
||||||
"Error saving email notification preferences": "Erro ao guardar as preferências de notificação por e-mail",
|
"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 add tag %(tagName)s to room": "Falha ao adicionar %(tagName)s à sala",
|
||||||
"Failed to change settings": "Falha ao alterar as configurações",
|
"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 forget room %(errCode)s": "Falha ao esquecer a sala %(errCode)s",
|
||||||
"Failed to update keywords": "Falha ao atualizar as palavras-chave",
|
"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 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 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 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",
|
"Failed to set Direct Message status of room": "Falha em definir a mensagem de status da sala",
|
||||||
"Favourite": "Favorito",
|
"Favourite": "Favorito",
|
||||||
@@ -66,7 +64,6 @@
|
|||||||
"Permalink": "Link permanente",
|
"Permalink": "Link permanente",
|
||||||
"powered by Matrix": "rodando a partir do Matrix",
|
"powered by Matrix": "rodando a partir do Matrix",
|
||||||
"Quote": "Citar",
|
"Quote": "Citar",
|
||||||
"Redact": "Remover",
|
|
||||||
"Reject": "Rejeitar",
|
"Reject": "Rejeitar",
|
||||||
"Remove": "Remover",
|
"Remove": "Remover",
|
||||||
"Remove %(name)s from the directory?": "Remover %(name)s da lista pública de salas?",
|
"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>",
|
"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",
|
"Set Password": "Definir palavra-passe",
|
||||||
"Couldn't load home page": "Não foi possível carregar a página inicial",
|
"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",
|
"Filter results": "Filtrar resultados",
|
||||||
"You must specify an event type!": "Tem que especificar um tipo de evento!",
|
"You must specify an event type!": "Tem que especificar um tipo de evento!"
|
||||||
"Add room to this group": "Adicionar sala a este grupo"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,14 +23,12 @@
|
|||||||
"Enter keywords separated by a comma:": "Coloque cada palavras-chave separada por vírgula:",
|
"Enter keywords separated by a comma:": "Coloque cada palavras-chave separada por vírgula:",
|
||||||
"Error": "Erro",
|
"Error": "Erro",
|
||||||
"Error saving email notification preferences": "Erro ao salvar as preferências de notificação por email",
|
"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 add tag %(tagName)s to room": "Falha ao adicionar %(tagName)s à sala",
|
||||||
"Failed to change settings": "Falhou ao mudar as preferências",
|
"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 forget room %(errCode)s": "Falhou ao esquecer a sala %(errCode)s",
|
||||||
"Failed to update keywords": "Falha ao alterar as palavras-chave",
|
"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 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 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 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",
|
"Failed to set Direct Message status of room": "Falha em definir a mensagem de status da sala",
|
||||||
"Favourite": "Favorito",
|
"Favourite": "Favorito",
|
||||||
@@ -66,7 +64,6 @@
|
|||||||
"Permalink": "Link permanente",
|
"Permalink": "Link permanente",
|
||||||
"powered by Matrix": "rodando a partir do Matrix",
|
"powered by Matrix": "rodando a partir do Matrix",
|
||||||
"Quote": "Citar",
|
"Quote": "Citar",
|
||||||
"Redact": "Remover",
|
|
||||||
"Reject": "Rejeitar",
|
"Reject": "Rejeitar",
|
||||||
"Remove": "Remover",
|
"Remove": "Remover",
|
||||||
"Remove %(name)s from the directory?": "Remover %(name)s da lista pública de salas?",
|
"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.",
|
"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",
|
"Login": "Fazer login",
|
||||||
"Welcome to Riot.im": "Seja bem-vinda(o) a Riot.im",
|
"Welcome to Riot.im": "Seja bem-vinda(o) a Riot.im",
|
||||||
"Decentralised, encrypted chat & collaboration powered by": "Colaboração descentralizada e criptografada impulsada por",
|
|
||||||
"Search the room directory": "Buscar na lista pública de salas",
|
"Search the room directory": "Buscar na lista pública de salas",
|
||||||
"Chat with Riot Bot": "Conversar com o Bot do Riot",
|
"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!",
|
"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 sent!": "Evento enviado!",
|
||||||
"Event Type": "Tipo do Evento",
|
"Event Type": "Tipo do Evento",
|
||||||
"Event Content": "Conteúdo do Evento",
|
"Event Content": "Conteúdo do Evento",
|
||||||
"State Key": "Chave do Estado",
|
"State Key": "Chave do Estado"
|
||||||
"Invite to this group": "Convide para este grupo",
|
|
||||||
"Add room to this group": "Adicione sala para este grupo"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,17 +2,14 @@
|
|||||||
"Add an email address above to configure email notifications": "Добавьте email адрес для оповещений",
|
"Add an email address above to configure email notifications": "Добавьте email адрес для оповещений",
|
||||||
"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.": "Возникла ошибка при сохранении настроек оповещения по email.",
|
"An error occurred whilst saving your email notification preferences.": "Возникла ошибка при сохранении настроек оповещения по email.",
|
||||||
"and remove": "и удалить",
|
|
||||||
"Can't update user notification settings": "Не удается обновить пользовательские настройки оповещения",
|
"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": "Настраиваемые параметры сервера",
|
"Custom Server Options": "Настраиваемые параметры сервера",
|
||||||
"delete the alias.": "удалить псевдоним.",
|
"delete the alias.": "удалить псевдоним.",
|
||||||
"Delete the room alias": "Удалить привязку комнаты",
|
|
||||||
"Direct Chat": "Прямой чат",
|
"Direct Chat": "Прямой чат",
|
||||||
"Directory": "Каталог",
|
"Directory": "Каталог",
|
||||||
"Dismiss": "Отказ",
|
"Dismiss": "Отказ",
|
||||||
"Drop here to": "Перетащите сюда",
|
"Enable audible notifications in web client": "Включить звуковые уведомления в веб-клиенте",
|
||||||
"Enable audible notifications in web client": "Включить звуковые уведомления в веб клиенте",
|
|
||||||
"Enable desktop notifications": "Включить оповещения на рабочем столе",
|
"Enable desktop notifications": "Включить оповещения на рабочем столе",
|
||||||
"Enable email notifications": "Включить уведомления по email",
|
"Enable email notifications": "Включить уведомления по email",
|
||||||
"Enable notifications for this account": "Включить уведомления для этой учетной записи",
|
"Enable notifications for this account": "Включить уведомления для этой учетной записи",
|
||||||
@@ -21,19 +18,16 @@
|
|||||||
"Error": "Ошибка",
|
"Error": "Ошибка",
|
||||||
"Error saving email notification preferences": "Ошибка при сохранении настроек уведомлений по email",
|
"Error saving email notification preferences": "Ошибка при сохранении настроек уведомлений по email",
|
||||||
"#example": "#пример",
|
"#example": "#пример",
|
||||||
"Failed to add tag ": "Не удалось добавить тег ",
|
|
||||||
"Failed to change settings": "Не удалось изменить настройки",
|
"Failed to change settings": "Не удалось изменить настройки",
|
||||||
"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 ": "Не удалось удалить тег ",
|
|
||||||
"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 room names": "Фильтр по названию комнат",
|
"Filter room names": "Фильтр по названию комнат",
|
||||||
"Forget": "Забыть",
|
"Forget": "Забыть",
|
||||||
"from the directory": "из каталога",
|
|
||||||
"Guests can join": "Гости могут присоединиться",
|
"Guests can join": "Гости могут присоединиться",
|
||||||
"Invite to this room": "Пригласить в комнату",
|
"Invite to this room": "Пригласить в комнату",
|
||||||
"Keywords": "Ключевые слова",
|
"Keywords": "Ключевые слова",
|
||||||
@@ -41,7 +35,7 @@
|
|||||||
"Low Priority": "Низкий приоритет",
|
"Low Priority": "Низкий приоритет",
|
||||||
"Members": "Участники",
|
"Members": "Участники",
|
||||||
"No rooms to show": "Нет комнат для отображения",
|
"No rooms to show": "Нет комнат для отображения",
|
||||||
"Noisy": "Громко",
|
"Noisy": "Со звуком",
|
||||||
"Notification targets": "Цели уведомления",
|
"Notification targets": "Цели уведомления",
|
||||||
"Notifications": "Уведомления",
|
"Notifications": "Уведомления",
|
||||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Уведомления по следующим ключевым словам соответствуют правилам, которые нельзя отобразить здесь:",
|
"Notifications on the following keywords follow rules which can’t be displayed here:": "Уведомления по следующим ключевым словам соответствуют правилам, которые нельзя отобразить здесь:",
|
||||||
@@ -53,7 +47,6 @@
|
|||||||
"powered by Matrix": "Основано на Matrix",
|
"powered by Matrix": "Основано на Matrix",
|
||||||
"Reject": "Отклонить",
|
"Reject": "Отклонить",
|
||||||
"Remove": "Удалить",
|
"Remove": "Удалить",
|
||||||
"remove": "удалить",
|
|
||||||
"Remove from Directory": "Удалить из каталога",
|
"Remove from Directory": "Удалить из каталога",
|
||||||
"Riot does not know how to join a room on this network": "Riot не знает, как присоединиться к комнате, принадлежащей к этой сети",
|
"Riot does not know how to join a room on this network": "Riot не знает, как присоединиться к комнате, принадлежащей к этой сети",
|
||||||
"Room not found": "Комната не найдена",
|
"Room not found": "Комната не найдена",
|
||||||
@@ -70,7 +63,7 @@
|
|||||||
"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": "Возможно вы настроили их не в Riot, а в другом Matrix-клиенте. Настроить их в Riot не удастся, но они будут в нем применяться",
|
"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": "Все сообщения",
|
||||||
"All messages (loud)": "Все сообщения (громко)",
|
"All messages (loud)": "Все сообщения (со звуком)",
|
||||||
"Cancel Sending": "Отменить отправку",
|
"Cancel Sending": "Отменить отправку",
|
||||||
"Close": "Закрыть",
|
"Close": "Закрыть",
|
||||||
"Download this file": "Скачать этот файл",
|
"Download this file": "Скачать этот файл",
|
||||||
@@ -98,7 +91,6 @@
|
|||||||
"Mute": "Беззвучный",
|
"Mute": "Беззвучный",
|
||||||
"Permalink": "Постоянная ссылка",
|
"Permalink": "Постоянная ссылка",
|
||||||
"Quote": "Цитата",
|
"Quote": "Цитата",
|
||||||
"Redact": "Удалить",
|
|
||||||
"Remove %(name)s from the directory?": "Удалить %(name)s из каталога?",
|
"Remove %(name)s from the directory?": "Удалить %(name)s из каталога?",
|
||||||
"remove %(name)s from the directory.": "удалить %(name)s из каталога.",
|
"remove %(name)s from the directory.": "удалить %(name)s из каталога.",
|
||||||
"Resend": "Переотправить",
|
"Resend": "Переотправить",
|
||||||
@@ -128,10 +120,10 @@
|
|||||||
"Forward Message": "Переслать сообщение",
|
"Forward Message": "Переслать сообщение",
|
||||||
"Hide panel": "Скрыть панель",
|
"Hide panel": "Скрыть панель",
|
||||||
"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:": "Чтобы диагностировать проблемы, журналы работы этого клиента будут отправлены вместе с сообщением об ошибке. Если вы предпочитаете отправить только текст выше, пожалуйста, снимите отметку:",
|
||||||
"Loading bug report module": "Загрузка модуля Отчет об ошибках",
|
"Loading bug report module": "Загрузка модуля Отчет об ошибках",
|
||||||
"Messages containing <span>keywords</span>": "Сообщения, содержащие определенные <span>ключевые слова</span>",
|
"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 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>.",
|
"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": "Сообщить об ошибке",
|
"Report a bug": "Сообщить об ошибке",
|
||||||
@@ -141,7 +133,7 @@
|
|||||||
"Search": "Поиск",
|
"Search": "Поиск",
|
||||||
"Search…": "Поиск.…",
|
"Search…": "Поиск.…",
|
||||||
"Send": "Отослать",
|
"Send": "Отослать",
|
||||||
"Send logs": "Отправить журналы",
|
"Send logs": "Отправка журналов",
|
||||||
"Sorry, your browser is <b>not</b> able to run Riot.": "К сожалению, ваш браузер <b>не способен</b> запустить Riot.",
|
"Sorry, your browser is <b>not</b> able to run Riot.": "К сожалению, ваш браузер <b>не способен</b> запустить Riot.",
|
||||||
"This Room": "Эта комната",
|
"This Room": "Эта комната",
|
||||||
"Unavailable": "Недоступен",
|
"Unavailable": "Недоступен",
|
||||||
@@ -212,8 +204,18 @@
|
|||||||
"Event Type": "Тип мероприятия",
|
"Event Type": "Тип мероприятия",
|
||||||
"Event Content": "Содержание мероприятия",
|
"Event Content": "Содержание мероприятия",
|
||||||
"State Key": "Ключ состояния",
|
"State Key": "Ключ состояния",
|
||||||
"Invite to this group": "Пригласить в эту группу",
|
|
||||||
"Filter results": "Фильтрация результатов",
|
"Filter results": "Фильтрация результатов",
|
||||||
"You must specify an event type!": "Необходимо указать тип мероприятия!",
|
"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
@@ -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 can’t 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 & 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 & Desktop chat": "Riot/Web & Desktop chat",
|
||||||
|
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||||
|
"Riot/Android & matrix-android-sdk chat": "Riot/Android & 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"
|
||||||
|
}
|
||||||
@@ -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.",
|
"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",
|
"powered by Matrix": "drivs av Matrix",
|
||||||
"Quote": "Citera",
|
"Quote": "Citera",
|
||||||
"Redact": "Dra tillbaka",
|
|
||||||
"Reject": "Avvisa",
|
"Reject": "Avvisa",
|
||||||
"Remove %(name)s from the directory?": "Ta bort %(name)s från katalogen?",
|
"Remove %(name)s from the directory?": "Ta bort %(name)s från katalogen?",
|
||||||
"Remove": "Ta bort",
|
"Remove": "Ta bort",
|
||||||
@@ -197,6 +196,5 @@
|
|||||||
"Thank you!": "Tack!",
|
"Thank you!": "Tack!",
|
||||||
"Back": "Tillbaka",
|
"Back": "Tillbaka",
|
||||||
"Filter results": "Filtrera resultaten",
|
"Filter results": "Filtrera resultaten",
|
||||||
"Explore Room State": "Utforska rumläget",
|
"Explore Room State": "Utforska rumläget"
|
||||||
"Invite to this group": "Bjud in till denna grupp"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)s -ல் %(browserName)s -ன் வழியாக %(appName)s",
|
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)s -ல் %(browserName)s -ன் வழியாக %(appName)s",
|
||||||
"Call invitation": "அழைப்பிற்கான விண்ணப்பம்",
|
"Call invitation": "அழைப்பிற்கான விண்ணப்பம்",
|
||||||
"Can't update user notification settings": "பயனர் அறிவிப்பு அமைப்புகளை மாற்ற முடியவில்லை",
|
"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": "விருப்பிற்கேற்ற வழங்கி இடப்புகள்",
|
"Custom Server Options": "விருப்பிற்கேற்ற வழங்கி இடப்புகள்",
|
||||||
"delete the alias.": "மாற்றை அழி.",
|
"delete the alias.": "மாற்றை அழி.",
|
||||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "அறை மாற்று %(alias)s -ஐ அழித்து, %(name)s -ஐ அடைவிலிருந்து நீக்க வேண்டுமா?",
|
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "அறை மாற்று %(alias)s -ஐ அழித்து, %(name)s -ஐ அடைவிலிருந்து நீக்க வேண்டுமா?",
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
"Favourite": "விருப்பமான",
|
"Favourite": "விருப்பமான",
|
||||||
"Files": "கோப்புகள்",
|
"Files": "கோப்புகள்",
|
||||||
"Filter room names": "அறை பெயர்களை வடிகட்டு",
|
"Filter room names": "அறை பெயர்களை வடிகட்டு",
|
||||||
"Forget": "மறத்தல்",
|
"Forget": "மற",
|
||||||
"Guests can join": "விருந்தினர்கள் சேரலாம்",
|
"Guests can join": "விருந்தினர்கள் சேரலாம்",
|
||||||
"Hide panel": "பலகத்தை மறை",
|
"Hide panel": "பலகத்தை மறை",
|
||||||
"Invite to this room": "இந்த அறைக்கு அழை",
|
"Invite to this room": "இந்த அறைக்கு அழை",
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
"Messages containing my display name": "என் காட்சி பெயர் கொண்ட செய்திகள்",
|
"Messages containing my display name": "என் காட்சி பெயர் கொண்ட செய்திகள்",
|
||||||
"more": "அதிகம்",
|
"more": "அதிகம்",
|
||||||
"Mute": "முடக்கு",
|
"Mute": "முடக்கு",
|
||||||
"No rooms to show": "காண்பதற்கான அறை இல்லை",
|
"No rooms to show": "காண்பிக்க எந்த அறையும் இல்லை",
|
||||||
"Messages containing <span>keywords</span>": "<span>முக்கிய</span> கொண்ட செய்திகள்",
|
"Messages containing <span>keywords</span>": "<span>முக்கிய</span> கொண்ட செய்திகள்",
|
||||||
"Messages containing my user name": "என் பயனர் பெயர் கொண்ட செய்திகள்",
|
"Messages containing my user name": "என் பயனர் பெயர் கொண்ட செய்திகள்",
|
||||||
"Messages in group chats": "குழு அரட்டைகளில் உள்ள செய்திகள்",
|
"Messages in group chats": "குழு அரட்டைகளில் உள்ள செய்திகள்",
|
||||||
@@ -133,5 +133,40 @@
|
|||||||
"You cannot delete this image. (%(code)s)": "இந்த படத்தை நீங்கள் அழிக்க முடியாது. (%(code)s)",
|
"You cannot delete this image. (%(code)s)": "இந்த படத்தை நீங்கள் அழிக்க முடியாது. (%(code)s)",
|
||||||
"You cannot delete this message. (%(code)s)": "இந்த செய்தியை நீங்கள் அழிக்க முடியாது. (%(code)s)",
|
"You cannot delete this message. (%(code)s)": "இந்த செய்தியை நீங்கள் அழிக்க முடியாது. (%(code)s)",
|
||||||
"You are not receiving desktop notifications": "திரை அறிவிப்புகளை நீங்கள் பெறவில்லை",
|
"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 -ற்க்கு நிரல் பங்களிக்க"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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. 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.": "กรุณาติดตั้ง <a href=\"https://www.google.com/chrome\">Chrome</a> หรือ <a href=\"https://getfirefox.com\">Firefox</a> เพื่อประสบการณ์ที่ดีที่สุด",
|
"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": "ปฏิเสธ",
|
"Reject": "ปฏิเสธ",
|
||||||
"Remove": "ลบ",
|
"Remove": "ลบ",
|
||||||
"Messages containing <span>keywords</span>": "ข้อความที่มี<span>คีย์เวิร์ด</span>",
|
"Messages containing <span>keywords</span>": "ข้อความที่มี<span>คีย์เวิร์ด</span>",
|
||||||
@@ -152,7 +151,6 @@
|
|||||||
"Search the room directory": "ค้นหาในไดเรกทอรีห้อง",
|
"Search the room directory": "ค้นหาในไดเรกทอรีห้อง",
|
||||||
"Chat with Riot Bot": "แชทกับบอท Riot",
|
"Chat with Riot Bot": "แชทกับบอท Riot",
|
||||||
"Get started with some tips from Riot Bot!": "มาเริ่มกันด้วยเคล็ดลับเล็กน้อยจากบอท Riot!",
|
"Get started with some tips from Riot Bot!": "มาเริ่มกันด้วยเคล็ดลับเล็กน้อยจากบอท Riot!",
|
||||||
"General discussion about Matrix": "พูดคุยเรื่องทั่วไปเกี่ยวกับ Matrix",
|
|
||||||
"Discussion of all things Matrix!": "พูดคุยทุกเรื่อง เรื่อง Matrix!",
|
"Discussion of all things Matrix!": "พูดคุยทุกเรื่อง เรื่อง Matrix!",
|
||||||
"Riot/Web & Desktop chat": "แชทเกี่ยวกับ Riot บนเว็บและเดสก์ทอป",
|
"Riot/Web & Desktop chat": "แชทเกี่ยวกับ Riot บนเว็บและเดสก์ทอป",
|
||||||
"Riot/iOS & matrix-ios-sdk chat": "แชทเกี่ยวกับ Riot บน iOS และ matrix-ios-sdk",
|
"Riot/iOS & matrix-ios-sdk chat": "แชทเกี่ยวกับ Riot บน iOS และ matrix-ios-sdk",
|
||||||
|
|||||||
@@ -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.",
|
"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",
|
"powered by Matrix": "Matrix tarafından desteklenmektedir",
|
||||||
"Quote": "Alıntı",
|
"Quote": "Alıntı",
|
||||||
"Redact": "Yazıya Dökme",
|
|
||||||
"Reject": "Reddet",
|
"Reject": "Reddet",
|
||||||
"Remove %(name)s from the directory?": "%(name)s'i dizinden kaldırılsın mı ?",
|
"Remove %(name)s from the directory?": "%(name)s'i dizinden kaldırılsın mı ?",
|
||||||
"Remove": "Kaldır",
|
"Remove": "Kaldır",
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
"Expand panel": "Розгорнути панель",
|
"Expand panel": "Розгорнути панель",
|
||||||
"Failed to add tag %(tagName)s to room": "Не вдалось додати до кімнати мітку %(tagName)s",
|
"Failed to add tag %(tagName)s to room": "Не вдалось додати до кімнати мітку %(tagName)s",
|
||||||
"Failed to change settings": "Не вдалось змінити налаштування",
|
"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 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": "Не вдалось отримати перелік прилюдних кімнат",
|
||||||
@@ -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>.",
|
"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",
|
"powered by Matrix": "працює на Matrix",
|
||||||
"Quote": "Цитувати",
|
"Quote": "Цитувати",
|
||||||
"Redact": "Видалити",
|
|
||||||
"Reject": "Відмовитись",
|
"Reject": "Відмовитись",
|
||||||
"Remove %(name)s from the directory?": "Прибрати %(name)s з каталогу?",
|
"Remove %(name)s from the directory?": "Прибрати %(name)s з каталогу?",
|
||||||
"Remove": "Прибрати",
|
"Remove": "Прибрати",
|
||||||
@@ -191,7 +190,7 @@
|
|||||||
"Checking for an update...": "Перевірка оновлень…",
|
"Checking for an update...": "Перевірка оновлень…",
|
||||||
"Error encountered (%(errorDetail)s).": "Трапилась помилка (%(errorDetail)s).",
|
"Error encountered (%(errorDetail)s).": "Трапилась помилка (%(errorDetail)s).",
|
||||||
"No update available.": "Оновлення відсутні.",
|
"No update available.": "Оновлення відсутні.",
|
||||||
"Downloading update...": "Звантажується оновлення…",
|
"Downloading update...": "Звантаженя оновлення…",
|
||||||
"Couldn't load home page": "Не вдалось завантажити домівку",
|
"Couldn't load home page": "Не вдалось завантажити домівку",
|
||||||
"Back": "Назад",
|
"Back": "Назад",
|
||||||
"Bug report sent": "Звіт про помилки відправлений",
|
"Bug report sent": "Звіт про помилки відправлений",
|
||||||
@@ -207,6 +206,15 @@
|
|||||||
"Event Type": "Тип західу",
|
"Event Type": "Тип західу",
|
||||||
"Event Content": "Зміст заходу",
|
"Event Content": "Зміст заходу",
|
||||||
"State Key": "Ключ стану",
|
"State Key": "Ключ стану",
|
||||||
"Invite to this group": "Запросити в цю групу",
|
"Show message in desktop notification": "Показати повідомлення в сповіщення на робочому столі",
|
||||||
"Add room to this group": "Додати кімнату в цю группу"
|
"Edit": "Редактувати",
|
||||||
|
"Unpin Message": "Відкріпити повідомлення",
|
||||||
|
"Pin Message": "Прикріпити повідомлення",
|
||||||
|
"Register": "Зарегіструватись",
|
||||||
|
"Rooms": "Кімнати",
|
||||||
|
"Invite to this community": "Запросити в це суспільство",
|
||||||
|
"Add rooms to this community": "Добавити кімнати в це суспільство",
|
||||||
|
"Toolbox": "Панель інструментів",
|
||||||
|
"Send Account Data": "Відправити данні аккаунта",
|
||||||
|
"Explore Account Data": "Продивитись данні аккаунта"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -203,6 +203,5 @@
|
|||||||
"Event sent!": "事件已发出!",
|
"Event sent!": "事件已发出!",
|
||||||
"Event Type": "事件类型",
|
"Event Type": "事件类型",
|
||||||
"Event Content": "事件内容",
|
"Event Content": "事件内容",
|
||||||
"State Key": "状态密钥",
|
"State Key": "状态密钥"
|
||||||
"Invite to this group": "邀请到这个群组"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,7 +121,6 @@
|
|||||||
"Notify me for anything else": "所有消息都通知我",
|
"Notify me for anything else": "所有消息都通知我",
|
||||||
"Permalink": "永久連結",
|
"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> 來取得最佳體驗。",
|
"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": "拒絕",
|
"Reject": "拒絕",
|
||||||
"Remove %(name)s from the directory?": "自目錄中移除 %(name)s?",
|
"Remove %(name)s from the directory?": "自目錄中移除 %(name)s?",
|
||||||
"remove %(name)s from the directory.": "自目錄中移除 %(name)s。",
|
"remove %(name)s from the directory.": "自目錄中移除 %(name)s。",
|
||||||
@@ -205,8 +204,18 @@
|
|||||||
"Event Type": "事件類型",
|
"Event Type": "事件類型",
|
||||||
"Event Content": "事件內容",
|
"Event Content": "事件內容",
|
||||||
"State Key": "狀態金鑰",
|
"State Key": "狀態金鑰",
|
||||||
"Invite to this group": "邀請進入此群組",
|
|
||||||
"Filter results": "過濾結果",
|
"Filter results": "過濾結果",
|
||||||
"You must specify an event type!": "您必須指定事件類型!",
|
"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": "探索帳號資料"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,8 +38,8 @@ body {
|
|||||||
-webkit-font-smoothing: subpixel-antialiased;
|
-webkit-font-smoothing: subpixel-antialiased;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.error {
|
div.error, div.warning {
|
||||||
color: red;
|
color: $warning-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
@@ -87,6 +87,11 @@ textarea {
|
|||||||
transition: opacity 0.2s ease-in-out;
|
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.
|
/* 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
|
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.
|
flexbox to adapt to the new size and cause the view to keep growing.
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
@import "./matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss";
|
@import "./matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss";
|
||||||
@import "./matrix-react-sdk/views/dialogs/_CreateRoomDialog.scss";
|
@import "./matrix-react-sdk/views/dialogs/_CreateRoomDialog.scss";
|
||||||
@import "./matrix-react-sdk/views/dialogs/_EncryptedEventDialog.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/_QuestionDialog.scss";
|
||||||
@import "./matrix-react-sdk/views/dialogs/_SetMxIdDialog.scss";
|
@import "./matrix-react-sdk/views/dialogs/_SetMxIdDialog.scss";
|
||||||
@import "./matrix-react-sdk/views/dialogs/_UnknownDeviceDialog.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/_ProgressBar.scss";
|
||||||
@import "./matrix-react-sdk/views/elements/_RichText.scss";
|
@import "./matrix-react-sdk/views/elements/_RichText.scss";
|
||||||
@import "./matrix-react-sdk/views/elements/_RoleButton.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/groups/_GroupRoomList.scss";
|
||||||
@import "./matrix-react-sdk/views/login/_InteractiveAuthEntryComponents.scss";
|
@import "./matrix-react-sdk/views/login/_InteractiveAuthEntryComponents.scss";
|
||||||
@import "./matrix-react-sdk/views/login/_ServerConfig.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/_MemberInfo.scss";
|
||||||
@import "./matrix-react-sdk/views/rooms/_MemberList.scss";
|
@import "./matrix-react-sdk/views/rooms/_MemberList.scss";
|
||||||
@import "./matrix-react-sdk/views/rooms/_MessageComposer.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/_PresenceLabel.scss";
|
||||||
@import "./matrix-react-sdk/views/rooms/_RoomHeader.scss";
|
@import "./matrix-react-sdk/views/rooms/_RoomHeader.scss";
|
||||||
@import "./matrix-react-sdk/views/rooms/_RoomList.scss";
|
@import "./matrix-react-sdk/views/rooms/_RoomList.scss";
|
||||||
@@ -84,6 +87,7 @@
|
|||||||
@import "./vector-web/views/dialogs/_SetPasswordDialog.scss";
|
@import "./vector-web/views/dialogs/_SetPasswordDialog.scss";
|
||||||
@import "./vector-web/views/directory/_NetworkDropdown.scss";
|
@import "./vector-web/views/directory/_NetworkDropdown.scss";
|
||||||
@import "./vector-web/views/elements/_ImageView.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/elements/_Spinner.scss";
|
||||||
@import "./vector-web/views/globals/_MatrixToolbar.scss";
|
@import "./vector-web/views/globals/_MatrixToolbar.scss";
|
||||||
@import "./vector-web/views/messages/_DateSeparator.scss";
|
@import "./vector-web/views/messages/_DateSeparator.scss";
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ limitations under the License.
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupView_error {
|
.mx_GroupView_error {
|
||||||
@@ -27,15 +30,15 @@ limitations under the License.
|
|||||||
|
|
||||||
.mx_GroupView_header {
|
.mx_GroupView_header {
|
||||||
max-width: 960px;
|
max-width: 960px;
|
||||||
margin: auto;
|
min-height: 70px;
|
||||||
height: 70px;
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: 20px;
|
padding-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupView_header_view {
|
.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 {
|
.mx_GroupView_header_avatar, .mx_GroupView_header_info {
|
||||||
@@ -53,6 +56,23 @@ limitations under the License.
|
|||||||
pointer-events: none;
|
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 {
|
.mx_GroupView_avatarPicker {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
@@ -102,10 +122,6 @@ limitations under the License.
|
|||||||
border-bottom: 1px solid transparent;
|
border-bottom: 1px solid transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupView_header_name input, .mx_GroupView_header_shortDesc input {
|
|
||||||
width: 400px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupView_header_shortDesc {
|
.mx_GroupView_header_shortDesc {
|
||||||
vertical-align: bottom;
|
vertical-align: bottom;
|
||||||
float: left;
|
float: left;
|
||||||
@@ -133,18 +149,76 @@ limitations under the License.
|
|||||||
top: 5px;
|
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 {
|
.mx_GroupView_membershipSection {
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
margin-bottom: 11px;
|
|
||||||
color: $greyed-fg-color;
|
color: $greyed-fg-color;
|
||||||
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupView_membershipSubSection {
|
.mx_GroupView_membershipSubSection {
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-top: 2px;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupView_membershipSection_description {
|
.mx_GroupView_membershipSection_description {
|
||||||
@@ -152,12 +226,25 @@ limitations under the License.
|
|||||||
line-height: 34px;
|
line-height: 34px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_membershipSection_description .mx_BaseAvatar {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_GroupView_membershipSection .mx_GroupView_textButton {
|
.mx_GroupView_membershipSection .mx_GroupView_textButton {
|
||||||
margin-right: 0px;
|
margin-right: 0px;
|
||||||
margin-top: 0px;
|
margin-top: 0px;
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_memberSettings_toggle label {
|
||||||
|
cursor: pointer;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_memberSettings input {
|
||||||
|
margin-right: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_GroupView_featuredThings {
|
.mx_GroupView_featuredThings {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
@@ -215,7 +302,23 @@ limitations under the License.
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupView_editLongDesc {
|
.mx_GroupView_body .gm-scroll-view > *{
|
||||||
|
margin: 11px 50px 0px 68px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_groupDesc textarea {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
height: 150px;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -18,42 +18,134 @@ limitations under the License.
|
|||||||
max-width: 960px;
|
max-width: 960px;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MyGroups .mx_RoomHeader_simpleHeader {
|
.mx_MyGroups .mx_RoomHeader_simpleHeader {
|
||||||
margin-left: 0px;
|
margin-left: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MyGroups_joinCreateBox {
|
.mx_MyGroups_header {
|
||||||
display: table;
|
/* Keep mid-point of create button aligned with icon in page header */
|
||||||
margin-bottom: 30px;
|
margin-left: 2px;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MyGroups_createBox, .mx_MyGroups_joinBox {
|
.mx_MyGroups_headerCard {
|
||||||
display: table-cell;
|
flex: 1 0 50%;
|
||||||
width: 40%;
|
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 */
|
/* Until the button is wired up */
|
||||||
.mx_MyGroups_joinBox {
|
.mx_MyGroups_joinBox {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
}
|
|
||||||
|
|
||||||
.mx_MyGroups_joinCreateHeader {
|
/* When joinBox wraps onto its own row, it should take up zero height so
|
||||||
font-weight: bold;
|
that there isn't an awkward gap between MyGroups_createBox and
|
||||||
margin-bottom: 10px;
|
MyGroups_content.
|
||||||
}
|
*/
|
||||||
|
height: 0px;
|
||||||
.mx_MyGroups_joinCreateButton {
|
margin: 0px;
|
||||||
float: left;
|
|
||||||
margin: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_MyGroups_joinCreateButton object {
|
|
||||||
/* Otherwise the SVG object absorbs clicks and the button doesn't work */
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MyGroups_content {
|
.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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,6 +150,16 @@ limitations under the License.
|
|||||||
display: block;
|
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_MatrixChat_useCompactLayout {
|
||||||
.mx_RoomStatusBar {
|
.mx_RoomStatusBar {
|
||||||
min-height: 40px;
|
min-height: 40px;
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ limitations under the License.
|
|||||||
min-width: 0px;
|
min-width: 0px;
|
||||||
max-width: 960px;
|
max-width: 960px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: auto;
|
margin: 0px auto;
|
||||||
|
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
border-bottom: 1px solid $primary-hairline-color;
|
border-bottom: 1px solid $primary-hairline-color;
|
||||||
@@ -80,17 +80,32 @@ limitations under the License.
|
|||||||
max-width: 1920px ! important;
|
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;
|
order: 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomView_messagePanel {
|
.mx_RoomView_body .mx_MessageComposer {
|
||||||
order: 4;
|
order: 4;
|
||||||
|
}
|
||||||
|
|
||||||
flex: 1 1 0;
|
.mx_RoomView_messagePanel {
|
||||||
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,18 +146,6 @@ limitations under the License.
|
|||||||
clear: both;
|
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 {
|
li.mx_RoomView_myReadMarker_container {
|
||||||
height: 0px;
|
height: 0px;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
@@ -160,8 +163,6 @@ hr.mx_RoomView_myReadMarker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomView_statusArea {
|
.mx_RoomView_statusArea {
|
||||||
order: 5;
|
|
||||||
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
|
|
||||||
@@ -236,8 +237,6 @@ hr.mx_RoomView_myReadMarker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomView .mx_MessageComposer {
|
.mx_RoomView .mx_MessageComposer {
|
||||||
order: 6;
|
|
||||||
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
margin-right: 2px;
|
margin-right: 2px;
|
||||||
|
|||||||
@@ -252,6 +252,16 @@ input.mx_UserSettings_phoneNumberField {
|
|||||||
display: none;
|
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_advanced_spoiler,
|
||||||
.mx_UserSettings_link {
|
.mx_UserSettings_link {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|||||||
@@ -14,6 +14,14 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
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 */
|
/* Using a textarea for this element, to circumvent autofill */
|
||||||
.mx_ChatInviteDialog_input,
|
.mx_ChatInviteDialog_input,
|
||||||
.mx_ChatInviteDialog_input:focus
|
.mx_ChatInviteDialog_input:focus
|
||||||
@@ -52,9 +60,8 @@ limitations under the License.
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mx_ChatInviteDialog_error {
|
.mx_ChatInviteDialog_error {
|
||||||
position: absolute;
|
margin-top: 10px;
|
||||||
color: $warning-color;
|
color: $warning-color;
|
||||||
line-height: 36px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_ChatInviteDialog_cancel {
|
.mx_ChatInviteDialog_cancel {
|
||||||
|
|||||||
@@ -33,3 +33,30 @@ limitations under the License.
|
|||||||
background-color: $primary-bg-color;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -3,7 +3,8 @@
|
|||||||
// --Matthew
|
// --Matthew
|
||||||
|
|
||||||
.mx_UserPill,
|
.mx_UserPill,
|
||||||
.mx_RoomPill {
|
.mx_RoomPill,
|
||||||
|
.mx_AtRoomPill {
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
@@ -24,7 +25,9 @@
|
|||||||
padding-right: 5px;
|
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;
|
color: $accent-fg-color;
|
||||||
background-color: $mention-user-pill-bg-color;
|
background-color: $mention-user-pill-bg-color;
|
||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
@@ -39,7 +42,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mx_UserPill .mx_BaseAvatar,
|
.mx_UserPill .mx_BaseAvatar,
|
||||||
.mx_RoomPill .mx_BaseAvatar {
|
.mx_RoomPill .mx_BaseAvatar,
|
||||||
|
.mx_AtRoomPill .mx_BaseAvatar {
|
||||||
position: relative;
|
position: relative;
|
||||||
left: -3px;
|
left: -3px;
|
||||||
top: 2px;
|
top: 2px;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -19,18 +19,3 @@ limitations under the License.
|
|||||||
color: $primary-fg-color;
|
color: $primary-fg-color;
|
||||||
cursor: pointer;
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,9 +14,8 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_AppsDrawer {
|
// .mx_AppsDrawer {
|
||||||
margin-bottom: 3px;
|
// }
|
||||||
}
|
|
||||||
|
|
||||||
.mx_AppsContainer {
|
.mx_AppsContainer {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -51,11 +50,13 @@ limitations under the License.
|
|||||||
.mx_AppTile {
|
.mx_AppTile {
|
||||||
max-width: 960px;
|
max-width: 960px;
|
||||||
width: 50%;
|
width: 50%;
|
||||||
margin: 0 5px 2px 0;
|
margin-right: 5px;
|
||||||
border: 1px solid $primary-hairline-color;
|
border: 1px solid $primary-hairline-color;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
// height: 350px;
|
}
|
||||||
// display: inline-block;
|
|
||||||
|
.mx_AppTile:last-child {
|
||||||
|
margin-right: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_AppTileFullWidth {
|
.mx_AppTileFullWidth {
|
||||||
@@ -69,12 +70,16 @@ limitations under the License.
|
|||||||
// display: inline-block;
|
// display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_AppTile, .mx_AppTileFullWidth {
|
||||||
|
margin-top: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_AppTileMenuBar {
|
.mx_AppTileMenuBar {
|
||||||
// height: 15px;
|
// height: 15px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 2px 10px;
|
padding: 2px 10px;
|
||||||
// background-color: $e2e-verified-color;
|
// background-color: $e2e-verified-color;
|
||||||
// border-bottom: 1px solid $primary-hairline-color;
|
border-bottom: 1px solid $primary-hairline-color;
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,8 +121,8 @@ limitations under the License.
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_CloseAppWidget {
|
// .mx_CloseAppWidget {
|
||||||
}
|
// }
|
||||||
|
|
||||||
.mx_AppTileMenuBarWidgetPadding {
|
.mx_AppTileMenuBarWidgetPadding {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
@@ -235,3 +240,7 @@ form.mx_Custom_Widget_Form div {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_AppLoading iframe {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|||||||
@@ -56,6 +56,8 @@ limitations under the License.
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
max-width: 155px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EntityTile_details {
|
.mx_EntityTile_details {
|
||||||
@@ -66,8 +68,6 @@ limitations under the License.
|
|||||||
|
|
||||||
.mx_EntityTile_name_hover {
|
.mx_EntityTile_name_hover {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EntityTile_chevron {
|
.mx_EntityTile_chevron {
|
||||||
|
|||||||
@@ -67,8 +67,9 @@ limitations under the License.
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mx_EventTile .mx_SenderProfile .mx_Flair img {
|
.mx_EventTile .mx_SenderProfile .mx_Flair img {
|
||||||
vertical-align: -3px;
|
vertical-align: -2px;
|
||||||
margin-right: 2px;
|
margin-right: 2px;
|
||||||
|
border-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EventTile .mx_MessageTimestamp {
|
.mx_EventTile .mx_MessageTimestamp {
|
||||||
|
|||||||
@@ -94,3 +94,19 @@ limitations under the License.
|
|||||||
cursor: pointer;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ limitations under the License.
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
.mx_GroupMemberList_invited h2,
|
||||||
.mx_MemberList_invited h2 {
|
.mx_MemberList_invited h2 {
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
color: $h3-color;
|
color: $h3-color;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -60,6 +60,10 @@ limitations under the License.
|
|||||||
padding-right: 12px;
|
padding-right: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_RoomHeader_textButton_danger {
|
||||||
|
background-color: $warning-color;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_RoomHeader_cancelButton {
|
.mx_RoomHeader_cancelButton {
|
||||||
order: 2;
|
order: 2;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -138,10 +142,17 @@ limitations under the License.
|
|||||||
.mx_RoomHeader_name,
|
.mx_RoomHeader_name,
|
||||||
.mx_RoomHeader_avatar,
|
.mx_RoomHeader_avatar,
|
||||||
.mx_RoomHeader_avatarPicker,
|
.mx_RoomHeader_avatarPicker,
|
||||||
.mx_RoomHeader_avatarPicker_edit {
|
.mx_RoomHeader_avatarPicker_edit,
|
||||||
|
.mx_RoomHeader_avatarPicker_remove {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_RoomHeader_avatarPicker_remove {
|
||||||
|
position: absolute;
|
||||||
|
top: -11px;
|
||||||
|
right: -9px;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_RoomHeader_name:hover div:not(.mx_RoomHeader_editable) {
|
.mx_RoomHeader_name:hover div:not(.mx_RoomHeader_editable) {
|
||||||
color: $accent-color;
|
color: $accent-color;
|
||||||
}
|
}
|
||||||
@@ -165,7 +176,7 @@ limitations under the License.
|
|||||||
.mx_RoomHeader_topic {
|
.mx_RoomHeader_topic {
|
||||||
vertical-align: bottom;
|
vertical-align: bottom;
|
||||||
float: left;
|
float: left;
|
||||||
max-height: 42px;
|
max-height: 38px;
|
||||||
color: $settings-grey-fg-color;
|
color: $settings-grey-fg-color;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
@@ -174,6 +185,7 @@ limitations under the License.
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
border-bottom: 1px solid transparent;
|
border-bottom: 1px solid transparent;
|
||||||
|
column-width: 960px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomHeader_avatar {
|
.mx_RoomHeader_avatar {
|
||||||
@@ -187,8 +199,12 @@ limitations under the License.
|
|||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_RoomHeader_avatarPicker {
|
||||||
|
margin-top: 23px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_RoomHeader_avatarPicker_edit {
|
.mx_RoomHeader_avatarPicker_edit {
|
||||||
position: absolute;
|
|
||||||
margin-left: 16px;
|
margin-left: 16px;
|
||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
}
|
}
|
||||||
@@ -217,3 +233,21 @@ limitations under the License.
|
|||||||
.mx_RoomHeader_voipButtons {
|
.mx_RoomHeader_voipButtons {
|
||||||
margin-top: 18px;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -42,4 +42,8 @@ limitations under the License.
|
|||||||
.mx_VideoView_localVideoFeed video {
|
.mx_VideoView_localVideoFeed video {
|
||||||
width: auto;
|
width: auto;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_VideoView_localVideoFeed.mx_VideoView_localVideoFeed_flipped video {
|
||||||
|
transform: scale(-1, 1);
|
||||||
|
}
|
||||||
|
|||||||
@@ -22,7 +22,13 @@ $warning-color: #ff0064;
|
|||||||
$mention-user-pill-bg-color: #ff0064;
|
$mention-user-pill-bg-color: #ff0064;
|
||||||
$other-user-pill-bg-color: rgba(0, 0, 0, 0.1);
|
$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;
|
$preview-bar-bg-color: #f7f7f7;
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ $focus-brightness: 200%;
|
|||||||
// red warning colour
|
// red warning colour
|
||||||
$warning-color: #ff0064;
|
$warning-color: #ff0064;
|
||||||
|
|
||||||
|
// groups
|
||||||
|
$info-plinth-bg-color: #454545;
|
||||||
|
|
||||||
$other-user-pill-bg-color: rgba(255, 255, 255, 0.1);
|
$other-user-pill-bg-color: rgba(255, 255, 255, 0.1);
|
||||||
|
|
||||||
$preview-bar-bg-color: #333;
|
$preview-bar-bg-color: #333;
|
||||||
@@ -131,6 +134,9 @@ $progressbar-color: #000;
|
|||||||
}
|
}
|
||||||
|
|
||||||
// markdown overrides:
|
// markdown overrides:
|
||||||
|
.mx_EventTile_content .markdown-body pre:hover {
|
||||||
|
border-color: #808080 !important; // inverted due to rules below
|
||||||
|
}
|
||||||
.mx_EventTile_content .markdown-body {
|
.mx_EventTile_content .markdown-body {
|
||||||
pre, code {
|
pre, code {
|
||||||
filter: invert(1);
|
filter: invert(1);
|
||||||
|
|||||||
@@ -94,30 +94,26 @@ limitations under the License.
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mx_RightPanel_footer .mx_RightPanel_invite {
|
.mx_RightPanel_footer .mx_RightPanel_invite {
|
||||||
line-height: 35px;
|
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: $primary-fg-color;
|
color: $primary-fg-color;
|
||||||
padding-top: 13px;
|
padding-top: 13px;
|
||||||
padding-left: 5px;
|
padding-left: 5px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.collapsed .mx_RightPanel_footer .mx_RightPanel_invite {
|
.collapsed .mx_RightPanel_footer .mx_RightPanel_invite {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RightPanel_invite .mx_RightPanel_icon {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RightPanel_invite .mx_RightPanel_icon object {
|
.mx_RightPanel_invite .mx_RightPanel_icon object {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RightPanel_invite .mx_RightPanel_message {
|
.mx_RightPanel_invite .mx_RightPanel_message {
|
||||||
display: inline-block;
|
padding-left: 10px;
|
||||||
vertical-align: top;
|
line-height: 18px;
|
||||||
padding-left: 10px
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MatrixChat_useCompactLayout {
|
.mx_MatrixChat_useCompactLayout {
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ limitations under the License.
|
|||||||
display: inline;
|
display: inline;
|
||||||
padding-left: 5px;
|
padding-left: 5px;
|
||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
border-radius: 11px;
|
border-radius: 11px;
|
||||||
background-color: $plinth-bg-color;
|
background-color: $plinth-bg-color;
|
||||||
|
|||||||
@@ -17,3 +17,150 @@ limitations under the License.
|
|||||||
.mx_DevTools_RoomStateExplorer_button, .mx_DevTools_RoomStateExplorer_query {
|
.mx_DevTools_RoomStateExplorer_button, .mx_DevTools_RoomStateExplorer_query {
|
||||||
margin-bottom: 10px;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
10
src/skins/vector/img/icon-delete-pink.svg
Normal 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 |
@@ -1,127 +1,26 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<svg
|
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
<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"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
viewBox="0 0 25 25" style="enable-background:new 0 0 25 25;" xml:space="preserve">
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
<style type="text/css">
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
.st4{fill:none;stroke-miterlimit:10;}
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
</style>
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
<g id="icons_people" transform="translate(50.000000, 725.000000)">
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
<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
|
||||||
width="25px"
|
S-44.4-700-37.5-700z"/>
|
||||||
height="25px"
|
<g id="g4240_1_" transform="translate(6.945774,9.0366549)">
|
||||||
viewBox="0 0 25 25"
|
<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"/>
|
||||||
version="1.1"
|
<circle id="circle4244_1_" class="st4" stroke="#FFFFFF" cx="-44.5" cy="-724.7" r="3.2"/>
|
||||||
id="svg4196"
|
</g>
|
||||||
inkscape:version="0.91 r13725"
|
<g>
|
||||||
sodipodi:docname="icons-room.svg">
|
<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
|
||||||
<metadata
|
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"/>
|
||||||
id="metadata4216">
|
<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
|
||||||
<rdf:RDF>
|
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"/>
|
||||||
<cc:Work
|
<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
|
||||||
rdf:about="">
|
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"/>
|
||||||
<dc:format>image/svg+xml</dc:format>
|
<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
|
||||||
<dc:type
|
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"/>
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
</g>
|
||||||
<dc:title>81230A28-D944-4572-B5DB-C03CAA2B1FCA</dc:title>
|
</g>
|
||||||
</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>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 1.8 KiB |
7
src/skins/vector/img/icons-pin.svg
Normal 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 |
@@ -1,159 +1,23 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<svg
|
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
<svg version="1.1"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
id="svg4196" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 25 25"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
style="enable-background:new 0 0 25 25;" xml:space="preserve">
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
<style type="text/css">
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
.st1{opacity:0.7;}
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
.st2{fill:none;stroke-linecap:round;}
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
</style>
|
||||||
width="25px"
|
<g id="icons_people" transform="translate(50.000000, 725.000000)">
|
||||||
height="25px"
|
<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
|
||||||
viewBox="0 0 25 25"
|
S-44.4-700-37.5-700z"/>
|
||||||
version="1.1"
|
<g id="text3879" transform="matrix(1.0243293,0,0,0.97624855,-24.996028,0.15844144)">
|
||||||
id="svg4196"
|
<g id="Group-3" transform="translate(14.4375,3.9375)" class="st1">
|
||||||
inkscape:version="0.48.4 r9939"
|
<path id="Line" class="st2" stroke="#ffffff" d="M-23.2-733.8h4.6"/>
|
||||||
sodipodi:docname="icons-room.svg">
|
<path id="path3142" class="st2" stroke="#ffffff" d="M-20.9-736.2v4.8"/>
|
||||||
<metadata
|
</g>
|
||||||
id="metadata4216">
|
<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
|
||||||
<rdf:RDF>
|
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
|
||||||
<cc:Work
|
h2.3l0.5-2.6h-2.3L-15.3-728.7"/>
|
||||||
rdf:about="">
|
</g>
|
||||||
<dc:format>image/svg+xml</dc:format>
|
</g>
|
||||||
<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>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -1,109 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<svg
|
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
<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"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
viewBox="0 0 25 25" style="enable-background:new 0 0 25 25;" xml:space="preserve">
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
<g id="icons_people">
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
<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"/>
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
<g id="text3879" transform="scale(1.0243293,0.97624855)">
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
<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
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
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"/>
|
||||||
width="25px"
|
</g>
|
||||||
height="25px"
|
</g>
|
||||||
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>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 814 B |
@@ -69,6 +69,8 @@ import Promise from 'bluebird';
|
|||||||
var request = require('browser-request');
|
var request = require('browser-request');
|
||||||
import * as UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
|
import * as UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
|
||||||
import * as languageHandler from 'matrix-react-sdk/lib/languageHandler';
|
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';
|
import url from 'url';
|
||||||
|
|
||||||
@@ -248,13 +250,13 @@ async function loadApp() {
|
|||||||
|
|
||||||
if (!preventRedirect) {
|
if (!preventRedirect) {
|
||||||
if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
|
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";
|
window.location = "https://itunes.apple.com/us/app/vector.im/id1083446067";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (/Android/.test(navigator.userAgent)) {
|
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";
|
window.location = "https://play.google.com/store/apps/details?id=im.vector.alpha";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||