Compare commits
658 Commits
dbkr/fix_f
...
v0.17.9-rc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5c0af478d | ||
|
|
82cd88cf25 | ||
|
|
e94e712d49 | ||
|
|
021d6c5908 | ||
|
|
b09f0618a9 | ||
|
|
3236f72031 | ||
|
|
99b5695fec | ||
|
|
9e085511fd | ||
|
|
62a49af23f | ||
|
|
751a1dc543 | ||
|
|
baf3df5736 | ||
|
|
7527bdd2c7 | ||
|
|
6c6819f27c | ||
|
|
f7bdc9339c | ||
|
|
8cd37d28da | ||
|
|
b6d70f4434 | ||
|
|
fc4e1485ad | ||
|
|
b35903bb19 | ||
|
|
ff45dc6430 | ||
|
|
5a549519a6 | ||
|
|
0e580635eb | ||
|
|
60d3076038 | ||
|
|
0c428efea0 | ||
|
|
19f1489c92 | ||
|
|
17983c47d8 | ||
|
|
df155293b1 | ||
|
|
6ca0b3ad03 | ||
|
|
c2038a5ccc | ||
|
|
cb628d0799 | ||
|
|
7c4f67b1a1 | ||
|
|
a82f9d5266 | ||
|
|
b6493a2f82 | ||
|
|
74c81d6921 | ||
|
|
02eb8a284c | ||
|
|
bf2d792d94 | ||
|
|
10294ab240 | ||
|
|
88ff92a658 | ||
|
|
8d9987a6b5 | ||
|
|
6ba471421f | ||
|
|
5310b4c14b | ||
|
|
69567f9806 | ||
|
|
0007e669fb | ||
|
|
7247e97ff0 | ||
|
|
844dbcf740 | ||
|
|
10671aa06e | ||
|
|
373f850002 | ||
|
|
ac34ca11df | ||
|
|
710e295b44 | ||
|
|
c3b05cb34e | ||
|
|
b5c27ca074 | ||
|
|
704a599811 | ||
|
|
1dfaf70562 | ||
|
|
dc92b126c7 | ||
|
|
c6f70cb72c | ||
|
|
f701e2601a | ||
|
|
8cb8890ab3 | ||
|
|
a7a5679bfa | ||
|
|
03587abff1 | ||
|
|
496a5baffd | ||
|
|
8996b6b429 | ||
|
|
d483fb0605 | ||
|
|
c2ec5f39ab | ||
|
|
58f927538f | ||
|
|
d9434c7af5 | ||
|
|
6f54ff9e7f | ||
|
|
9eaba3d3f5 | ||
|
|
4805858ecb | ||
|
|
092ae7ef2f | ||
|
|
bbb128b672 | ||
|
|
15b8d410c0 | ||
|
|
8298e73205 | ||
|
|
819e6d9219 | ||
|
|
d2c87a0331 | ||
|
|
286c5e8895 | ||
|
|
7df77d7e5d | ||
|
|
6804a00af0 | ||
|
|
81c75eb14b | ||
|
|
e604dfe9e8 | ||
|
|
135a5d38ff | ||
|
|
07ed2e8d0a | ||
|
|
2a594414e7 | ||
|
|
d3496c0cb9 | ||
|
|
c15151a0af | ||
|
|
6d1640194e | ||
|
|
06740e5480 | ||
|
|
c338e491fe | ||
|
|
a570ee53a8 | ||
|
|
417a31f1fe | ||
|
|
a4a6f070e4 | ||
|
|
d287abcd68 | ||
|
|
79fd38a899 | ||
|
|
0aa0773ef7 | ||
|
|
154e8bdb50 | ||
|
|
8f37c22917 | ||
|
|
0aeef3187a | ||
|
|
8903eebe17 | ||
|
|
cc4d0af713 | ||
|
|
4a217d9e9f | ||
|
|
122caf7a95 | ||
|
|
a1e5c72eb9 | ||
|
|
7dd163ac85 | ||
|
|
01432d3848 | ||
|
|
d3cae13552 | ||
|
|
061838bdab | ||
|
|
24846a1d64 | ||
|
|
0b31d32793 | ||
|
|
71403980cc | ||
|
|
f8ab754af4 | ||
|
|
fd3ed9e119 | ||
|
|
b53c86c5f4 | ||
|
|
cbe6d31ee3 | ||
|
|
5810221181 | ||
|
|
e9f4594eb9 | ||
|
|
2f991d190f | ||
|
|
ae90b9877a | ||
|
|
786c2a1fd7 | ||
|
|
eef4f7c4cf | ||
|
|
36cc5de0e7 | ||
|
|
854798f470 | ||
|
|
ca305399c3 | ||
|
|
00a8d44ce1 | ||
|
|
79c7f331c9 | ||
|
|
409c48efcb | ||
|
|
29f3ff155a | ||
|
|
6c1deb41be | ||
|
|
4574415e97 | ||
|
|
f05646c5a1 | ||
|
|
a6f8f707f3 | ||
|
|
e19dbe4f3b | ||
|
|
d393cd67f7 | ||
|
|
c80f5ddcd1 | ||
|
|
a02009d31f | ||
|
|
a4ed1afeb5 | ||
|
|
1fea7c022e | ||
|
|
e7f5aee9fb | ||
|
|
d3805f7545 | ||
|
|
70891f41a5 | ||
|
|
cebba5bfa3 | ||
|
|
0f5c62d3cc | ||
|
|
f9fa338960 | ||
|
|
ad7ac26ff3 | ||
|
|
10efaaa078 | ||
|
|
bb353b940e | ||
|
|
9732d10f24 | ||
|
|
9b80aa76ce | ||
|
|
bc935012da | ||
|
|
e4025f1aff | ||
|
|
e2b55315a6 | ||
|
|
1f8b0f2135 | ||
|
|
a9a45dc32b | ||
|
|
f7138c0516 | ||
|
|
d080a204a3 | ||
|
|
fd31d58128 | ||
|
|
b7622d8551 | ||
|
|
c470e2dcfb | ||
|
|
fe11ae73db | ||
|
|
70fe4f67ee | ||
|
|
6abd1de8b8 | ||
|
|
16b150039a | ||
|
|
ca1dec8e13 | ||
|
|
f81d3bc903 | ||
|
|
88132067ad | ||
|
|
f5eff7d349 | ||
|
|
5f35b9903d | ||
|
|
221f75542a | ||
|
|
d0fcf3c952 | ||
|
|
62f664c592 | ||
|
|
deaeb1a715 | ||
|
|
c1dfbd6993 | ||
|
|
2854c0969b | ||
|
|
1de5e61888 | ||
|
|
47493fa7d9 | ||
|
|
ecfafc613f | ||
|
|
a7ea51fc3e | ||
|
|
35147c6514 | ||
|
|
2518976326 | ||
|
|
40cb46de46 | ||
|
|
bb907d49c9 | ||
|
|
231ca253f2 | ||
|
|
2a80d33a89 | ||
|
|
2202ff1ccd | ||
|
|
a138a9c6ec | ||
|
|
3d8d66547f | ||
|
|
17e84bf815 | ||
|
|
41540842eb | ||
|
|
65cc3000ee | ||
|
|
1fc8592ef6 | ||
|
|
4afb5caa4e | ||
|
|
9830ab3aad | ||
|
|
005e4aa1bd | ||
|
|
de7d3ba701 | ||
|
|
05884ba279 | ||
|
|
a0e067510c | ||
|
|
2784d1b31c | ||
|
|
8e9d7d97f6 | ||
|
|
f483fd3916 | ||
|
|
4e65b5f73b | ||
|
|
47ade14e07 | ||
|
|
5ad9d2094a | ||
|
|
848bd8f553 | ||
|
|
74f2266d89 | ||
|
|
03323bc294 | ||
|
|
df1eb9f5cb | ||
|
|
aaa9c82758 | ||
|
|
ba51c0721e | ||
|
|
845b40d815 | ||
|
|
69adab2c9f | ||
|
|
80f0964342 | ||
|
|
56372b6a5f | ||
|
|
af4d3da7a8 | ||
|
|
ae1971f5d2 | ||
|
|
5c184e501d | ||
|
|
3488f04dd4 | ||
|
|
92db2b85f3 | ||
|
|
060a7807f0 | ||
|
|
52954982a3 | ||
|
|
dec60a9c85 | ||
|
|
39b5e4b1e3 | ||
|
|
d836ad8dbc | ||
|
|
d035efb14e | ||
|
|
401c85ad5b | ||
|
|
54c46df0dc | ||
|
|
a5fb33de02 | ||
|
|
4c2dace4ca | ||
|
|
b09aa2cff3 | ||
|
|
e277d02f83 | ||
|
|
f31ccaacef | ||
|
|
d4576dcf9f | ||
|
|
4e6f48df03 | ||
|
|
218da8a18a | ||
|
|
e28180f3d5 | ||
|
|
bccccb2758 | ||
|
|
46587450cb | ||
|
|
f17712fab3 | ||
|
|
c5ee92f4c3 | ||
|
|
24f292f360 | ||
|
|
4f5b61b798 | ||
|
|
a9e98e6711 | ||
|
|
3286acd306 | ||
|
|
085dcfe7bc | ||
|
|
b6d5f350e4 | ||
|
|
4d3df8b86b | ||
|
|
a356264801 | ||
|
|
d32dbb6d10 | ||
|
|
70319e4939 | ||
|
|
92b2980b41 | ||
|
|
eabcc9261d | ||
|
|
ad5be455bb | ||
|
|
20ce990763 | ||
|
|
30f0a7932b | ||
|
|
33d248d1e4 | ||
|
|
f69869ac1e | ||
|
|
d256194255 | ||
|
|
4de63e612d | ||
|
|
7f50acd886 | ||
|
|
18f8ea8519 | ||
|
|
0a4e3379f9 | ||
|
|
e355753900 | ||
|
|
712d020dfa | ||
|
|
5fc53f19f4 | ||
|
|
957fde964b | ||
|
|
b9688acdf5 | ||
|
|
2a8c7b260a | ||
|
|
a2c7ef5424 | ||
|
|
a1a417329c | ||
|
|
1f81ed306d | ||
|
|
2d78bc95ec | ||
|
|
4f720e9c3b | ||
|
|
0374c91ee7 | ||
|
|
894ad32e83 | ||
|
|
f3ee639dcc | ||
|
|
74a2b5a958 | ||
|
|
4e4906605b | ||
|
|
894e31fe73 | ||
|
|
67a762aeaf | ||
|
|
28f1140588 | ||
|
|
ac81080185 | ||
|
|
bc8323f96b | ||
|
|
a38661c0f0 | ||
|
|
57cdd26d4d | ||
|
|
582b67c42e | ||
|
|
44791a65b8 | ||
|
|
f3214b7891 | ||
|
|
81dfe506ac | ||
|
|
2356524d1c | ||
|
|
a371bede4d | ||
|
|
1f34d2d644 | ||
|
|
2166213400 | ||
|
|
c4f6158f46 | ||
|
|
7e33ea351d | ||
|
|
9e916cdd5c | ||
|
|
b7843a5d46 | ||
|
|
41e03333a7 | ||
|
|
c57c653535 | ||
|
|
8793ad9f4f | ||
|
|
07b56426ad | ||
|
|
43f9f2a0f2 | ||
|
|
d01824f711 | ||
|
|
841c8fd41d | ||
|
|
4041f3db5c | ||
|
|
91304e70a1 | ||
|
|
27c23058dc | ||
|
|
c511902356 | ||
|
|
8d7cec2a94 | ||
|
|
2b037ee146 | ||
|
|
c6da122e41 | ||
|
|
67e9606d55 | ||
|
|
1b8f1f5610 | ||
|
|
4c6bb8846b | ||
|
|
11a1915e61 | ||
|
|
e58ac74aa2 | ||
|
|
2b18aa7d79 | ||
|
|
0f9c8235e1 | ||
|
|
8b0ae88987 | ||
|
|
d8aaae6d42 | ||
|
|
ce4c71ccfb | ||
|
|
5ef141913b | ||
|
|
d27db5a1c7 | ||
|
|
c2bd6e6da1 | ||
|
|
d6406b48fd | ||
|
|
d5b42d99f2 | ||
|
|
42bac1620e | ||
|
|
09130582ad | ||
|
|
73239f5535 | ||
|
|
22abe5a815 | ||
|
|
736450e184 | ||
|
|
d10fda36af | ||
|
|
8639b2858b | ||
|
|
f47a9f93a5 | ||
|
|
52bbd8c764 | ||
|
|
8ef2eec504 | ||
|
|
1c5f16c332 | ||
|
|
588369d297 | ||
|
|
e23195fd86 | ||
|
|
1b0cafd956 | ||
|
|
81a624146b | ||
|
|
9c8ef4240c | ||
|
|
b59edf2690 | ||
|
|
daa3e1351b | ||
|
|
d00ca02c25 | ||
|
|
207106ea46 | ||
|
|
c150d97eaf | ||
|
|
6231cf3496 | ||
|
|
57999b460b | ||
|
|
e2bad5bdc8 | ||
|
|
5170635a1f | ||
|
|
1db5c64f3e | ||
|
|
9e4aa50567 | ||
|
|
2b91595aa9 | ||
|
|
2209059e84 | ||
|
|
b335da75db | ||
|
|
7cfda97b82 | ||
|
|
01f4e9b2a5 | ||
|
|
2bef30635c | ||
|
|
447c133d82 | ||
|
|
fbe6595b19 | ||
|
|
86b738dd79 | ||
|
|
b30fd9d3bf | ||
|
|
e54865b7ec | ||
|
|
2041b77b39 | ||
|
|
f7f21a006e | ||
|
|
51459ba2e2 | ||
|
|
a76908e2fd | ||
|
|
f79da66c36 | ||
|
|
8a64b47644 | ||
|
|
9a0690fb95 | ||
|
|
cdcdab82eb | ||
|
|
32ea24f8ce | ||
|
|
656d0e0ff4 | ||
|
|
49523ba8d1 | ||
|
|
a3b1b1ec60 | ||
|
|
dd8ed7cc77 | ||
|
|
0b09432b7e | ||
|
|
2ba60a7893 | ||
|
|
2a0cc21dfe | ||
|
|
472e55cea5 | ||
|
|
b579285f23 | ||
|
|
c46963807e | ||
|
|
1a73284b0c | ||
|
|
37e848eee9 | ||
|
|
8a167d2743 | ||
|
|
0ab6d81abb | ||
|
|
1d00254d6c | ||
|
|
2e1392ccf8 | ||
|
|
970c3dc6de | ||
|
|
fce68e491a | ||
|
|
2a4b322ec1 | ||
|
|
95018efa52 | ||
|
|
f31f16cd0d | ||
|
|
5df085848b | ||
|
|
8c82ce0c21 | ||
|
|
1d50eb0d7f | ||
|
|
789ec0baef | ||
|
|
30d7ee892e | ||
|
|
3a3f3f664a | ||
|
|
6de1f3e593 | ||
|
|
dcaea6d78f | ||
|
|
65e690bad7 | ||
|
|
9ea31042db | ||
|
|
675d617dbc | ||
|
|
a79e9b4fd6 | ||
|
|
f39e3f385c | ||
|
|
ad9f786646 | ||
|
|
8f6226d410 | ||
|
|
8a18488b1e | ||
|
|
53b179b22b | ||
|
|
dcde74bc09 | ||
|
|
86a6f1e932 | ||
|
|
10ed13acc0 | ||
|
|
ccf52d3bff | ||
|
|
b05a8b6dd3 | ||
|
|
1b32e9a475 | ||
|
|
d3f94a4847 | ||
|
|
764797e211 | ||
|
|
31c4cf968b | ||
|
|
6e0aeeea83 | ||
|
|
88745a9f36 | ||
|
|
8bd832b449 | ||
|
|
5d2bf37ac9 | ||
|
|
f248da3e08 | ||
|
|
8e5b67d7c9 | ||
|
|
f5a257ca79 | ||
|
|
ed90c491e2 | ||
|
|
ea00df0466 | ||
|
|
96b624e941 | ||
|
|
25c0656106 | ||
|
|
b361241c29 | ||
|
|
5b32ecb719 | ||
|
|
d8c126f320 | ||
|
|
6cd979d8d3 | ||
|
|
c6c2a77c3a | ||
|
|
0458aec320 | ||
|
|
b2ae1926a6 | ||
|
|
1ee4a7ec63 | ||
|
|
7e03b25030 | ||
|
|
c68623ddb0 | ||
|
|
847df2f75b | ||
|
|
73be5005c2 | ||
|
|
c36b42af71 | ||
|
|
db3ffd29da | ||
|
|
d7ebd88804 | ||
|
|
75e9489db5 | ||
|
|
a94f5dd692 | ||
|
|
0de36d331f | ||
|
|
de713c564f | ||
|
|
7e3cb3ba31 | ||
|
|
6ada5e5b26 | ||
|
|
aee6b28469 | ||
|
|
c08f31aa76 | ||
|
|
768e206c4a | ||
|
|
84fbee085d | ||
|
|
3126bf6561 | ||
|
|
e193b65bc7 | ||
|
|
fb43e49954 | ||
|
|
41575382ce | ||
|
|
62653d39b3 | ||
|
|
79cf34b72e | ||
|
|
5b3a462247 | ||
|
|
ee6fc5859c | ||
|
|
f13bf59a82 | ||
|
|
f9868b6100 | ||
|
|
f9e7af6e90 | ||
|
|
9030435ba4 | ||
|
|
47cfe7a877 | ||
|
|
a182174fba | ||
|
|
ef91fce621 | ||
|
|
7d47aebfc5 | ||
|
|
b805dbf4b9 | ||
|
|
3847388ed0 | ||
|
|
d6ff9a0297 | ||
|
|
9fa5f16ca0 | ||
|
|
5d7fb0e388 | ||
|
|
9dd37ac9e2 | ||
|
|
32c66e9d1a | ||
|
|
ef341d4333 | ||
|
|
79bc81317d | ||
|
|
33a2e068f6 | ||
|
|
9a3e98ac8f | ||
|
|
e03248929d | ||
|
|
1ed2935eb6 | ||
|
|
50e35de609 | ||
|
|
17180d31d7 | ||
|
|
65f101e7bb | ||
|
|
58de839621 | ||
|
|
787252ef81 | ||
|
|
b80180df22 | ||
|
|
e0bb6183a6 | ||
|
|
20dd2c0b58 | ||
|
|
8a4a6b2023 | ||
|
|
ca2533cafa | ||
|
|
fb7a8b7696 | ||
|
|
a4b58f4d83 | ||
|
|
ddbac1ad9f | ||
|
|
07772ef5a2 | ||
|
|
57c79c7133 | ||
|
|
05e0e842d6 | ||
|
|
93ea9d7c36 | ||
|
|
b6fa68370b | ||
|
|
bd3eedbda9 | ||
|
|
581c95d093 | ||
|
|
cd9821f87e | ||
|
|
10881587e9 | ||
|
|
5f6b60370d | ||
|
|
1bfe4513ac | ||
|
|
b97ae0246d | ||
|
|
8bc0188c53 | ||
|
|
66ca9a355b | ||
|
|
ec62b5f03c | ||
|
|
3467ca5230 | ||
|
|
d5b21021fb | ||
|
|
4656d25590 | ||
|
|
b1f0f33204 | ||
|
|
d353c13bf1 | ||
|
|
8872a6a24a | ||
|
|
8b0de948d0 | ||
|
|
2e7da36af0 | ||
|
|
38c295427a | ||
|
|
2025cc7747 | ||
|
|
e5fd579935 | ||
|
|
3bd97650dc | ||
|
|
1e8bb5e852 | ||
|
|
6722eedf7a | ||
|
|
53dfdbda08 | ||
|
|
e857ab762c | ||
|
|
14f5d2a489 | ||
|
|
07456ee174 | ||
|
|
b128431128 | ||
|
|
d606ad99b7 | ||
|
|
3598df0d28 | ||
|
|
b90017ff15 | ||
|
|
6bfc90bbe1 | ||
|
|
4e6c2fdd1c | ||
|
|
25439702bb | ||
|
|
145fb69bdd | ||
|
|
f759bfb1f6 | ||
|
|
fb87d97d25 | ||
|
|
0a4614247f | ||
|
|
790eeb1a09 | ||
|
|
6640e709f8 | ||
|
|
c4ecf40d1c | ||
|
|
02ab1fded2 | ||
|
|
b2eebeee18 | ||
|
|
f2bd4a4b5c | ||
|
|
ecfefd6b21 | ||
|
|
50e430d8dc | ||
|
|
96cc5154cd | ||
|
|
e9f0f84152 | ||
|
|
7eb14ad12c | ||
|
|
e5641fe71c | ||
|
|
0b3c0f4a77 | ||
|
|
3987621b12 | ||
|
|
be5aa59e39 | ||
|
|
ecc86def9e | ||
|
|
358b676d04 | ||
|
|
fece64039d | ||
|
|
b93f98252b | ||
|
|
9063a96629 | ||
|
|
9b2fa966f1 | ||
|
|
d2e28122b3 | ||
|
|
ebb08a57c8 | ||
|
|
030fc041be | ||
|
|
6e922166e7 | ||
|
|
f94abb5611 | ||
|
|
8f4953c182 | ||
|
|
0771549ef3 | ||
|
|
445a5b4f38 | ||
|
|
c2fccb7e14 | ||
|
|
d3cf60fafb | ||
|
|
6c5c3c3454 | ||
|
|
82a27d7fa3 | ||
|
|
2ea7ad6d7b | ||
|
|
3a30feaa52 | ||
|
|
98c9dd23d5 | ||
|
|
fb0bbf31c4 | ||
|
|
e87c44c38b | ||
|
|
371ea7c078 | ||
|
|
0e00677851 | ||
|
|
7f50fb3023 | ||
|
|
9dc61307fa | ||
|
|
83d9ca080a | ||
|
|
a8a5d9e053 | ||
|
|
d6a226e6bd | ||
|
|
5bab9a7e34 | ||
|
|
81c2bf6814 | ||
|
|
e69f7602ea | ||
|
|
d2e4d3bc1c | ||
|
|
0e2ee5f127 | ||
|
|
dd7ae83226 | ||
|
|
48a16464d5 | ||
|
|
76d4a4f3fe | ||
|
|
8afdbab9d5 | ||
|
|
9235c0dcfa | ||
|
|
ff8f617fc6 | ||
|
|
95b09cde60 | ||
|
|
c26cde2f6f | ||
|
|
181efcfbae | ||
|
|
d291a7cccd | ||
|
|
5c722f31ff | ||
|
|
c56b54eddd | ||
|
|
4d02d28aef | ||
|
|
cb061d80fa | ||
|
|
9b055171ab | ||
|
|
3df214c56e | ||
|
|
d69084f31e | ||
|
|
02a185f2fe | ||
|
|
53f44c5459 | ||
|
|
137665685d | ||
|
|
3d1c2fa5f1 | ||
|
|
6dad8e695e | ||
|
|
1eb82d97ae | ||
|
|
a17a9521b4 | ||
|
|
2dc1c5c618 | ||
|
|
d5a07a446d | ||
|
|
7232c01a80 | ||
|
|
b8f7025f2a | ||
|
|
73e4fcafdc | ||
|
|
45661dd960 | ||
|
|
18ba570c74 | ||
|
|
5923417654 | ||
|
|
8b99a72f2c | ||
|
|
981bd94615 | ||
|
|
083dd4eeec | ||
|
|
8d4d16bde1 | ||
|
|
8e218f12b4 | ||
|
|
3dcf194960 | ||
|
|
ee9f781adc | ||
|
|
e5eb617447 | ||
|
|
864057e8ee | ||
|
|
cb51ad929e | ||
|
|
83c20f5d5d | ||
|
|
ff93ace4cc | ||
|
|
ae3158ff00 | ||
|
|
3bec9c5eb4 | ||
|
|
964a3bc35b | ||
|
|
ed51a8794d | ||
|
|
b8556671c5 | ||
|
|
6b2c8539a3 | ||
|
|
e165c42377 | ||
|
|
845bb3fa09 | ||
|
|
0abaff5aed | ||
|
|
e4837af72e | ||
|
|
82f51fb476 | ||
|
|
f012dd5f31 | ||
|
|
c94d5c1a9a | ||
|
|
9eb449484e | ||
|
|
5aed7a375d | ||
|
|
aa82513c7e | ||
|
|
4107c64ac2 | ||
|
|
a8e578f5b8 | ||
|
|
6d74d5f8b7 | ||
|
|
ff214c48f5 | ||
|
|
a012522e88 | ||
|
|
9036f14e84 | ||
|
|
e450f31588 | ||
|
|
7c15c6847b | ||
|
|
9cb26c8748 | ||
|
|
1396a26b6d | ||
|
|
69bb020e5c |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -19,3 +19,4 @@ electron/pub
|
||||
/config.json.*
|
||||
/config.local*.json
|
||||
/src/component-index.js
|
||||
/.tmp
|
||||
|
||||
25
.travis.yml
25
.travis.yml
@@ -11,25 +11,18 @@ sudo: required
|
||||
language: node_js
|
||||
node_js:
|
||||
# make sure we work with a range of node versions.
|
||||
# As of the time of writing:
|
||||
# - 4.x is still in LTS (until April 2018), but some of our deps (notably
|
||||
# extract-zip) don't work with it
|
||||
# - 5.x has been EOLed for nearly a year.
|
||||
# - 6.x is the active 'LTS' version
|
||||
# - 7.x is no longer supported
|
||||
# - 8.x is the current 'current' version (until October 2017)
|
||||
#
|
||||
# see: https://github.com/nodejs/LTS/
|
||||
#
|
||||
# anything before 6.3 ships with npm 3.9 or earlier, which had problems
|
||||
# with symlinks in node_modules (see
|
||||
# https://github.com/npm/npm/releases/tag/v3.10.0 'FIXES AND REFACTORING').
|
||||
- 6.3
|
||||
- 6
|
||||
- 7
|
||||
# Current status of node versions: https://github.com/nodejs/LTS/
|
||||
# We don't work with node 6 because it doesn't support package-lock
|
||||
# files which we need to avoid the broken version of base-x
|
||||
- 8
|
||||
- 10
|
||||
addons:
|
||||
chrome: stable
|
||||
install:
|
||||
# clone the deps with depth 1: we know we will only ever need that one
|
||||
# commit.
|
||||
- scripts/fetch-develop.deps.sh --depth 1 && npm install
|
||||
- npm install && scripts/fetch-develop.deps.sh --depth 1
|
||||
script:
|
||||
- npm run test
|
||||
- npm run lint
|
||||
|
||||
516
CHANGELOG.md
516
CHANGELOG.md
@@ -1,3 +1,517 @@
|
||||
Changes in [0.17.9-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.9-rc.1) (2019-01-17)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.8...v0.17.9-rc.1)
|
||||
|
||||
* Merge develop into experimental
|
||||
[\#8003](https://github.com/vector-im/riot-web/pull/8003)
|
||||
* Electron: Load app from custom protocol
|
||||
[\#7943](https://github.com/vector-im/riot-web/pull/7943)
|
||||
* Fix the IndexedDB worker
|
||||
[\#7920](https://github.com/vector-im/riot-web/pull/7920)
|
||||
* Make clear that the Debian package is for desktop
|
||||
[\#7919](https://github.com/vector-im/riot-web/pull/7919)
|
||||
* Run the Desktop app in a sandbox
|
||||
[\#7907](https://github.com/vector-im/riot-web/pull/7907)
|
||||
* Update to new electron single instance API
|
||||
[\#7908](https://github.com/vector-im/riot-web/pull/7908)
|
||||
* Update the tests to match https://github.com/matrix-org/matrix-react-
|
||||
sdk/pull/2340
|
||||
[\#7834](https://github.com/vector-im/riot-web/pull/7834)
|
||||
|
||||
Changes in [0.17.8](https://github.com/vector-im/riot-web/releases/tag/v0.17.8) (2018-12-10)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.8-rc.1...v0.17.8)
|
||||
|
||||
* No changes since rc.1
|
||||
|
||||
Changes in [0.17.8-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.8-rc.1) (2018-12-06)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.7...v0.17.8-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#7784](https://github.com/vector-im/riot-web/pull/7784)
|
||||
* Add a function to send a rageshake from the console
|
||||
[\#7755](https://github.com/vector-im/riot-web/pull/7755)
|
||||
* Re-apply "Run lint on travis builds and use modern node versions"
|
||||
[\#7738](https://github.com/vector-im/riot-web/pull/7738)
|
||||
* Revert "Run lint on travis builds and use modern node versions"
|
||||
[\#7737](https://github.com/vector-im/riot-web/pull/7737)
|
||||
* Run lint on travis builds and use modern node versions
|
||||
[\#7490](https://github.com/vector-im/riot-web/pull/7490)
|
||||
* Fix missing js-sdk logging
|
||||
[\#7736](https://github.com/vector-im/riot-web/pull/7736)
|
||||
* Add $accent-color-50pct as a CSS variable to the Status theme
|
||||
[\#7710](https://github.com/vector-im/riot-web/pull/7710)
|
||||
|
||||
Changes in [0.17.7](https://github.com/vector-im/riot-web/releases/tag/v0.17.7) (2018-11-22)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.6...v0.17.7)
|
||||
|
||||
* Warning when crypto DB is too new to use.
|
||||
* Fix missing entries from js-sdk in rageshake logs
|
||||
|
||||
Changes in [0.17.6](https://github.com/vector-im/riot-web/releases/tag/v0.17.6) (2018-11-19)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.6-rc.2...v0.17.6)
|
||||
|
||||
* No changes since rc.2
|
||||
|
||||
Changes in [0.17.6-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.17.6-rc.2) (2018-11-15)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.6-rc.1...v0.17.6-rc.2)
|
||||
|
||||
* Update to js-sdk 0.14 and react-sdk rc.2. rc.1 was broken as it was built against
|
||||
js-sdk 0.13 which does not use the new Olm 3.0 API.
|
||||
|
||||
Changes in [0.17.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.6-rc.1) (2018-11-15)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.5...v0.17.6-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#7708](https://github.com/vector-im/riot-web/pull/7708)
|
||||
* Add Japanese (#7599)
|
||||
[\#7673](https://github.com/vector-im/riot-web/pull/7673)
|
||||
* Allow Webpack dev server to listen to all interfaces
|
||||
[\#7674](https://github.com/vector-im/riot-web/pull/7674)
|
||||
* Remove the request-only stuff we don't need anymore
|
||||
[\#7637](https://github.com/vector-im/riot-web/pull/7637)
|
||||
* Correct the author of the electron app
|
||||
[\#7615](https://github.com/vector-im/riot-web/pull/7615)
|
||||
* Mock fs, tls, and net to support request in the browser
|
||||
[\#7552](https://github.com/vector-im/riot-web/pull/7552)
|
||||
* Update chokidar to transitively get newer fsevents
|
||||
[\#7598](https://github.com/vector-im/riot-web/pull/7598)
|
||||
* Support WebAssembly version of Olm
|
||||
[\#7385](https://github.com/vector-im/riot-web/pull/7385)
|
||||
|
||||
Changes in [0.17.5](https://github.com/vector-im/riot-web/releases/tag/v0.17.5) (2018-11-13)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.4...v0.17.5)
|
||||
|
||||
* Include change that was supposed to be included in orevious version
|
||||
|
||||
Changes in [0.17.4](https://github.com/vector-im/riot-web/releases/tag/v0.17.4) (2018-11-13)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.3...v0.17.4)
|
||||
|
||||
* Add banner with login/register links for users who aren't logged in
|
||||
|
||||
Changes in [0.17.3](https://github.com/vector-im/riot-web/releases/tag/v0.17.3) (2018-10-29)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.3-rc.1...v0.17.3)
|
||||
|
||||
* Fix for autocompleting text emoji from react-sdk v0.14.2
|
||||
|
||||
Changes in [0.17.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.3-rc.1) (2018-10-24)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.2...v0.17.3-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#7549](https://github.com/vector-im/riot-web/pull/7549)
|
||||
* Don't set tags on notifications
|
||||
[\#7518](https://github.com/vector-im/riot-web/pull/7518)
|
||||
* Update to latest electron builder
|
||||
[\#7498](https://github.com/vector-im/riot-web/pull/7498)
|
||||
* Fix Tinter.setTheme to not fire using Firefox
|
||||
[\#6831](https://github.com/vector-im/riot-web/pull/6831)
|
||||
|
||||
Changes in [0.17.2](https://github.com/vector-im/riot-web/releases/tag/v0.17.2) (2018-10-19)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.1...v0.17.2)
|
||||
|
||||
* Update react-sdk version to "Apply the user's tint once the MatrixClientPeg is moderately ready"
|
||||
* Electron: don't set tags on notifications
|
||||
[\#7518](https://github.com/vector-im/riot-web/pull/7518)
|
||||
|
||||
Changes in [0.17.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.1) (2018-10-18)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.0...v0.17.1)
|
||||
|
||||
* Stop electron crashing
|
||||
[\#7517](https://github.com/vector-im/riot-web/pull/7517)
|
||||
|
||||
Changes in [0.17.0](https://github.com/vector-im/riot-web/releases/tag/v0.17.0) (2018-10-16)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.17.0-rc.1...v0.17.0)
|
||||
|
||||
* Phased rollout of lazyloading
|
||||
[\#7503](https://github.com/vector-im/riot-web/pull/7503)
|
||||
* Update to latest electron builder
|
||||
[\#7501](https://github.com/vector-im/riot-web/pull/7501)
|
||||
|
||||
Changes in [0.17.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.17.0-rc.1) (2018-10-11)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.5...v0.17.0-rc.1)
|
||||
|
||||
* Revert "also commit the lock file when bumping version as it is now
|
||||
committed to the repo"
|
||||
[\#7483](https://github.com/vector-im/riot-web/pull/7483)
|
||||
* Update from Weblate.
|
||||
[\#7478](https://github.com/vector-im/riot-web/pull/7478)
|
||||
* Fix riot-web Promise.defer warnings (#7409)
|
||||
[\#7444](https://github.com/vector-im/riot-web/pull/7444)
|
||||
* Use HTTPS cloning for riot-web too
|
||||
[\#7459](https://github.com/vector-im/riot-web/pull/7459)
|
||||
* Disable webpack-dev-server auto reload
|
||||
[\#7463](https://github.com/vector-im/riot-web/pull/7463)
|
||||
* Silence bluebird warnings
|
||||
[\#7462](https://github.com/vector-im/riot-web/pull/7462)
|
||||
* Fix reskindex on matrix-react-side not being called if using build script
|
||||
[\#7443](https://github.com/vector-im/riot-web/pull/7443)
|
||||
* Fix double-closed tags
|
||||
[\#7454](https://github.com/vector-im/riot-web/pull/7454)
|
||||
* Document how to turn off Piwik and bug reports (#6738)
|
||||
[\#7435](https://github.com/vector-im/riot-web/pull/7435)
|
||||
* also commit the lock file when bumping version as it is now committed to the
|
||||
repo
|
||||
[\#7429](https://github.com/vector-im/riot-web/pull/7429)
|
||||
* Update a bunch of deps
|
||||
[\#7393](https://github.com/vector-im/riot-web/pull/7393)
|
||||
* Don't show mobile guide if deep linking
|
||||
[\#7415](https://github.com/vector-im/riot-web/pull/7415)
|
||||
* Don't show custom server bit on matrix.org
|
||||
[\#7408](https://github.com/vector-im/riot-web/pull/7408)
|
||||
* Update Webpack to version 4
|
||||
[\#6620](https://github.com/vector-im/riot-web/pull/6620)
|
||||
* Webpack4
|
||||
[\#7387](https://github.com/vector-im/riot-web/pull/7387)
|
||||
|
||||
Changes in [0.16.6](https://github.com/vector-im/riot-web/releases/tag/v0.16.6) (2018-10-08)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.5...v0.16.6)
|
||||
|
||||
* Update to matrix-react-sdk v0.13.6
|
||||
|
||||
Changes in [0.16.5](https://github.com/vector-im/riot-web/releases/tag/v0.16.5) (2018-10-01)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.5-rc.1...v0.16.5)
|
||||
|
||||
* Don't show mobile guide if deep linking
|
||||
[\#7415](https://github.com/vector-im/riot-web/pull/7415)
|
||||
* Don't show custom server bit on matrix.org
|
||||
[\#7408](https://github.com/vector-im/riot-web/pull/7408)
|
||||
|
||||
Changes in [0.16.5-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.5-rc.1) (2018-09-27)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.4...v0.16.5-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#7395](https://github.com/vector-im/riot-web/pull/7395)
|
||||
* Reduce the number of terminals required to build riot-web to 1
|
||||
[\#7355](https://github.com/vector-im/riot-web/pull/7355)
|
||||
* Small typo in release notes v0.16.3
|
||||
[\#7274](https://github.com/vector-im/riot-web/pull/7274)
|
||||
|
||||
Changes in [0.16.4](https://github.com/vector-im/riot-web/releases/tag/v0.16.4) (2018-09-10)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.4-rc.1...v0.16.4)
|
||||
|
||||
* No changes since rc.1
|
||||
|
||||
Changes in [0.16.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.4-rc.1) (2018-09-07)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.3...v0.16.4-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#7296](https://github.com/vector-im/riot-web/pull/7296)
|
||||
* Fix config not loading & mobileguide script being loaded in riot
|
||||
[\#7288](https://github.com/vector-im/riot-web/pull/7288)
|
||||
* Instructions for installing mobile apps
|
||||
[\#7272](https://github.com/vector-im/riot-web/pull/7272)
|
||||
* Tidy up index.js
|
||||
[\#7265](https://github.com/vector-im/riot-web/pull/7265)
|
||||
|
||||
Changes in [0.16.3](https://github.com/vector-im/riot-web/releases/tag/v0.16.3) (2018-09-03)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.3-rc.2...v0.16.3)
|
||||
|
||||
* SECURITY FIX: This version (and release candidates) pull in an upstream security
|
||||
fix from electron to fix CVE-2018-15685. Electron users should update as soon as
|
||||
possible. Riot-web run outside of Electron is unaffected.
|
||||
|
||||
Changes in [0.16.3-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.16.3-rc.2) (2018-08-31)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.3-rc.1...v0.16.3-rc.2)
|
||||
|
||||
* Update js-sdk to fix an exception causing the room list to become unresponsive.
|
||||
|
||||
Changes in [0.16.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.3-rc.1) (2018-08-30)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.2...v0.16.3-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#7245](https://github.com/vector-im/riot-web/pull/7245)
|
||||
* Revert "Remove package-lock.json for now"
|
||||
[\#7128](https://github.com/vector-im/riot-web/pull/7128)
|
||||
* Remove package-lock.json for now
|
||||
[\#7115](https://github.com/vector-im/riot-web/pull/7115)
|
||||
|
||||
Changes in [0.16.2](https://github.com/vector-im/riot-web/releases/tag/v0.16.2) (2018-08-23)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.1...v0.16.2)
|
||||
|
||||
* Support new server notices format
|
||||
|
||||
Changes in [0.16.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.1) (2018-08-20)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.1-rc.1...v0.16.1)
|
||||
|
||||
* No changes since rc.1
|
||||
|
||||
Changes in [0.16.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.1-rc.1) (2018-08-16)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.0...v0.16.1-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#7178](https://github.com/vector-im/riot-web/pull/7178)
|
||||
* CSS for MAU warning bar
|
||||
[\#7152](https://github.com/vector-im/riot-web/pull/7152)
|
||||
* CSS for user limit error
|
||||
[\#7139](https://github.com/vector-im/riot-web/pull/7139)
|
||||
* Unpin sanitize-html
|
||||
[\#7132](https://github.com/vector-im/riot-web/pull/7132)
|
||||
* Pin sanitize-html to 0.18.2
|
||||
[\#7129](https://github.com/vector-im/riot-web/pull/7129)
|
||||
|
||||
Changes in [0.16.0](https://github.com/vector-im/riot-web/releases/tag/v0.16.0) (2018-07-30)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.0-rc.2...v0.16.0)
|
||||
|
||||
* Update react-sdk version for bugfixes with Jitsi widgets and the new composer
|
||||
|
||||
Changes in [0.16.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.16.0-rc.2) (2018-07-24)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.16.0-rc.1...v0.16.0-rc.2)
|
||||
|
||||
* Update to react-sdk rc.2 to remove Jitsi conference calling from labs
|
||||
|
||||
Changes in [0.16.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.16.0-rc.1) (2018-07-24)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.7...v0.16.0-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#7082](https://github.com/vector-im/riot-web/pull/7082)
|
||||
* Sample config for jitsi integration URL
|
||||
[\#7055](https://github.com/vector-im/riot-web/pull/7055)
|
||||
|
||||
Changes in [0.15.7](https://github.com/vector-im/riot-web/releases/tag/v0.15.7) (2018-07-09)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.7-rc.2...v0.15.7)
|
||||
|
||||
* No changes since rc.2
|
||||
|
||||
Changes in [0.15.7-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.15.7-rc.2) (2018-07-06)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.7-rc.1...v0.15.7-rc.2)
|
||||
|
||||
* Update react-sdk and js-sdk
|
||||
|
||||
Changes in [0.15.7-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.7-rc.1) (2018-07-04)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.6...v0.15.7-rc.1)
|
||||
|
||||
* add override for colour of room tile text within memberinfo (unreadable)
|
||||
[\#6889](https://github.com/vector-im/riot-web/pull/6889)
|
||||
|
||||
Changes in [0.15.6](https://github.com/vector-im/riot-web/releases/tag/v0.15.6) (2018-06-29)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.6-rc.2...v0.15.6)
|
||||
|
||||
* Pull in bug fixes from react-sdk
|
||||
|
||||
Changes in [0.15.6-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.15.6-rc.2) (2018-06-22)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.6-rc.1...v0.15.6-rc.2)
|
||||
|
||||
* Update to react-sdk rc.2 for fix to slash commands
|
||||
|
||||
Changes in [0.15.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.6-rc.1) (2018-06-21)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.5...v0.15.6-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#6915](https://github.com/vector-im/riot-web/pull/6915)
|
||||
* [electron] Fix desktop app --hidden flag
|
||||
[\#6805](https://github.com/vector-im/riot-web/pull/6805)
|
||||
|
||||
Changes in [0.15.5](https://github.com/vector-im/riot-web/releases/tag/v0.15.5) (2018-06-12)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.5-rc.1...v0.15.5)
|
||||
|
||||
* No changes since rc.1
|
||||
|
||||
Changes in [0.15.5-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.5-rc.1) (2018-06-06)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.4...v0.15.5-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#6846](https://github.com/vector-im/riot-web/pull/6846)
|
||||
|
||||
Changes in [0.15.4](https://github.com/vector-im/riot-web/releases/tag/v0.15.4) (2018-05-25)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.4-rc.1...v0.15.4)
|
||||
|
||||
* Add cookie policy link to desktop app config
|
||||
|
||||
Changes in [0.15.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.4-rc.1) (2018-05-24)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.3...v0.15.4-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#6792](https://github.com/vector-im/riot-web/pull/6792)
|
||||
* Hide URL options for e2e blob: URL images
|
||||
[\#6765](https://github.com/vector-im/riot-web/pull/6765)
|
||||
* Fix right click menu in electron
|
||||
[\#6763](https://github.com/vector-im/riot-web/pull/6763)
|
||||
* Update to electron 2.0.1
|
||||
[\#6764](https://github.com/vector-im/riot-web/pull/6764)
|
||||
* Add instructions for changing translated strings
|
||||
[\#6528](https://github.com/vector-im/riot-web/pull/6528)
|
||||
|
||||
Changes in [0.15.3](https://github.com/vector-im/riot-web/releases/tag/v0.15.3) (2018-05-18)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.2...v0.15.3)
|
||||
|
||||
* Fix right click menu in electron
|
||||
[\#6763](https://github.com/vector-im/riot-web/pull/6763)
|
||||
* Update to electron 2.0.1
|
||||
[\#6764](https://github.com/vector-im/riot-web/pull/6764)
|
||||
* Hide URL options for e2e blob: URL images
|
||||
[\#6765](https://github.com/vector-im/riot-web/pull/6765)
|
||||
|
||||
Changes in [0.15.2](https://github.com/vector-im/riot-web/releases/tag/v0.15.2) (2018-05-17)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.1...v0.15.2)
|
||||
|
||||
* Update to matrix-react-sdk v0.12.5 to fix image size jumps
|
||||
|
||||
Changes in [0.15.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.1) (2018-05-16)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0...v0.15.1)
|
||||
|
||||
* Fix package-lock.json which was causing errors building the Electron app
|
||||
* Update Electron version
|
||||
|
||||
Changes in [0.15.0](https://github.com/vector-im/riot-web/releases/tag/v0.15.0) (2018-05-16)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.6...v0.15.0)
|
||||
|
||||
* No changes since rc.6
|
||||
|
||||
Changes in [0.15.0-rc.6](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.6) (2018-05-15)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.5...v0.15.0-rc.6)
|
||||
|
||||
* Update to matrix-react-sdk 0.12.4-rc.6
|
||||
|
||||
Changes in [0.15.0-rc.5](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.5) (2018-05-15)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.4...v0.15.0-rc.5)
|
||||
|
||||
* Update to matrix-react-sdk 0.12.4-rc.5
|
||||
|
||||
Changes in [0.15.0-rc.4](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.4) (2018-05-14)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.3...v0.15.0-rc.4)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#6726](https://github.com/vector-im/riot-web/pull/6726)
|
||||
* Update to matrix-react-sdk 0.12.4-rc.4
|
||||
|
||||
Changes in [0.15.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.3) (2018-05-11)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.2...v0.15.0-rc.3)
|
||||
|
||||
* Update to matrix-react-sdk 0.12.4-rc.3
|
||||
|
||||
Changes in [0.15.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.2) (2018-05-09)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.15.0-rc.1...v0.15.0-rc.2)
|
||||
|
||||
* Update to matrix-react-sdk 0.12.4-rc.2
|
||||
|
||||
Changes in [0.15.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.15.0-rc.1) (2018-05-09)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.3-rc.1...v0.15.0-rc.1)
|
||||
|
||||
* No changes since 0.14.3-rc.1
|
||||
|
||||
Changes in [0.14.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.14.3-rc.1) (2018-05-09)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.2...v0.14.3-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#6688](https://github.com/vector-im/riot-web/pull/6688)
|
||||
* Don't show presence on matrix.org
|
||||
[\#6638](https://github.com/vector-im/riot-web/pull/6638)
|
||||
* Enforce loading babel-polyfill first
|
||||
[\#6625](https://github.com/vector-im/riot-web/pull/6625)
|
||||
* Update hoek
|
||||
[\#6624](https://github.com/vector-im/riot-web/pull/6624)
|
||||
* Fix args in the release wrapper script
|
||||
[\#6614](https://github.com/vector-im/riot-web/pull/6614)
|
||||
|
||||
Changes in [0.14.2](https://github.com/vector-im/riot-web/releases/tag/v0.14.2) (2018-04-30)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.2-rc.3...v0.14.2)
|
||||
|
||||
* No changes since rc.3
|
||||
|
||||
Changes in [0.14.2-rc.3](https://github.com/vector-im/riot-web/releases/tag/v0.14.2-rc.3) (2018-04-26)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.2-rc.2...v0.14.2-rc.3)
|
||||
|
||||
* Fix CSS dependency versions to be the same as those in react-sdk to fix
|
||||
left panel header positions.
|
||||
|
||||
Changes in [0.14.2-rc.2](https://github.com/vector-im/riot-web/releases/tag/v0.14.2-rc.2) (2018-04-26)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.2-rc.1...v0.14.2-rc.2)
|
||||
|
||||
* Fix Download of attachments in e2e encrypted rooms in Firefox
|
||||
|
||||
Changes in [0.14.2-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.14.2-rc.1) (2018-04-25)
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.1...v0.14.2-rc.1)
|
||||
|
||||
* Update from Weblate.
|
||||
[\#6602](https://github.com/vector-im/riot-web/pull/6602)
|
||||
* Add readme bit on cross-origin renderer
|
||||
[\#6600](https://github.com/vector-im/riot-web/pull/6600)
|
||||
* Update from Weblate.
|
||||
[\#6573](https://github.com/vector-im/riot-web/pull/6573)
|
||||
* Copy media from react-sdk
|
||||
[\#6588](https://github.com/vector-im/riot-web/pull/6588)
|
||||
* Fix favicon
|
||||
[\#6580](https://github.com/vector-im/riot-web/pull/6580)
|
||||
* Update from Weblate.
|
||||
[\#6569](https://github.com/vector-im/riot-web/pull/6569)
|
||||
* move everything not explicitly riot (or status) branded into matrix-react-
|
||||
sdk
|
||||
[\#6500](https://github.com/vector-im/riot-web/pull/6500)
|
||||
* Remove presence management
|
||||
[\#5881](https://github.com/vector-im/riot-web/pull/5881)
|
||||
* change vector-web repo to riot-web in changelog
|
||||
[\#6480](https://github.com/vector-im/riot-web/pull/6480)
|
||||
* Update from Weblate.
|
||||
[\#6473](https://github.com/vector-im/riot-web/pull/6473)
|
||||
* Bump source-map-loader version to avoid bug /w inline base64 maps
|
||||
[\#6472](https://github.com/vector-im/riot-web/pull/6472)
|
||||
* Add CSS for new group admin radio button
|
||||
[\#6415](https://github.com/vector-im/riot-web/pull/6415)
|
||||
* Rxl881/sticker picker styling
|
||||
[\#6447](https://github.com/vector-im/riot-web/pull/6447)
|
||||
* Stickerpacks
|
||||
[\#6242](https://github.com/vector-im/riot-web/pull/6242)
|
||||
* Force gemini on HomePage
|
||||
[\#6368](https://github.com/vector-im/riot-web/pull/6368)
|
||||
* Rename the Riot-Web Translations Room
|
||||
[\#6348](https://github.com/vector-im/riot-web/pull/6348)
|
||||
* Add disable-presence-by-hs option to sample config
|
||||
[\#6350](https://github.com/vector-im/riot-web/pull/6350)
|
||||
* Reword the BugReportDialog.js as per @lampholder
|
||||
[\#6354](https://github.com/vector-im/riot-web/pull/6354)
|
||||
|
||||
Changes in [0.14.1](https://github.com/vector-im/riot-web/releases/tag/v0.14.1) (2018-04-12)
|
||||
============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0...v0.14.1)
|
||||
@@ -18,7 +532,7 @@ Changes in [0.14.0-rc.6](https://github.com/vector-im/riot-web/releases/tag/v0.1
|
||||
======================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.14.0-rc.5...v0.14.0-rc.6)
|
||||
|
||||
* Bump react-sdk to [rc.6](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.12.0-rc.6)
|
||||
* Bump react-sdk to [rc.6](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.12.0-rc.6)
|
||||
|
||||
Changes in [0.14.0-rc.5](https://github.com/vector-im/riot-web/releases/tag/v0.14.0-rc.5) (2018-04-09)
|
||||
======================================================================================================
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Contributing code to Riot
|
||||
=========================
|
||||
|
||||
Riot follows the same pattern as https://github.com/matrix-org/synapse/blob/master/CONTRIBUTING.rst.
|
||||
Riot follows the same pattern as https://github.com/matrix-org/matrix-js-sdk/blob/master/CONTRIBUTING.rst.
|
||||
|
||||
86
README.md
86
README.md
@@ -28,7 +28,8 @@ Note that Chrome does not allow microphone or webcam access for sites served
|
||||
over http (except localhost), so for working VoIP you will need to serve Riot
|
||||
over https.
|
||||
|
||||
### Installation Steps for Debian Stretch
|
||||
### Desktop Installation for Debian Stretch
|
||||
|
||||
1. Add the repository to your sources.list using either of the following two options:
|
||||
- Directly to sources.list: `echo "deb https://riot.im/packages/debian/ stretch main" | sudo tee -a /etc/apt/sources.list`
|
||||
- As a separate entry in sources.list.d: `echo "deb https://riot.im/packages/debian/ stretch main" | sudo tee /etc/apt/sources.list.d/riot.list`
|
||||
@@ -49,18 +50,28 @@ We have put some coarse mitigations into place to try to protect against this
|
||||
situation, but it's still not good practice to do it in the first place. See
|
||||
https://github.com/vector-im/riot-web/issues/1977 for more details.
|
||||
|
||||
The same applies for end-to-end encrypted content, but since this is decrypted
|
||||
on the client, Riot needs a way to supply the decrypted content from a separate
|
||||
origin to the one Riot is hosted on. This currently done with a 'cross origin
|
||||
renderer' which is a small piece of javascript hosted on a different domain.
|
||||
To avoid all Riot installs needing one of these to be set up, riot.im hosts
|
||||
one on usercontent.riot.im which is used by default. See 'config.json' if you'd
|
||||
like to host your own. https://github.com/vector-im/riot-web/issues/6173 tracks
|
||||
progress on replacing this with something better.
|
||||
|
||||
Building From Source
|
||||
====================
|
||||
|
||||
Riot is a modular webapp built with modern ES6 and requires a npm build system
|
||||
to build.
|
||||
|
||||
1. Install or update `node.js` so that your `node` is at least v6.3.0 (and `npm`
|
||||
is at least v3.10.x).
|
||||
1. Install or update `node.js` so that your `node` is at least v8.12.0 (and `npm`
|
||||
is at least v5.x).
|
||||
1. Clone the repo: `git clone https://github.com/vector-im/riot-web.git`.
|
||||
1. Switch to the riot-web directory: `cd riot-web`.
|
||||
1. If you're using the `develop` branch, install the develop versions of the
|
||||
dependencies, as the released ones will be too old:
|
||||
1. If you're using the `develop` branch then it is recommended to set up a proper
|
||||
development environment ("Setting up a dev environment" below) however one can
|
||||
install the develop versions of the dependencies instead:
|
||||
```
|
||||
scripts/fetch-develop.deps.sh
|
||||
```
|
||||
@@ -80,13 +91,9 @@ to build.
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
However, we recommend setting up a proper development environment (see "Setting
|
||||
up a dev environment" below) if you want to run your own copy of the
|
||||
`develop` branch, as it makes it much easier to keep these dependencies
|
||||
up-to-date. Or just use https://riot.im/develop - the continuous integration
|
||||
release of the develop branch.
|
||||
(Note that we don't reference the develop versions in git directly due to
|
||||
https://github.com/npm/npm/issues/3055.)
|
||||
Or just use https://riot.im/develop - the continuous integration release of the
|
||||
develop branch. (Note that we don't reference the develop versions in git directly
|
||||
due to https://github.com/npm/npm/issues/3055.)
|
||||
1. Install the prerequisites: `npm install`.
|
||||
1. Configure the app by copying `config.sample.json` to `config.json` and
|
||||
modifying it (see below for details).
|
||||
@@ -128,7 +135,9 @@ For a good example, see https://riot.im/develop/config.json
|
||||
1. `integrations_rest_url`: URL to the REST interface for the integrations server.
|
||||
1. `integrations_widgets_urls`: list of URLs to the REST interface for the widget integrations server.
|
||||
1. `bug_report_endpoint_url`: endpoint to send bug reports to (must be running a
|
||||
https://github.com/matrix-org/rageshake server)
|
||||
https://github.com/matrix-org/rageshake server). Bug reports are sent when a user clicks
|
||||
"Send Logs" within the application. Bug reports can be disabled by leaving the
|
||||
`bug_report_endpoint_url` out of your config file.
|
||||
1. `roomDirectory`: config for the public room directory. This section is optional.
|
||||
1. `roomDirectory.servers`: List of other homeservers' directories to include in the drop
|
||||
down list. Optional.
|
||||
@@ -141,11 +150,13 @@ For a good example, see https://riot.im/develop/config.json
|
||||
anything else since it is used to isolate the privileges of file attachments to this
|
||||
domain. Default: `https://usercontent.riot.im/v1.html`. This needs to contain v1.html from
|
||||
https://github.com/matrix-org/usercontent/blob/master/v1.html
|
||||
1. `piwik`: an object containing the following properties:
|
||||
1. `url`: The URL of the Piwik instance to use for collecting Analytics
|
||||
1. `whitelistedHSUrls`: a list of HS URLs to not redact from the Analytics
|
||||
1. `whitelistedISUrls`: a list of IS URLs to not redact from the Analytics
|
||||
1. `siteId`: The Piwik Site ID to use when sending Analytics to the Piwik server configured above
|
||||
1. `piwik`: Analytics can be disabled by setting `piwik: false` or by leaving the piwik config
|
||||
option out of your config file. If you want to enable analytics, set `piwik` to be an object
|
||||
containing the following properties:
|
||||
1. `url`: The URL of the Piwik instance to use for collecting analytics
|
||||
1. `whitelistedHSUrls`: a list of HS URLs to not redact from the analytics
|
||||
1. `whitelistedISUrls`: a list of IS URLs to not redact from the analytics
|
||||
1. `siteId`: The Piwik Site ID to use when sending analytics to the Piwik server configured above
|
||||
1. `teamServerConfig`, `teamTokenMap`, `referralBaseUrl`: an obsolete precursor to communities
|
||||
with referral tracking; please ignore it.
|
||||
1. `welcomeUserId`: the user ID of a bot to invite whenever users register that can give them a tour
|
||||
@@ -224,25 +235,17 @@ Before attempting to develop on Riot you **must** read the developer guide
|
||||
for `matrix-react-sdk` at https://github.com/matrix-org/matrix-react-sdk, which
|
||||
also defines the design, architecture and style for Riot too.
|
||||
|
||||
You should also familiarise yourself with the "Here be Dragons" guide to the
|
||||
tame & not-so-tame dragons (gotchas) which exist in the codebase:
|
||||
https://docs.google.com/document/d/12jYzvkidrp1h7liEuLIe6BMdU0NUjndUYI971O06ooM
|
||||
|
||||
The idea of Riot is to be a relatively lightweight "skin" of customisations on
|
||||
top of the underlying `matrix-react-sdk`. `matrix-react-sdk` provides both the
|
||||
higher and lower level React components useful for building Matrix communication
|
||||
apps using React.
|
||||
|
||||
After creating a new component you must run `npm run reskindex` to regenerate
|
||||
the `component-index.js` for the app (used in future for skinning)
|
||||
|
||||
**However, as of July 2016 this layering abstraction is broken due to rapid
|
||||
development on Riot forcing `matrix-react-sdk` to move fast at the expense of
|
||||
maintaining a clear abstraction between the two.** Hacking on Riot inevitably
|
||||
means hacking equally on `matrix-react-sdk`, and there are bits of
|
||||
`matrix-react-sdk` behaviour incorrectly residing in the `riot-web` project
|
||||
(e.g. matrix-react-sdk specific CSS), and a bunch of Riot specific behaviour
|
||||
in the `matrix-react-sdk` (grep for `vector` / `riot`). This separation problem will be
|
||||
solved asap once development on Riot (and thus matrix-react-sdk) has
|
||||
stabilised. Until then, the two projects should basically be considered as a
|
||||
single unit. In particular, `matrix-react-sdk` issues are currently filed
|
||||
against `riot-web` in github.
|
||||
the `component-index.js` for the app (used in future for skinning).
|
||||
|
||||
Please note that Riot is intended to run correctly without access to the public
|
||||
internet. So please don't depend on resources (JS libs, CSS, images, fonts)
|
||||
@@ -259,30 +262,29 @@ having to manually rebuild each time.
|
||||
|
||||
First clone and build `matrix-js-sdk`:
|
||||
|
||||
1. `git clone git@github.com:matrix-org/matrix-js-sdk.git`
|
||||
1. `git clone https://github.com/matrix-org/matrix-js-sdk.git`
|
||||
1. `pushd matrix-js-sdk`
|
||||
1. `git checkout develop`
|
||||
1. `npm install`
|
||||
1. `npm install source-map-loader` # because webpack is made of fail (https://github.com/webpack/webpack/issues/1472)
|
||||
1. `npm install source-map-loader` # because webpack is made of fail (https://github.com/webpack/webpack/issues/1472)
|
||||
1. `popd`
|
||||
|
||||
Then similarly with `matrix-react-sdk`:
|
||||
|
||||
1. `git clone git@github.com:matrix-org/matrix-react-sdk.git`
|
||||
1. `git clone https://github.com/matrix-org/matrix-react-sdk.git`
|
||||
1. `pushd matrix-react-sdk`
|
||||
1. `git checkout develop`
|
||||
1. `npm install`
|
||||
1. `rm -r node_modules/matrix-js-sdk; ln -s ../../matrix-js-sdk node_modules/`
|
||||
1. `npm link ../matrix-js-sdk`
|
||||
1. `popd`
|
||||
|
||||
Finally, build and start Riot itself:
|
||||
|
||||
1. `git clone git@github.com:vector-im/riot-web.git`
|
||||
1. `git clone https://github.com/vector-im/riot-web.git`
|
||||
1. `cd riot-web`
|
||||
1. `git checkout develop`
|
||||
1. `npm install`
|
||||
1. `rm -r node_modules/matrix-js-sdk; ln -s ../../matrix-js-sdk node_modules/`
|
||||
1. `rm -r node_modules/matrix-react-sdk; ln -s ../../matrix-react-sdk node_modules/`
|
||||
1. `npm link ../matrix-js-sdk`
|
||||
1. `npm link ../matrix-react-sdk`
|
||||
1. `npm start`
|
||||
1. Wait a few seconds for the initial build to finish; you should see something like:
|
||||
```
|
||||
@@ -301,10 +303,8 @@ Finally, build and start Riot itself:
|
||||
disables caching, so do NOT use it in production.
|
||||
1. Open http://127.0.0.1:8080/ in your browser to see your newly built Riot.
|
||||
|
||||
When you make changes to `matrix-react-sdk` or `matrix-js-sdk`, you will need
|
||||
to run `npm run build` in the relevant directory. You can do this automatically
|
||||
by instead running `npm start` in the directory, to start a development builder
|
||||
which will watch for changes to the files and rebuild automatically.
|
||||
When you make changes to `matrix-react-sdk` or `matrix-js-sdk` they should be
|
||||
automatically picked up by webpack and built.
|
||||
|
||||
If you add or remove any components from the Riot skin, you will need to rebuild
|
||||
the skin's index by running, `npm run reskindex`.
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
"brand": "Riot",
|
||||
"integrations_ui_url": "https://scalar.vector.im/",
|
||||
"integrations_rest_url": "https://scalar.vector.im/api",
|
||||
"integrations_jitsi_widget_url": "https://scalar.vector.im/api/widgets/jitsi.html",
|
||||
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
|
||||
"features": {
|
||||
"feature_groups": "labs",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
## Requirements
|
||||
|
||||
- A working [Development Setup](../../#setting-up-a-dev-environment)
|
||||
- Including up-to-date versions of matrix-react-sdk and matrix-js-sdk
|
||||
- Node 8 or later
|
||||
- Be able to understand English
|
||||
- Be able to understand the language you want to translate riot-web into
|
||||
|
||||
@@ -30,9 +32,15 @@ function getColorName(hex) {
|
||||
|
||||
1. Check if the import ``import { _t } from 'matrix-react-sdk/lib/languageHandler';`` is present. If not add it to the other import statements. Also import `_td` if needed.
|
||||
1. Add ``_t()`` to your string. (Don't forget curly braces when you assign an expression to JSX attributes in the render method). If the string is introduced at a point before the translation system has not yet been initialized, use `_td()` instead, and call `_t()` at the appropriate time.
|
||||
1. Run `npm run i18n` to update ``src/i18n/strings/en_EN.json`` (if it fails because it can't find the script, your dev environment predates the script, so reinstall/link react-sdk with `npm link ../matrix-react-sdk`). If it segfaults, you may be on Node 6, so try a newer version of node.
|
||||
1. Run `npm run i18n` to update ``src/i18n/strings/en_EN.json``
|
||||
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).
|
||||
|
||||
## Editing existing strings
|
||||
|
||||
1. Edit every occurrence of the string inside `_t()` and `_td()` in the JSX files.
|
||||
1. Run `npm run i18n` to update `src/i18n/strings/en_EN.json`. (Be sure to run this in the same project as the JSX files you just edited.)
|
||||
1. Run `npm run prunei18n` to remove the old string from `src/i18n/strings/*.json`.
|
||||
|
||||
## Adding variables inside a string.
|
||||
|
||||
1. Extend your ``_t()`` call. Instead of ``_t(STRING)`` use ``_t(STRING, {})``
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
"name": "riot-web",
|
||||
"productName": "Riot",
|
||||
"main": "src/electron-main.js",
|
||||
"version": "0.14.1",
|
||||
"version": "0.17.9-rc.1",
|
||||
"description": "A feature-rich client for Matrix.org",
|
||||
"author": "Vector Creations Ltd.",
|
||||
"author": "New Vector Ltd.",
|
||||
"dependencies": {
|
||||
"auto-launch": "^5.0.1",
|
||||
"electron-window-state": "^4.1.0",
|
||||
|
||||
@@ -18,6 +18,19 @@
|
||||
},
|
||||
"piwik": {
|
||||
"url": "https://piwik.riot.im/",
|
||||
"siteId": 1
|
||||
"siteId": 1,
|
||||
"policyUrl": "https://matrix.org/docs/guides/riot_im_cookie_policy"
|
||||
},
|
||||
"phasedRollOut": {
|
||||
"feature_lazyloading": {
|
||||
"offset": 1539684000000,
|
||||
"period": 604800000
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"feature_lazyloading": "enable"
|
||||
},
|
||||
"enable_presence_by_hs_url": {
|
||||
"https://matrix.org": false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
Copyright 2016 Aviral Dasgupta
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
Copyright 2017 Michael Telatynski <7t3chguy@gmail.com>
|
||||
Copyright 2018 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.
|
||||
@@ -23,18 +24,25 @@ const checkSquirrelHooks = require('./squirrelhooks');
|
||||
if (checkSquirrelHooks()) return;
|
||||
|
||||
const argv = require('minimist')(process.argv);
|
||||
const electron = require('electron');
|
||||
const {app, ipcMain, powerSaveBlocker, BrowserWindow, Menu, autoUpdater, protocol} = require('electron');
|
||||
const AutoLaunch = require('auto-launch');
|
||||
const path = require('path');
|
||||
|
||||
const tray = require('./tray');
|
||||
const vectorMenu = require('./vectormenu');
|
||||
const webContentsHandler = require('./webcontents-handler');
|
||||
const updater = require('./updater');
|
||||
const { migrateFromOldOrigin } = require('./originMigrator');
|
||||
|
||||
const windowStateKeeper = require('electron-window-state');
|
||||
|
||||
if (argv.profile) {
|
||||
electron.app.setPath('userData', `${electron.app.getPath('userData')}-${argv.profile}`);
|
||||
// boolean flag set whilst we are doing one-time origin migration
|
||||
// We only serve the origin migration script while we're actually
|
||||
// migrating to mitigate any risk of it being used maliciously.
|
||||
let migratingOrigin = false;
|
||||
|
||||
if (argv['profile']) {
|
||||
app.setPath('userData', `${app.getPath('userData')}-${argv['profile']}`);
|
||||
}
|
||||
|
||||
let vectorConfig = {};
|
||||
@@ -62,14 +70,14 @@ process.on('uncaughtException', function(error) {
|
||||
});
|
||||
|
||||
let focusHandlerAttached = false;
|
||||
electron.ipcMain.on('setBadgeCount', function(ev, count) {
|
||||
electron.app.setBadgeCount(count);
|
||||
if (count === 0) {
|
||||
ipcMain.on('setBadgeCount', function(ev, count) {
|
||||
app.setBadgeCount(count);
|
||||
if (count === 0 && mainWindow) {
|
||||
mainWindow.flashFrame(false);
|
||||
}
|
||||
});
|
||||
|
||||
electron.ipcMain.on('loudNotification', function() {
|
||||
ipcMain.on('loudNotification', function() {
|
||||
if (process.platform === 'win32' && mainWindow && !mainWindow.isFocused() && !focusHandlerAttached) {
|
||||
mainWindow.flashFrame(true);
|
||||
mainWindow.once('focus', () => {
|
||||
@@ -81,39 +89,90 @@ electron.ipcMain.on('loudNotification', function() {
|
||||
});
|
||||
|
||||
let powerSaveBlockerId;
|
||||
electron.ipcMain.on('app_onAction', function(ev, payload) {
|
||||
ipcMain.on('app_onAction', function(ev, payload) {
|
||||
switch (payload.action) {
|
||||
case 'call_state':
|
||||
if (powerSaveBlockerId && electron.powerSaveBlocker.isStarted(powerSaveBlockerId)) {
|
||||
if (powerSaveBlockerId && powerSaveBlocker.isStarted(powerSaveBlockerId)) {
|
||||
if (payload.state === 'ended') {
|
||||
electron.powerSaveBlocker.stop(powerSaveBlockerId);
|
||||
powerSaveBlocker.stop(powerSaveBlockerId);
|
||||
}
|
||||
} else {
|
||||
if (payload.state === 'connected') {
|
||||
powerSaveBlockerId = electron.powerSaveBlocker.start('prevent-display-sleep');
|
||||
powerSaveBlockerId = powerSaveBlocker.start('prevent-display-sleep');
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
electron.app.commandLine.appendSwitch('--enable-usermedia-screen-capturing');
|
||||
|
||||
const shouldQuit = electron.app.makeSingleInstance((commandLine, workingDirectory) => {
|
||||
// Someone tried to run a second instance, we should focus our window.
|
||||
if (mainWindow) {
|
||||
if (!mainWindow.isVisible()) mainWindow.show();
|
||||
if (mainWindow.isMinimized()) mainWindow.restore();
|
||||
mainWindow.focus();
|
||||
}
|
||||
autoUpdater.on('update-downloaded', (ev, releaseNotes, releaseName, releaseDate, updateURL) => {
|
||||
if (!mainWindow) return;
|
||||
// forward to renderer
|
||||
mainWindow.webContents.send('update-downloaded', {
|
||||
releaseNotes,
|
||||
releaseName,
|
||||
releaseDate,
|
||||
updateURL,
|
||||
});
|
||||
});
|
||||
|
||||
if (shouldQuit) {
|
||||
console.log('Other instance detected: exiting');
|
||||
electron.app.exit();
|
||||
}
|
||||
ipcMain.on('ipcCall', async function(ev, payload) {
|
||||
if (!mainWindow) return;
|
||||
|
||||
const args = payload.args || [];
|
||||
let ret;
|
||||
|
||||
switch (payload.name) {
|
||||
case 'getUpdateFeedUrl':
|
||||
ret = autoUpdater.getFeedURL();
|
||||
break;
|
||||
case 'getAutoLaunchEnabled':
|
||||
ret = launcher.isEnabled;
|
||||
break;
|
||||
case 'setAutoLaunchEnabled':
|
||||
if (args[0]) {
|
||||
launcher.enable();
|
||||
} else {
|
||||
launcher.disable();
|
||||
}
|
||||
break;
|
||||
case 'getAppVersion':
|
||||
ret = app.getVersion();
|
||||
break;
|
||||
case 'focusWindow':
|
||||
if (mainWindow.isMinimized()) {
|
||||
mainWindow.restore();
|
||||
} else if (!mainWindow.isVisible()) {
|
||||
mainWindow.show();
|
||||
} else {
|
||||
mainWindow.focus();
|
||||
}
|
||||
case 'origin_migrate':
|
||||
migratingOrigin = true;
|
||||
await migrateFromOldOrigin();
|
||||
migratingOrigin = false;
|
||||
break;
|
||||
default:
|
||||
mainWindow.webContents.send('ipcReply', {
|
||||
id: payload.id,
|
||||
error: "Unknown IPC Call: " + payload.name,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
mainWindow.webContents.send('ipcReply', {
|
||||
id: payload.id,
|
||||
reply: ret,
|
||||
});
|
||||
});
|
||||
|
||||
app.commandLine.appendSwitch('--enable-usermedia-screen-capturing');
|
||||
|
||||
const gotLock = app.requestSingleInstanceLock();
|
||||
if (!gotLock) {
|
||||
console.log('Other instance detected: exiting');
|
||||
app.exit();
|
||||
}
|
||||
|
||||
const launcher = new AutoLaunch({
|
||||
name: vectorConfig.brand || 'Riot',
|
||||
@@ -123,56 +182,92 @@ const launcher = new AutoLaunch({
|
||||
},
|
||||
});
|
||||
|
||||
const settings = {
|
||||
'auto-launch': {
|
||||
get: launcher.isEnabled,
|
||||
set: function(bool) {
|
||||
if (bool) {
|
||||
return launcher.enable();
|
||||
} else {
|
||||
return launcher.disable();
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
// Register the scheme the app is served from as 'standard'
|
||||
// which allows things like relative URLs and IndexedDB to
|
||||
// work.
|
||||
// Also mark it as secure (ie. accessing resources from this
|
||||
// protocol and HTTPS won't trigger mixed content warnings).
|
||||
protocol.registerStandardSchemes(['vector'], {secure: true});
|
||||
|
||||
electron.ipcMain.on('settings_get', async function(ev) {
|
||||
const data = {};
|
||||
|
||||
try {
|
||||
await Promise.all(Object.keys(settings).map(async function (setting) {
|
||||
data[setting] = await settings[setting].get();
|
||||
}));
|
||||
|
||||
ev.sender.send('settings', data);
|
||||
} catch(e) { console.error(e); }
|
||||
});
|
||||
|
||||
electron.ipcMain.on('settings_set', function(ev, key, value) {
|
||||
console.log(key, value);
|
||||
if (settings[key] && settings[key].set) {
|
||||
settings[key].set(value);
|
||||
}
|
||||
});
|
||||
|
||||
electron.app.on('ready', () => {
|
||||
|
||||
if (argv.devtools) {
|
||||
app.on('ready', () => {
|
||||
if (argv['devtools']) {
|
||||
try {
|
||||
const { default: installExtension, REACT_DEVELOPER_TOOLS, REACT_PERF } = require('electron-devtools-installer');
|
||||
installExtension(REACT_DEVELOPER_TOOLS)
|
||||
const { default: installExt, REACT_DEVELOPER_TOOLS, REACT_PERF } = require('electron-devtools-installer');
|
||||
installExt(REACT_DEVELOPER_TOOLS)
|
||||
.then((name) => console.log(`Added Extension: ${name}`))
|
||||
.catch((err) => console.log('An error occurred: ', err));
|
||||
installExtension(REACT_PERF)
|
||||
installExt(REACT_PERF)
|
||||
.then((name) => console.log(`Added Extension: ${name}`))
|
||||
.catch((err) => console.log('An error occurred: ', err));
|
||||
} catch(e) {console.log(e);}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
|
||||
protocol.registerFileProtocol('vector', (request, callback) => {
|
||||
if (request.method !== 'GET') {
|
||||
callback({error: -322}); // METHOD_NOT_SUPPORTED from chromium/src/net/base/net_error_list.h
|
||||
return null;
|
||||
}
|
||||
|
||||
if (vectorConfig.update_base_url) {
|
||||
console.log(`Starting auto update with base URL: ${vectorConfig.update_base_url}`);
|
||||
updater.start(vectorConfig.update_base_url);
|
||||
const parsedUrl = new URL(request.url);
|
||||
if (parsedUrl.protocol !== 'vector:') {
|
||||
callback({error: -302}); // UNKNOWN_URL_SCHEME
|
||||
return;
|
||||
}
|
||||
if (parsedUrl.host !== 'vector') {
|
||||
callback({error: -105}); // NAME_NOT_RESOLVED
|
||||
return;
|
||||
}
|
||||
|
||||
const target = parsedUrl.pathname.split('/');
|
||||
|
||||
// path starts with a '/'
|
||||
if (target[0] !== '') {
|
||||
callback({error: -6}); // FILE_NOT_FOUND
|
||||
return;
|
||||
}
|
||||
|
||||
if (target[target.length - 1] == '') {
|
||||
target[target.length - 1] = 'index.html';
|
||||
}
|
||||
|
||||
let baseDir;
|
||||
// first part of the path determines where we serve from
|
||||
if (migratingOrigin && target[1] === 'origin_migrator_dest') {
|
||||
// the origin migrator destination page
|
||||
// (only the destination script needs to come from the
|
||||
// custom protocol: the source part is loaded from a
|
||||
// file:// as that's the origin we're migrating from).
|
||||
baseDir = __dirname + "/../../origin_migrator/dest";
|
||||
} else if (target[1] === 'webapp') {
|
||||
baseDir = __dirname + "/../../webapp";
|
||||
} else {
|
||||
callback({error: -6}); // FILE_NOT_FOUND
|
||||
return;
|
||||
}
|
||||
|
||||
// Normalise the base dir and the target path separately, then make sure
|
||||
// the target path isn't trying to back out beyond its root
|
||||
baseDir = path.normalize(baseDir);
|
||||
|
||||
const relTarget = path.normalize(path.join(...target.slice(2)));
|
||||
if (relTarget.startsWith('..')) {
|
||||
callback({error: -6}); // FILE_NOT_FOUND
|
||||
return;
|
||||
}
|
||||
const absTarget = path.join(baseDir, relTarget);
|
||||
|
||||
callback({
|
||||
path: absTarget,
|
||||
});
|
||||
}, (error) => {
|
||||
if (error) console.error('Failed to register protocol')
|
||||
});
|
||||
|
||||
if (vectorConfig['update_base_url']) {
|
||||
console.log(`Starting auto update with base URL: ${vectorConfig['update_base_url']}`);
|
||||
updater.start(vectorConfig['update_base_url']);
|
||||
} else {
|
||||
console.log('No update_base_url is defined: auto update is disabled');
|
||||
}
|
||||
@@ -185,7 +280,8 @@ electron.app.on('ready', () => {
|
||||
defaultHeight: 768,
|
||||
});
|
||||
|
||||
mainWindow = global.mainWindow = new electron.BrowserWindow({
|
||||
const preloadScript = path.normalize(`${__dirname}/preload.js`);
|
||||
mainWindow = global.mainWindow = new BrowserWindow({
|
||||
icon: iconPath,
|
||||
show: false,
|
||||
autoHideMenuBar: true,
|
||||
@@ -194,9 +290,21 @@ electron.app.on('ready', () => {
|
||||
y: mainWindowState.y,
|
||||
width: mainWindowState.width,
|
||||
height: mainWindowState.height,
|
||||
webPreferences: {
|
||||
preload: preloadScript,
|
||||
nodeIntegration: false,
|
||||
sandbox: true,
|
||||
enableRemoteModule: false,
|
||||
// We don't use this: it's useful for the preload script to
|
||||
// share a context with the main page so we can give select
|
||||
// objects to the main page. The sandbox option isolates the
|
||||
// main page from the background script.
|
||||
contextIsolation: false,
|
||||
webgl: false,
|
||||
},
|
||||
});
|
||||
mainWindow.loadURL(`file://${__dirname}/../../webapp/index.html`);
|
||||
electron.Menu.setApplicationMenu(vectorMenu);
|
||||
mainWindow.loadURL('vector://vector/webapp/');
|
||||
Menu.setApplicationMenu(vectorMenu);
|
||||
|
||||
// explicitly hide because setApplicationMenu on Linux otherwise shows...
|
||||
// https://github.com/electron/electron/issues/9621
|
||||
@@ -208,11 +316,16 @@ electron.app.on('ready', () => {
|
||||
brand: vectorConfig.brand || 'Riot',
|
||||
});
|
||||
|
||||
if (!argv.hidden) {
|
||||
mainWindow.once('ready-to-show', () => {
|
||||
mainWindow.once('ready-to-show', () => {
|
||||
mainWindowState.manage(mainWindow);
|
||||
|
||||
if (!argv['hidden']) {
|
||||
mainWindow.show();
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// hide here explicitly because window manage above sometimes shows it
|
||||
mainWindow.hide();
|
||||
}
|
||||
});
|
||||
|
||||
mainWindow.on('closed', () => {
|
||||
mainWindow = global.mainWindow = null;
|
||||
@@ -240,26 +353,37 @@ electron.app.on('ready', () => {
|
||||
}
|
||||
|
||||
webContentsHandler(mainWindow.webContents);
|
||||
mainWindowState.manage(mainWindow);
|
||||
});
|
||||
|
||||
electron.app.on('window-all-closed', () => {
|
||||
electron.app.quit();
|
||||
app.on('window-all-closed', () => {
|
||||
app.quit();
|
||||
});
|
||||
|
||||
electron.app.on('activate', () => {
|
||||
app.on('activate', () => {
|
||||
mainWindow.show();
|
||||
});
|
||||
|
||||
electron.app.on('before-quit', () => {
|
||||
app.on('before-quit', () => {
|
||||
global.appQuitting = true;
|
||||
if (mainWindow) {
|
||||
mainWindow.webContents.send('before-quit');
|
||||
}
|
||||
});
|
||||
|
||||
app.on('second-instance', (ev, commandLine, workingDirectory) => {
|
||||
// If other instance launched with --hidden then skip showing window
|
||||
if (commandLine.includes('--hidden')) return;
|
||||
|
||||
// Someone tried to run a second instance, we should focus our window.
|
||||
if (mainWindow) {
|
||||
if (!mainWindow.isVisible()) mainWindow.show();
|
||||
if (mainWindow.isMinimized()) mainWindow.restore();
|
||||
mainWindow.focus();
|
||||
}
|
||||
});
|
||||
|
||||
// Set the App User Model ID to match what the squirrel
|
||||
// installer uses for the shortcut icon.
|
||||
// This makes notifications work on windows 8.1 (and is
|
||||
// a noop on other platforms).
|
||||
electron.app.setAppUserModelId('com.squirrel.riot-web.Riot');
|
||||
app.setAppUserModelId('com.squirrel.riot-web.Riot');
|
||||
|
||||
62
electron_app/src/originMigrator.js
Normal file
62
electron_app/src/originMigrator.js
Normal file
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
Copyright 2018 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 { BrowserWindow, ipcMain } = require('electron');
|
||||
const path = require('path');
|
||||
|
||||
async function migrateFromOldOrigin() {
|
||||
console.log("Attempting to migrate data between origins");
|
||||
|
||||
// We can use the same preload script: we just need ipcRenderer exposed
|
||||
const preloadScript = path.normalize(`${__dirname}/preload.js`);
|
||||
await new Promise(resolve => {
|
||||
const migrateWindow = new BrowserWindow({
|
||||
show: false,
|
||||
webPreferences: {
|
||||
preload: preloadScript,
|
||||
nodeIntegration: false,
|
||||
sandbox: true,
|
||||
enableRemoteModule: false,
|
||||
webgl: false,
|
||||
},
|
||||
});
|
||||
ipcMain.on('origin_migration_complete', (e, success, sentSummary, storedSummary) => {
|
||||
if (success) {
|
||||
console.log("Origin migration completed successfully!");
|
||||
} else {
|
||||
console.error("Origin migration failed!");
|
||||
}
|
||||
console.error("Data sent", sentSummary);
|
||||
console.error("Data stored", storedSummary);
|
||||
migrateWindow.close();
|
||||
resolve();
|
||||
});
|
||||
ipcMain.on('origin_migration_nodata', (e) => {
|
||||
console.log("No session to migrate from old origin");
|
||||
migrateWindow.close();
|
||||
resolve();
|
||||
});
|
||||
// Normalise the path because in the distribution, __dirname will be inside the
|
||||
// electron asar.
|
||||
const sourcePagePath = path.normalize(__dirname + '/../../origin_migrator/source.html');
|
||||
console.log("Loading path: " + sourcePagePath);
|
||||
migrateWindow.loadURL('file://' + sourcePagePath);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
migrateFromOldOrigin,
|
||||
};
|
||||
@@ -1,8 +1,5 @@
|
||||
// @flow
|
||||
|
||||
/*
|
||||
Copyright 2016 Aviral Dasgupta
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
Copyright 2018 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.
|
||||
@@ -17,13 +14,16 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
let Platform = null;
|
||||
const { ipcRenderer, webFrame } = require('electron');
|
||||
|
||||
if (window && window.process && window.process && window.process.type === 'renderer') {
|
||||
// we're running inside electron
|
||||
Platform = require('./ElectronPlatform');
|
||||
} else {
|
||||
Platform = require('./WebPlatform');
|
||||
}
|
||||
// expose ipcRenderer to the renderer process
|
||||
window.ipcRenderer = ipcRenderer;
|
||||
|
||||
export default Platform;
|
||||
// Allow the fetch API to load resources from this
|
||||
// protocol: this is necessary to load olm.wasm.
|
||||
// (Also mark it a secure although we've already
|
||||
// done this in the main process).
|
||||
webFrame.registerURLSchemeAsPrivileged('vector', {
|
||||
secure: true,
|
||||
supportFetchAPI: true,
|
||||
});
|
||||
@@ -35,12 +35,15 @@ function onLinkContextMenu(ev, params) {
|
||||
const url = params.linkURL || params.srcURL;
|
||||
|
||||
const popupMenu = new Menu();
|
||||
popupMenu.append(new MenuItem({
|
||||
label: url,
|
||||
click() {
|
||||
safeOpenURL(url);
|
||||
},
|
||||
}));
|
||||
// No point trying to open blob: URLs in an external browser: it ain't gonna work.
|
||||
if (!url.startsWith('blob:')) {
|
||||
popupMenu.append(new MenuItem({
|
||||
label: url,
|
||||
click() {
|
||||
safeOpenURL(url);
|
||||
},
|
||||
}));
|
||||
}
|
||||
|
||||
if (params.mediaType && params.mediaType === 'image' && !url.startsWith('file://')) {
|
||||
popupMenu.append(new MenuItem({
|
||||
@@ -55,13 +58,17 @@ function onLinkContextMenu(ev, params) {
|
||||
}));
|
||||
}
|
||||
|
||||
popupMenu.append(new MenuItem({
|
||||
label: 'Copy Link Address',
|
||||
click() {
|
||||
clipboard.writeText(url);
|
||||
},
|
||||
}));
|
||||
popupMenu.popup();
|
||||
// No point offerring to copy a blob: URL either
|
||||
if (!url.startsWith('blob:')) {
|
||||
popupMenu.append(new MenuItem({
|
||||
label: 'Copy Link Address',
|
||||
click() {
|
||||
clipboard.writeText(url);
|
||||
},
|
||||
}));
|
||||
}
|
||||
// popup() requires an options object even for no options
|
||||
popupMenu.popup({});
|
||||
ev.preventDefault();
|
||||
}
|
||||
|
||||
@@ -88,7 +95,8 @@ function onSelectedContextMenu(ev, params) {
|
||||
const items = _CutCopyPasteSelectContextMenus(params);
|
||||
const popupMenu = Menu.buildFromTemplate(items);
|
||||
|
||||
popupMenu.popup();
|
||||
// popup() requires an options object even for no options
|
||||
popupMenu.popup({});
|
||||
ev.preventDefault();
|
||||
}
|
||||
|
||||
@@ -101,7 +109,8 @@ function onEditableContextMenu(ev, params) {
|
||||
|
||||
const popupMenu = Menu.buildFromTemplate(items);
|
||||
|
||||
popupMenu.popup();
|
||||
// popup() requires an options object even for no options
|
||||
popupMenu.popup({});
|
||||
ev.preventDefault();
|
||||
}
|
||||
|
||||
|
||||
@@ -32,9 +32,12 @@ const olm_entry = webpack_config.entry['olm'];
|
||||
// 'preprocessors' config below)
|
||||
delete webpack_config['entry'];
|
||||
|
||||
// make sure we're flagged as development to avoid wasting time optimising
|
||||
webpack_config.mode = 'development';
|
||||
|
||||
// add ./test as a search path for js
|
||||
webpack_config.module.loaders.unshift({
|
||||
test: /\.js$/, loader: "babel",
|
||||
webpack_config.module.rules.unshift({
|
||||
test: /\.js$/, use: "babel-loader",
|
||||
include: [path.resolve('./src'), path.resolve('./test')],
|
||||
});
|
||||
|
||||
@@ -46,8 +49,9 @@ webpack_config.module.noParse.push(/sinon\/pkg\/sinon\.js$/);
|
||||
// ?
|
||||
webpack_config.resolve.alias['sinon'] = 'sinon/pkg/sinon.js';
|
||||
|
||||
webpack_config.resolve.root = [
|
||||
webpack_config.resolve.modules = [
|
||||
path.resolve('./test'),
|
||||
"node_modules"
|
||||
];
|
||||
|
||||
webpack_config.devtool = 'inline-source-map';
|
||||
|
||||
19
origin_migrator/dest/browser-matrix.min.js
vendored
Normal file
19
origin_migrator/dest/browser-matrix.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
6
origin_migrator/dest/dest.html
Normal file
6
origin_migrator/dest/dest.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<html>
|
||||
<body>
|
||||
<script src="browser-matrix.min.js"></script>
|
||||
<script src="dest.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
125
origin_migrator/dest/dest.js
Normal file
125
origin_migrator/dest/dest.js
Normal file
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
Copyright 2018 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 SOURCE_ORIGIN = 'file://';
|
||||
|
||||
const IndexedDBCryptoStore = window.matrixcs.IndexedDBCryptoStore;
|
||||
const cryptoStore = new IndexedDBCryptoStore(window.indexedDB, 'matrix-js-sdk:crypto');
|
||||
|
||||
let accountStored = 0;
|
||||
let sessionsStored = 0;
|
||||
let inboundGroupSessionsStored = 0;
|
||||
let deviceDataStored = 0;
|
||||
let roomsStored = 0;
|
||||
let localStorageKeysStored = 0;
|
||||
|
||||
const promises = [];
|
||||
|
||||
async function onMessage(e) {
|
||||
if (e.origin !== SOURCE_ORIGIN) return;
|
||||
|
||||
const data = e.data.data; // bleh, naming clash
|
||||
switch (e.data.cmd) {
|
||||
case 'init':
|
||||
// start with clean stores before we migrate data in
|
||||
window.localStorage.clear();
|
||||
await cryptoStore.deleteAllData();
|
||||
|
||||
e.source.postMessage({
|
||||
cmd: 'initOK',
|
||||
}, SOURCE_ORIGIN);
|
||||
break;
|
||||
case 'storeAccount':
|
||||
promises.push(cryptoStore.doTxn(
|
||||
'readwrite', [IndexedDBCryptoStore.STORE_ACCOUNT],
|
||||
(txn) => {
|
||||
cryptoStore.storeAccount(txn, data);
|
||||
},
|
||||
).then(() => {
|
||||
++accountStored;
|
||||
}));
|
||||
break;
|
||||
case 'storeSessions':
|
||||
promises.push(cryptoStore.doTxn(
|
||||
'readwrite', [IndexedDBCryptoStore.STORE_SESSIONS],
|
||||
(txn) => {
|
||||
for (const sess of data) {
|
||||
cryptoStore.storeEndToEndSession(sess.deviceKey, sess.sessionId, sess, txn);
|
||||
}
|
||||
},
|
||||
).then(() => {
|
||||
sessionsStored += data.length;
|
||||
}));
|
||||
break;
|
||||
case 'storeInboundGroupSessions':
|
||||
promises.push(cryptoStore.doTxn(
|
||||
'readwrite', [IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS],
|
||||
(txn) => {
|
||||
for (const sess of data) {
|
||||
cryptoStore.addEndToEndInboundGroupSession(
|
||||
sess.senderKey, sess.sessionId, sess.sessionData, txn,
|
||||
);
|
||||
}
|
||||
},
|
||||
).then(() => {
|
||||
inboundGroupSessionsStored += data.length;
|
||||
}));
|
||||
break;
|
||||
case 'storeDeviceData':
|
||||
promises.push(cryptoStore.doTxn(
|
||||
'readwrite', [IndexedDBCryptoStore.STORE_DEVICE_DATA],
|
||||
(txn) => {
|
||||
cryptoStore.storeEndToEndDeviceData(data, txn);
|
||||
},
|
||||
).then(() => {
|
||||
++deviceDataStored;
|
||||
}));
|
||||
break;
|
||||
case 'storeRooms':
|
||||
promises.push(cryptoStore.doTxn(
|
||||
'readwrite', [IndexedDBCryptoStore.STORE_ROOMS],
|
||||
(txn) => {
|
||||
for (const [roomId, roomInfo] of Object.entries(data)) {
|
||||
cryptoStore.storeEndToEndRoom(roomId, roomInfo, txn);
|
||||
}
|
||||
},
|
||||
).then(() => {
|
||||
++roomsStored;
|
||||
}));
|
||||
break;
|
||||
case 'storeLocalStorage':
|
||||
window.localStorage.setItem(data.key, data.val);
|
||||
++localStorageKeysStored;
|
||||
break;
|
||||
case 'getSummary':
|
||||
await Promise.all(promises);
|
||||
e.source.postMessage({
|
||||
cmd: 'summary',
|
||||
data: {
|
||||
accountStored,
|
||||
sessionsStored,
|
||||
inboundGroupSessionsStored,
|
||||
deviceDataStored,
|
||||
roomsStored,
|
||||
localStorageKeysStored,
|
||||
},
|
||||
}, SOURCE_ORIGIN);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('message', onMessage);
|
||||
|
||||
7
origin_migrator/source.html
Normal file
7
origin_migrator/source.html
Normal file
@@ -0,0 +1,7 @@
|
||||
<html>
|
||||
<body>
|
||||
<script src="dest/browser-matrix.min.js"></script>
|
||||
<script src="source.js"></script>
|
||||
<iframe name="dest" src="vector://vector/origin_migrator_dest/dest.html" onload="doMigrate()"></iframe>
|
||||
</body>
|
||||
</html>
|
||||
210
origin_migrator/source.js
Normal file
210
origin_migrator/source.js
Normal file
@@ -0,0 +1,210 @@
|
||||
/*
|
||||
Copyright 2018 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 TARGET_ORIGIN = 'vector://vector';
|
||||
const BATCH_SIZE = 500;
|
||||
let destFrame;
|
||||
|
||||
let initResolver = null;
|
||||
let getSummaryResolver = null;
|
||||
|
||||
function onMessage(e) {
|
||||
if (e.origin !== TARGET_ORIGIN) return;
|
||||
|
||||
if (e.data.cmd === 'initOK' && initResolver) {
|
||||
initResolver();
|
||||
initResolver = null;
|
||||
} else if (e.data.cmd === 'summary' && getSummaryResolver) {
|
||||
getSummaryResolver(e.data.data);
|
||||
getSummaryResolver = null;
|
||||
}
|
||||
}
|
||||
|
||||
async function initDestFrame() {
|
||||
return new Promise(resolve => {
|
||||
initResolver = resolve;
|
||||
destFrame.postMessage({
|
||||
cmd: 'init',
|
||||
}, TARGET_ORIGIN);
|
||||
});
|
||||
}
|
||||
|
||||
async function getSummary() {
|
||||
return new Promise(resolve => {
|
||||
getSummaryResolver = resolve;
|
||||
destFrame.postMessage({
|
||||
cmd: 'getSummary',
|
||||
}, TARGET_ORIGIN);
|
||||
});
|
||||
}
|
||||
|
||||
async function doMigrate() {
|
||||
let accountSent = 0;
|
||||
let sessionsSent = 0;
|
||||
let inboundGroupSessionsSent = 0;
|
||||
let deviceDataSent = 0;
|
||||
let roomsSent = 0;
|
||||
let localStorageKeysSent = 0;
|
||||
|
||||
if (!window.ipcRenderer) {
|
||||
console.error("ipcRenderer not found");
|
||||
return;
|
||||
}
|
||||
|
||||
if (window.localStorage.getItem('mx_user_id') === null) {
|
||||
window.ipcRenderer.send("origin_migration_nodata");
|
||||
return;
|
||||
}
|
||||
|
||||
destFrame = window.parent.frames.dest;
|
||||
|
||||
await initDestFrame();
|
||||
|
||||
const IndexedDBCryptoStore = window.matrixcs.IndexedDBCryptoStore;
|
||||
|
||||
const cryptoStore = new IndexedDBCryptoStore(window.indexedDB, 'matrix-js-sdk:crypto');
|
||||
|
||||
await cryptoStore.doTxn(
|
||||
'readonly', [IndexedDBCryptoStore.STORE_ACCOUNT],
|
||||
(txn) => {
|
||||
cryptoStore.getAccount(txn, (account) => {
|
||||
destFrame.postMessage({
|
||||
cmd: 'storeAccount',
|
||||
data: account,
|
||||
}, TARGET_ORIGIN);
|
||||
++accountSent;
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
await cryptoStore.doTxn(
|
||||
'readonly', [IndexedDBCryptoStore.STORE_SESSIONS],
|
||||
(txn) => {
|
||||
let sessBatch = [];
|
||||
cryptoStore.getAllEndToEndSessions(txn, (sessInfo) => {
|
||||
if (sessInfo) {
|
||||
++sessionsSent;
|
||||
sessBatch.push(sessInfo);
|
||||
}
|
||||
if (sessBatch.length >= BATCH_SIZE || sessInfo === null) {
|
||||
destFrame.postMessage({
|
||||
cmd: 'storeSessions',
|
||||
data: sessBatch,
|
||||
}, TARGET_ORIGIN);
|
||||
sessBatch = [];
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
await cryptoStore.doTxn(
|
||||
'readonly', [IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS],
|
||||
(txn) => {
|
||||
let sessBatch = [];
|
||||
cryptoStore.getAllEndToEndInboundGroupSessions(txn, (sessInfo) => {
|
||||
if (sessInfo) {
|
||||
++inboundGroupSessionsSent;
|
||||
sessBatch.push(sessInfo);
|
||||
}
|
||||
if (sessBatch.length >= BATCH_SIZE || sessInfo === null) {
|
||||
destFrame.postMessage({
|
||||
cmd: 'storeInboundGroupSessions',
|
||||
data: sessBatch,
|
||||
}, TARGET_ORIGIN);
|
||||
sessBatch = [];
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
await cryptoStore.doTxn(
|
||||
'readonly', [IndexedDBCryptoStore.STORE_DEVICE_DATA],
|
||||
(txn) => {
|
||||
cryptoStore.getEndToEndDeviceData(txn, (deviceData) => {
|
||||
destFrame.postMessage({
|
||||
cmd: 'storeDeviceData',
|
||||
data: deviceData,
|
||||
}, TARGET_ORIGIN);
|
||||
++deviceDataSent;
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
await cryptoStore.doTxn(
|
||||
'readonly', [IndexedDBCryptoStore.STORE_ROOMS],
|
||||
(txn) => {
|
||||
cryptoStore.getEndToEndRooms(txn, (rooms) => {
|
||||
destFrame.postMessage({
|
||||
cmd: 'storeRooms',
|
||||
data: rooms,
|
||||
}, TARGET_ORIGIN);
|
||||
++roomsSent;
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
// we don't bother migrating;
|
||||
// * sync data (we can just initialsync again)
|
||||
// * logs
|
||||
// * key requests (worst case they'll just be re-sent)
|
||||
// * sessions needing backup (feature isn't available on Electron)
|
||||
|
||||
for (let i = 0; i < window.localStorage.length; ++i) {
|
||||
const key = window.localStorage.key(i);
|
||||
const val = window.localStorage.getItem(key);
|
||||
|
||||
destFrame.postMessage({
|
||||
cmd: 'storeLocalStorage',
|
||||
data: { key, val },
|
||||
}, TARGET_ORIGIN);
|
||||
++localStorageKeysSent;
|
||||
}
|
||||
|
||||
const summary = await getSummary();
|
||||
let success = false;
|
||||
if (
|
||||
summary.accountStored === accountSent &&
|
||||
summary.sessionsStored === sessionsSent &&
|
||||
summary.inboundGroupSessionsStored === inboundGroupSessionsSent &&
|
||||
summary.deviceDataStored === deviceDataSent &&
|
||||
summary.roomsStored === roomsSent &&
|
||||
summary.localStorageKeysStored === localStorageKeysSent
|
||||
) {
|
||||
success = true;
|
||||
window.localStorage.clear();
|
||||
await cryptoStore.deleteAllData();
|
||||
|
||||
// we don't bother migrating them, but also blow away the sync & logs db,
|
||||
// otherwise they'll just hang about taking up space
|
||||
await new Promise(resolve => {
|
||||
const req = window.indexedDB.deleteDatabase('matrix-js-sdk:riot-web-sync');
|
||||
req.onsuccess = resolve;
|
||||
req.onerror = resolve;
|
||||
});
|
||||
await new Promise(resolve => {
|
||||
const req = window.indexedDB.deleteDatabase('logs');
|
||||
req.onsuccess = resolve;
|
||||
req.onerror = resolve;
|
||||
});
|
||||
}
|
||||
|
||||
window.ipcRenderer.send("origin_migration_complete", success, {
|
||||
accountSent, sessionsSent, inboundGroupSessionsSent,
|
||||
deviceDataSent, roomsSent, localStorageKeysSent,
|
||||
}, summary);
|
||||
}
|
||||
|
||||
window.addEventListener('message', onMessage);
|
||||
13798
package-lock.json
generated
13798
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
146
package.json
146
package.json
@@ -2,7 +2,7 @@
|
||||
"name": "riot-web",
|
||||
"productName": "Riot",
|
||||
"main": "electron_app/src/electron-main.js",
|
||||
"version": "0.14.1",
|
||||
"version": "0.17.9-rc.1",
|
||||
"description": "A feature-rich client for Matrix.org",
|
||||
"author": "New Vector Ltd.",
|
||||
"repository": {
|
||||
@@ -33,19 +33,25 @@
|
||||
"build:res": "node scripts/copy-res.js",
|
||||
"build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js",
|
||||
"build:compile": "npm run reskindex && babel --source-maps -d lib src",
|
||||
"build:bundle": "cross-env NODE_ENV=production webpack -p --progress --bail",
|
||||
"build:bundle:dev": "webpack --optimize-occurence-order --progress --bail",
|
||||
"build:bundle": "cross-env NODE_ENV=production webpack-cli -p --progress --bail --mode production",
|
||||
"build:bundle:dev": "webpack-cli --progress --bail --mode development",
|
||||
"build:electron": "npm run clean && npm run build && npm run install:electron && build -wml --ia32 --x64",
|
||||
"build": "npm run reskindex && npm run build:res && npm run build:bundle",
|
||||
"build:dev": "npm run reskindex && npm run build:res && npm run build:bundle:dev",
|
||||
"build:react-sdk": "node scripts/npm-sub.js matrix-react-sdk run build",
|
||||
"build:js-sdk": "node scripts/npm-sub.js matrix-js-sdk run start:init",
|
||||
"build": "npm run build:js-sdk && npm run build:react-sdk && npm run reskindex && npm run build:res && npm run build:bundle",
|
||||
"build:dev": "npm run build:js-sdk && npm run build:react-sdk && npm run reskindex && npm run build:res && npm run build:bundle:dev",
|
||||
"dist": "scripts/package.sh",
|
||||
"install:electron": "install-app-deps",
|
||||
"electron": "npm run install:electron && electron .",
|
||||
"start:res": "node scripts/copy-res.js -w",
|
||||
"start:js": "webpack-dev-server --output-filename=bundles/_dev_/[name].js --output-chunk-file=bundles/_dev_/[name].js -w --progress",
|
||||
"start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development",
|
||||
"start:js:prod": "cross-env NODE_ENV=production webpack-dev-server -w --progress",
|
||||
"start": "parallelshell \"npm run reskindex:watch\" \"npm run start:res\" \"npm run start:js\"",
|
||||
"start:prod": "parallelshell \"npm run reskindex:watch\" \"npm run start:res\" \"npm run start:js:prod\"",
|
||||
"start:js-sdk": "node scripts/npm-sub.js matrix-js-sdk run start:watch",
|
||||
"start:js-sdk:prod": "cross-env NODE_ENV=production node scripts/npm-sub.js matrix-js-sdk run start:watch",
|
||||
"start:react-sdk": "node scripts/npm-sub.js matrix-react-sdk run start:all",
|
||||
"start:react-sdk:prod": "cross-env NODE_ENV=production node scripts/npm-sub.js matrix-react-sdk run start:all",
|
||||
"start": "npm run build:js-sdk && npm run build:react-sdk && concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n js-sdk,react-sdk,reskindex,res,riot-js \"npm run start:js-sdk\" \"npm run start:react-sdk\" \"npm run reskindex:watch\" \"npm run start:res\" \"npm run start:js\"",
|
||||
"start:prod": "npm run build:js-sdk && npm run build:react-sdk && concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n js-sdk,react-sdk,reskindex,res,riot-js \"npm run start:js-sdk:prod\" \"npm run start:react-sdk:prod\" \"npm run reskindex:watch\" \"npm run start:res\" \"npm run start:js:prod\"",
|
||||
"lint": "eslint src/",
|
||||
"lintall": "eslint src/ test/",
|
||||
"clean": "rimraf lib webapp electron_app/dist",
|
||||
@@ -54,104 +60,105 @@
|
||||
"test-multi": "karma start"
|
||||
},
|
||||
"dependencies": {
|
||||
"babel-polyfill": "^6.5.0",
|
||||
"babel-runtime": "^6.11.6",
|
||||
"bluebird": "^3.5.0",
|
||||
"babel-polyfill": "^6.26.0",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"bluebird": "^3.5.2",
|
||||
"browser-request": "^0.3.3",
|
||||
"extract-text-webpack-plugin": "^0.9.1",
|
||||
"draft-js": "^0.11.0-alpha",
|
||||
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
||||
"favico.js": "^0.3.10",
|
||||
"matrix-js-sdk": "0.10.1",
|
||||
"matrix-react-sdk": "0.12.2",
|
||||
"modernizr": "^3.1.0",
|
||||
"prop-types": "^15.5.10",
|
||||
"gemini-scrollbar": "github:matrix-org/gemini-scrollbar#b302279",
|
||||
"gfm.css": "^1.1.2",
|
||||
"highlight.js": "^9.13.1",
|
||||
"matrix-js-sdk": "0.14.3-rc.1",
|
||||
"matrix-react-sdk": "0.14.8-rc.1",
|
||||
"modernizr": "^3.6.0",
|
||||
"prop-types": "^15.6.2",
|
||||
"react": "^15.6.0",
|
||||
"react-dom": "^15.6.0",
|
||||
"sanitize-html": "^1.11.1",
|
||||
"ua-parser-js": "^0.7.10",
|
||||
"sanitize-html": "^1.19.1",
|
||||
"ua-parser-js": "^0.7.19",
|
||||
"url": "^0.11.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^6.6.0",
|
||||
"babel-cli": "^6.5.2",
|
||||
"babel-core": "^6.14.0",
|
||||
"babel-eslint": "^6.1.0",
|
||||
"babel-loader": "^6.2.5",
|
||||
"babel-cli": "^6.26.0",
|
||||
"babel-core": "^6.26.3",
|
||||
"babel-eslint": "^8.1.1",
|
||||
"babel-loader": "^7.1.5",
|
||||
"babel-plugin-add-module-exports": "^0.2.1",
|
||||
"babel-plugin-transform-async-to-bluebird": "^1.1.1",
|
||||
"babel-plugin-transform-class-properties": "^6.16.0",
|
||||
"babel-plugin-transform-object-rest-spread": "^6.16.0",
|
||||
"babel-plugin-transform-runtime": "^6.15.0",
|
||||
"babel-preset-es2015": "^6.16.0",
|
||||
"babel-preset-es2016": "^6.16.0",
|
||||
"babel-preset-es2017": "^6.16.0",
|
||||
"babel-preset-react": "^6.16.0",
|
||||
"babel-preset-stage-2": "^6.17.0",
|
||||
"chokidar": "^1.6.1",
|
||||
"babel-plugin-transform-class-properties": "^6.24.1",
|
||||
"babel-plugin-transform-object-rest-spread": "^6.26.0",
|
||||
"babel-plugin-transform-runtime": "^6.23.0",
|
||||
"babel-preset-es2015": "^6.24.1",
|
||||
"babel-preset-es2016": "^6.24.1",
|
||||
"babel-preset-es2017": "^6.24.1",
|
||||
"babel-preset-react": "^6.24.1",
|
||||
"babel-preset-stage-2": "^6.24.1",
|
||||
"chokidar": "^2.0.4",
|
||||
"concurrently": "^4.0.1",
|
||||
"cpx": "^1.3.2",
|
||||
"cross-env": "^4.0.0",
|
||||
"css-raw-loader": "^0.1.1",
|
||||
"electron-builder": "^11.2.4",
|
||||
"electron-builder-squirrel-windows": "^11.2.1",
|
||||
"electron-devtools-installer": "^2.2.0",
|
||||
"electron-builder": "^20.29.0",
|
||||
"electron-builder-squirrel-windows": "^11.6.1",
|
||||
"electron-devtools-installer": "^2.2.4",
|
||||
"emojione": "^2.2.7",
|
||||
"eslint": "^3.14.0",
|
||||
"eslint": "^5.8.0",
|
||||
"eslint-config-google": "^0.7.1",
|
||||
"eslint-plugin-babel": "^4.1.1",
|
||||
"eslint-plugin-flowtype": "^2.30.0",
|
||||
"eslint-plugin-react": "^7.4.0",
|
||||
"eslint-plugin-babel": "^4.1.2",
|
||||
"eslint-plugin-flowtype": "^2.50.3",
|
||||
"eslint-plugin-react": "^7.11.1",
|
||||
"expect": "^1.16.0",
|
||||
"fs-extra": "^0.30.0",
|
||||
"html-webpack-plugin": "^2.24.0",
|
||||
"html-webpack-plugin": "^3.2.0",
|
||||
"json-loader": "^0.5.3",
|
||||
"karma": "^1.7.0",
|
||||
"karma": "^3.1.1",
|
||||
"karma-chrome-launcher": "^0.2.3",
|
||||
"karma-cli": "^0.1.2",
|
||||
"karma-junit-reporter": "^0.4.1",
|
||||
"karma-cli": "^1.0.1",
|
||||
"karma-junit-reporter": "^2.0.0",
|
||||
"karma-logcapture-reporter": "0.0.1",
|
||||
"karma-mocha": "^0.2.2",
|
||||
"karma-mocha": "^1.3.0",
|
||||
"karma-sourcemap-loader": "^0.3.7",
|
||||
"karma-spec-reporter": "0.0.31",
|
||||
"karma-summary-reporter": "^1.3.3",
|
||||
"karma-webpack": "^1.7.0",
|
||||
"matrix-mock-request": "^1.2.0",
|
||||
"karma-summary-reporter": "^1.5.1",
|
||||
"karma-webpack": "4.0.0-beta.0",
|
||||
"matrix-mock-request": "^1.2.2",
|
||||
"matrix-react-test-utils": "^0.2.0",
|
||||
"minimist": "^1.2.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"mocha": "^2.4.5",
|
||||
"parallelshell": "^3.0.2",
|
||||
"mocha": "^5.2.0",
|
||||
"postcss-extend": "^1.0.5",
|
||||
"postcss-import": "^9.0.0",
|
||||
"postcss-loader": "^1.2.2",
|
||||
"postcss-mixins": "^5.4.1",
|
||||
"postcss-nested": "^1.0.0",
|
||||
"postcss-scss": "^0.4.0",
|
||||
"postcss-simple-vars": "^3.0.0",
|
||||
"postcss-import": "^11.1.0",
|
||||
"postcss-loader": "^2.1.6",
|
||||
"postcss-mixins": "^6.2.0",
|
||||
"postcss-nested": "^3.0.0",
|
||||
"postcss-scss": "^1.0.6",
|
||||
"postcss-simple-vars": "^4.1.0",
|
||||
"postcss-strip-inline-comments": "^0.1.5",
|
||||
"raw-loader": "^0.5.1",
|
||||
"react-addons-perf": "^15.4.0",
|
||||
"react-addons-test-utils": "^15.6.0",
|
||||
"rimraf": "^2.4.3",
|
||||
"source-map-loader": "^0.2.3",
|
||||
"webpack": "^1.12.14",
|
||||
"webpack-dev-server": "^1.16.2"
|
||||
"source-map-loader": "^0.2.4",
|
||||
"webpack": "^4.23.1",
|
||||
"webpack-cli": "^3.1.2",
|
||||
"webpack-dev-server": "^3.1.10"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"olm": "https://matrix.org/packages/npm/olm/olm-2.2.1.tgz"
|
||||
"olm": "https://matrix.org/packages/npm/olm/olm-3.0.0.tgz"
|
||||
},
|
||||
"build": {
|
||||
"appId": "im.riot.app",
|
||||
"category": "Network",
|
||||
"electronVersion": "1.8.3",
|
||||
"//asar=false": "https://github.com/electron-userland/electron-builder/issues/675",
|
||||
"asar": false,
|
||||
"dereference": true,
|
||||
"//files": "We bundle everything, so we only need to include webapp/",
|
||||
"electronVersion": "4.0.1",
|
||||
"files": [
|
||||
"node_modules/**",
|
||||
"src/**",
|
||||
"img/**"
|
||||
],
|
||||
"extraResources": [
|
||||
"webapp/**/*"
|
||||
"webapp/**/*",
|
||||
"origin_migrator/**/*"
|
||||
],
|
||||
"linux": {
|
||||
"target": "deb",
|
||||
@@ -161,8 +168,13 @@
|
||||
"StartupWMClass": "riot"
|
||||
}
|
||||
},
|
||||
"mac": {
|
||||
"category": "public.app-category.social-networking"
|
||||
},
|
||||
"win": {
|
||||
"target": "squirrel"
|
||||
"target": {
|
||||
"target": "squirrel"
|
||||
}
|
||||
},
|
||||
"directories": {
|
||||
"buildResources": "electron_app/build",
|
||||
|
||||
11
release.sh
11
release.sh
@@ -7,6 +7,15 @@
|
||||
|
||||
set -e
|
||||
|
||||
orig_args=$@
|
||||
|
||||
# chomp any args starting with '-' as these need to go
|
||||
# through to the release script and otherwise we'll get
|
||||
# confused about what the version arg is.
|
||||
while [[ "$1" == -* ]]; do
|
||||
shift
|
||||
done
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
for i in matrix-js-sdk matrix-react-sdk
|
||||
@@ -38,4 +47,4 @@ git commit package.json -m "$tag"
|
||||
|
||||
cd ..
|
||||
|
||||
exec ./node_modules/matrix-js-sdk/release.sh -z "$@"
|
||||
exec ./node_modules/matrix-js-sdk/release.sh -u vector-im -z "$orig_args"
|
||||
|
||||
@@ -6,37 +6,37 @@
|
||||
"start_url": "index.html",
|
||||
"icons": [
|
||||
{
|
||||
"src": "android-chrome-36x36.png",
|
||||
"src": "vector-icons/android-chrome-36x36.png",
|
||||
"sizes": "36x36",
|
||||
"type": "image\/png",
|
||||
"density": "0.75"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-48x48.png",
|
||||
"src": "vector-icons/android-chrome-48x48.png",
|
||||
"sizes": "48x48",
|
||||
"type": "image\/png",
|
||||
"density": "1.0"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-72x72.png",
|
||||
"src": "vector-icons/android-chrome-72x72.png",
|
||||
"sizes": "72x72",
|
||||
"type": "image\/png",
|
||||
"density": "1.5"
|
||||
},
|
||||
{
|
||||
"src": "/android-chrome-96x96.png",
|
||||
"src": "vector-icons/android-chrome-96x96.png",
|
||||
"sizes": "96x96",
|
||||
"type": "image\/png",
|
||||
"density": "2.0"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-144x144.png",
|
||||
"src": "vector-icons/android-chrome-144x144.png",
|
||||
"sizes": "144x144",
|
||||
"type": "image\/png",
|
||||
"density": "3.0"
|
||||
},
|
||||
{
|
||||
"src": "android-chrome-192x192.png",
|
||||
"src": "vector-icons/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image\/png",
|
||||
"density": "4.0"
|
||||
|
||||
@@ -68,6 +68,7 @@ $focus-bg-color: #dddddd;
|
||||
// button UI (white-on-green in light skin)
|
||||
$accent-fg-color: #ffffff;
|
||||
$accent-color: #6CC1F6;
|
||||
$accent-color-50pct: #6CC1F67F;
|
||||
$accent-hover-color: #84cfff;
|
||||
|
||||
$selection-fg-color: $primary-bg-color;
|
||||
@@ -76,6 +77,8 @@ $focus-brightness: 125%;
|
||||
|
||||
// red warning colour
|
||||
$warning-color: #F69E98;
|
||||
$warning-bg-color: #DF2A8B;
|
||||
$info-bg-color: #2A9EDF;
|
||||
$mention-user-pill-bg-color: #ff0064;
|
||||
$other-user-pill-bg-color: rgba(0, 0, 0, 0.1);
|
||||
|
||||
@@ -283,4 +286,8 @@ $progressbar-color: #000;
|
||||
|
||||
.mx_RoomSubList_chevron {
|
||||
top: 8px ! important;
|
||||
}
|
||||
}
|
||||
|
||||
.mx_MemberInfo .mx_RoomTile_name {
|
||||
color: $primary-fg-color ! important;
|
||||
}
|
||||
|
||||
@@ -24,10 +24,13 @@ const INCLUDE_LANGS = [
|
||||
{'value': 'fr', 'label': 'Français'},
|
||||
{'value': 'gl', 'label': 'Galego'},
|
||||
{'value': 'hu', 'label': 'Magyar'},
|
||||
{'value': 'it', 'label': 'Italiano'},
|
||||
{'value': 'ja', 'label': '日本語'},
|
||||
{'value': 'ko', 'label': '한국어'},
|
||||
{'value': 'lv', 'label': 'Latviešu'},
|
||||
{'value': 'nb_NO', 'label': 'Norwegian Bokmål'},
|
||||
{'value': 'nl', 'label': 'Nederlands'},
|
||||
{'value': 'nn', 'label': 'Norsk Nynorsk'},
|
||||
{'value': 'pl', 'label': 'Polski'},
|
||||
{'value': 'pt', 'label': 'Português'},
|
||||
{'value': 'pt_BR', 'label': 'Português do Brasil'},
|
||||
@@ -50,11 +53,16 @@ const COPY_LIST = [
|
||||
["res/home.html", "webapp"],
|
||||
["res/home-status.html", "webapp"],
|
||||
["res/home/**", "webapp/home"],
|
||||
["res/vector-icons/**", "webapp"],
|
||||
["node_modules/matrix-react-sdk/res/{fonts,img,themes}/**", "webapp"],
|
||||
["res/vector-icons/**", "webapp/vector-icons"],
|
||||
["node_modules/matrix-react-sdk/res/{fonts,img,themes,media}/**", "webapp"],
|
||||
["res/themes/**", "webapp/themes"],
|
||||
["node_modules/emojione/assets/svg/*", "webapp/emojione/svg/"],
|
||||
["node_modules/emojione/assets/png/*", "webapp/emojione/png/"],
|
||||
// XXX: This is tied quite heavily to the matching olm.js so it really should be
|
||||
// in the bundle dir with the js to avoid caching issues giving us wasm that
|
||||
// doesn't match our js, but I cannot find any way to get webpack to do this.
|
||||
["node_modules/olm/olm.wasm", "webapp", { directwatch: 1 }],
|
||||
["node_modules/olm/olm_legacy.js", "webapp", { directwatch: 1 }],
|
||||
["./config.json", "webapp", { directwatch: 1 }],
|
||||
];
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ mkdir -p "$projdir/electron_app/dist/unsigned/"
|
||||
# Install packages: what the user downloads the first time,
|
||||
# (DMGs for mac, exe installer for windows)
|
||||
mkdir -p "$pubdir/install/macos"
|
||||
cp $distdir/mac/*.dmg "$pubdir/install/macos/"
|
||||
cp $distdir/*.dmg "$pubdir/install/macos/"
|
||||
|
||||
# Windows installers go to the dist dir because they need signing
|
||||
mkdir -p "$pubdir/install/win32/ia32/"
|
||||
@@ -111,7 +111,7 @@ cp $distdir/win/*.exe "$projdir/electron_app/dist/unsigned/"
|
||||
|
||||
# Packages for auto-update
|
||||
mkdir -p "$pubdir/update/macos"
|
||||
cp $distdir/mac/*.zip "$pubdir/update/macos/"
|
||||
cp $distdir/*-mac.zip "$pubdir/update/macos/"
|
||||
echo "$vername" > "$pubdir/update/macos/latest"
|
||||
|
||||
mkdir -p "$pubdir/update/win32/ia32/"
|
||||
|
||||
@@ -52,13 +52,7 @@ function dodep() {
|
||||
echo "$repo set to branch "`git -C "$repo" rev-parse --abbrev-ref HEAD`
|
||||
|
||||
mkdir -p node_modules
|
||||
rm -r "node_modules/$repo" 2>/dev/null || true
|
||||
ln -sv "../$repo" node_modules/
|
||||
|
||||
(
|
||||
cd $repo
|
||||
npm install
|
||||
)
|
||||
npm link "./$repo" # This does an npm install for us
|
||||
}
|
||||
|
||||
##############################
|
||||
@@ -77,14 +71,15 @@ echo 'Setting up matrix-react-sdk'
|
||||
|
||||
dodep matrix-org matrix-react-sdk
|
||||
|
||||
# replace the version of js-sdk that got pulled into react-sdk with a symlink
|
||||
# replace the version of js-sdk that got pulled into react-sdk with a link
|
||||
# to our version. Make sure to do this *after* doing 'npm i' in react-sdk,
|
||||
# otherwise npm helpfully moves another-json from matrix-js-sdk/node_modules
|
||||
# into matrix-react-sdk/node_modules.
|
||||
#
|
||||
# (note this matches the instructions in the README.)
|
||||
rm -r node_modules/matrix-react-sdk/node_modules/matrix-js-sdk
|
||||
ln -s ../../matrix-js-sdk node_modules/matrix-react-sdk/node_modules/
|
||||
cd matrix-react-sdk
|
||||
npm link ../matrix-js-sdk
|
||||
cd ../
|
||||
|
||||
echo -en 'travis_fold:end:matrix-react-sdk\r'
|
||||
|
||||
|
||||
@@ -4,21 +4,23 @@ set -e
|
||||
|
||||
export NVM_DIR="$HOME/.nvm"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
|
||||
nvm use 6
|
||||
nvm use 10
|
||||
|
||||
set -x
|
||||
|
||||
# check out corresponding branches of dependencies.
|
||||
#
|
||||
# clone the deps with depth 1: we know we will only ever need that one
|
||||
# commit.
|
||||
`dirname $0`/fetch-develop.deps.sh --depth 1
|
||||
|
||||
npm install
|
||||
|
||||
# apparently npm 3.10.3 on node 6.4.0 doesn't upgrade #develop target with npm install unless explicitly asked.
|
||||
npm install olm
|
||||
|
||||
# check out corresponding branches of dependencies.
|
||||
#
|
||||
# clone the deps with depth 1: we know we will only ever need that one
|
||||
# commit.
|
||||
# We need to do this after npm install otherwise modern node versions
|
||||
# just reset it back.
|
||||
`dirname $0`/fetch-develop.deps.sh --depth 1
|
||||
|
||||
# install olm. A naive 'npm i ./olm/olm-*.tgz' fails because it uses the url
|
||||
# from our package.json (or even matrix-js-sdk's) in preference.
|
||||
#
|
||||
|
||||
22
scripts/npm-sub.js
Normal file
22
scripts/npm-sub.js
Normal file
@@ -0,0 +1,22 @@
|
||||
const path = require('path');
|
||||
const child_process = require('child_process');
|
||||
|
||||
const moduleName = process.argv[2];
|
||||
if (!moduleName) {
|
||||
console.error("Expected module name");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const argString = process.argv.length > 3 ? process.argv.slice(3).join(" ") : "";
|
||||
if (!argString) {
|
||||
console.error("Expected an npm argument string to use");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const modulePath = path.dirname(require.resolve(`${moduleName}/package.json`));
|
||||
|
||||
child_process.execSync("npm " + argString, {
|
||||
env: process.env,
|
||||
cwd: modulePath,
|
||||
stdio: ['inherit', 'inherit', 'inherit'],
|
||||
});
|
||||
@@ -17,7 +17,6 @@ limitations under the License.
|
||||
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import HomePage from 'matrix-react-sdk/lib/components/structures/HomePage';
|
||||
import sanitizeHtml from 'sanitize-html';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
@@ -15,8 +15,8 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
var React = require("react");
|
||||
var sanitizeHtml = require("sanitize-html");
|
||||
const React = require("react");
|
||||
const sanitizeHtml = require("sanitize-html");
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
module.exports = React.createClass({
|
||||
@@ -47,5 +47,5 @@ module.exports = React.createClass({
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -16,7 +16,7 @@ limitations under the License.
|
||||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
const React = require('react');
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import SettingsStore from 'matrix-react-sdk/lib/settings/SettingsStore';
|
||||
|
||||
@@ -29,8 +29,8 @@ module.exports = React.createClass({
|
||||
render: function() {
|
||||
// FIXME: replace this with a proper Status skin
|
||||
// ...except then we wouldn't be able to switch to the Status theme at runtime.
|
||||
if (SettingsStore.getValue("theme") === 'status') return <div/>;
|
||||
|
||||
if (SettingsStore.getValue("theme") === 'status') return <div />;
|
||||
|
||||
return (
|
||||
<div className="mx_Login_links">
|
||||
<a href="https://medium.com/@RiotChat">blog</a> ·
|
||||
@@ -39,5 +39,5 @@ module.exports = React.createClass({
|
||||
<a href="https://matrix.org">{ _t('powered by Matrix') }</a>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -35,9 +35,9 @@ module.exports = React.createClass({
|
||||
return (
|
||||
<div className="mx_Login_header">
|
||||
<div className="mx_Login_logo">
|
||||
<img src={this.props.icon || DEFAULT_LOGO_URI} alt="Riot"/>
|
||||
<img src={this.props.icon || DEFAULT_LOGO_URI} alt="Riot" />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -3,5 +3,30 @@
|
||||
"Dismiss": "تجاهل",
|
||||
"Riot is not supported on mobile web. Install the app?": "رايوت غير مدعوم في وضعية الويب على الهاتف. هل تريد تثبيت التطبيق ؟",
|
||||
"Riot Desktop on %(platformName)s": "الواجهة المكتبية لرايوت على %(platformName)s",
|
||||
"Unknown device": "جهاز مجهول"
|
||||
"Unknown device": "جهاز مجهول",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s عبر %(browserName)s على %(osName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "تحتاج الى استخدام الاتصال الآمن ( HTTPS) للسماح بمشاركة الشاشة",
|
||||
"Co-ordination for Riot translators": "التنسيق لمترجمين Riot",
|
||||
"powered by Matrix": "مشغل بواسطة Matrix",
|
||||
"Welcome to Riot.im": "مرحبا بك في Riot.im",
|
||||
"Dev chat for the Dendrite dev team": "Dev chat for the Dendrite dev team",
|
||||
"Implementing VoIP services with Matrix": "تنفيذ خدمات VoIP مع Matrix",
|
||||
"Discussion of the Identity Service API": "مناقشة واجهة برمجة التطبيقات لخدمة الهوية",
|
||||
"Support for those using, running and writing other bridges": "دعم لأولئك الذين يستخدمون الجسور الأخرى ويديرونها وكتابتهم",
|
||||
"Implementing VR services with Matrix": "تنفيذ خدمات الواقع الافتراضي مع Matrix",
|
||||
"Search the room directory": "ابحث في دليل الغرفة",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "توجد بالفعل الكثير من الغرف في Matrix ، مرتبطة بالشبكات القائمة (Slack، IRC، Gitter الخ) أو مستقلة. تحقق من الدليل!",
|
||||
"Chat with Riot Bot": "الدردشة مع Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "ابدأ ببعض النصائح من Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "مناقشة عامة حول Matrix و Riot",
|
||||
"Discussion of all things Matrix!": "مناقشة كل شيء Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & دردشة سطح المكتب",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||
"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 لخادم Home آخر.<br/>هذا يسمح لك باستخدام Riot مع حساب Matrix موجود على خادم منزل مختلف.<br/><br/>يمكنك أيضًا تعيين خادم هوية مخصص ولكنك لن تتمكن من دعوة المستخدمين عن طريق عنوان البريد الإلكتروني ، أو دعوتك عبر عنوان البريد الإلكتروني بنفسك.",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "[matrix] تعاون مدعوم مواسطة & دردشة لا مركزية ومشفرة",
|
||||
"Matrix technical discussions": "مناقشات تقنية Matrix",
|
||||
"Running Matrix services": "تشغيل خدمات Matrix",
|
||||
"Community-run support for Synapse": "الدعم المجتمعي لـ Synapse",
|
||||
"Admin support for Dendrite": "الدعم الاداري لـDendrite",
|
||||
"Announcements about Synapse releases": "إعلانات حول إصدارات Synaps"
|
||||
}
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
"Support for those using, running and writing other bridges": "Поддръжка за тези, които използват, работят и пишат Matrix мостове",
|
||||
"Contributing code to Matrix and Riot": "Допринасяне с код към Matrix и Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Чат за разработващия екип на Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Чат за разработващия екип на Dendrite"
|
||||
"Dev chat for the Dendrite dev team": "Чат за разработващия екип на Dendrite",
|
||||
"Co-ordination for Riot translators": "Координация за преводачи на Riot"
|
||||
}
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
{}
|
||||
{
|
||||
"Riot is not supported on mobile web. Install the app?": "মোবাইল ওয়েব রায়ট সমর্থন করে না. অ্য়াপ টি ইনস্টল করতে চান?"
|
||||
}
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
"Custom Server Options": "Opcions de servidor personalitzat",
|
||||
"Dismiss": "Omet",
|
||||
"Unknown device": "Dispositiu desconegut",
|
||||
"Welcome to Riot.im": "Benvingut a Riot.im",
|
||||
"Welcome to Riot.im": "Us donem la benvinguda a Riot.im",
|
||||
"Chat with Riot Bot": "Conversa amb el Bot de Riot",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot no és compatible amb la web per a mòbils. Voleu instal·lar l'aplicació per a mòbils?",
|
||||
"Riot Desktop on %(platformName)s": "Riot d'escriptori per a %(platformName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Heu d'utilitzar HTTPS per poder fer una trucada amb pantalla compartida.",
|
||||
"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.": "Podeu utilitzar opcions de servidor personalitzades per iniciar sessió en altres servidors Matrix especificant una URL diferent a la del servidor principal. <br/> Això us permet utilitzar Riot amb un compte de Matrix existent en un servidor d'origen diferent. <br/> <br/> També podeu establir un servidor d'identitat personalitzat, però no podreu convidar o ser convidat per correu electrònic.",
|
||||
"powered by Matrix": "amb tecnologia de Matrix",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Xat descentralitzat, encriptat & col·laboració amb tecnologia de [matrix]",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Xat descentralitzat, encriptat i col·laboratiu amb tecnologia de [matrix]",
|
||||
"Search the room directory": "Cerqueu el directori de sales",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Ja existeixen moltes sales a Matrix vinculades a xarxes existents (Slack, IRC, Gitter, etc.) o independents. Feu un cop d'ull al directori!",
|
||||
"Get started with some tips from Riot Bot!": "Comenceu amb alguns consells de Riot Bot!",
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS a matrix-ios-sdk chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android a matrix-android-sdk chat",
|
||||
"Discussion of the Identity Service API": "Diskuze o API služby identity",
|
||||
"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."
|
||||
"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.",
|
||||
"Co-ordination for Riot translators": "Spolupráce pro překladatele Riot"
|
||||
}
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
"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!",
|
||||
"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",
|
||||
"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."
|
||||
"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.",
|
||||
"Co-ordination for Riot translators": "Koordination für Riot-Übersetzer"
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"Unknown device": "Άγνωστη συσκευή",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Απαιτείται η χρήση HTTPS για το διαμοιρασμό της επιφάνειας εργασίας μέσω κλήσης.",
|
||||
"Riot is not supported on mobile web. Install the app?": "Το Riot δεν υποστηρίζεται από περιηγητές κινητών. Θέλετε να εγκαταστήσετε την εφαρμογή;",
|
||||
"powered by Matrix": "βασισμένο στο πρωτόκολλο Matrix",
|
||||
"powered by Matrix": "βασισμένο στο Matrix",
|
||||
"Welcome to Riot.im": "Καλώς ήλθατε στο Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία & συνεργασία με τη βοήθεια του [matrix]",
|
||||
"Search the room directory": "Αναζήτηση του ευρετηρίου δωματίων",
|
||||
@@ -22,16 +22,18 @@
|
||||
"Community-run support for Synapse": "Κοινοτική υποστήριξη για το Synapse",
|
||||
"Admin support for Dendrite": "Υποστήριξη διαχειριστή για το Dendrite",
|
||||
"Announcements about Synapse releases": "Ανακοινώσεις σχετικά με τις εκδόσεις του Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Υποστήριξη για τους χρήστες που χρησιμοποιούν το matrix-appservice-irc",
|
||||
"Support for those using and running matrix-appservice-irc": "Υποστήριξη για τους χρήστες του matrix-appservice-irc",
|
||||
"Building services on Matrix": "Ανάπτυξη υπηρεσιών στο Matrix",
|
||||
"Support for those using the Matrix spec": "Υποστήριξη για τους χρήστες που χρησιμοποιούν το Matrix spec",
|
||||
"Design and implementation of E2E in Matrix": "Σχεδιασμός και υλοποίηση του E2E στο Matrix",
|
||||
"Implementing VR services with Matrix": "Υλοποίηση υπηρεσίων VR με το Matrix",
|
||||
"Implementing VoIP services with Matrix": "Υλοποίηση υπηρεσίων VoIP με το Matrix",
|
||||
"Discussion of the Identity Service API": "Συζήτηση σχετικά με το Identity Service API",
|
||||
"Contributing code to Matrix and Riot": "Συνεισφορά κώδικα στο Matrix και Riot",
|
||||
"Contributing code to Matrix and Riot": "Συνεισφορά κώδικα στο Matrix και στο Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Συζήτηση με την ομάδα ανάπτυξης του Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Συζήτηση με την ομάδα ανάπτυξης του Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Αρκετά δωμάτια υπάρχουν ήδη στο Matrix, συνδεδεμένα σε υπάρχοντα δίκτυα (Slack, IRC, Gitter κ.λπ) ή αυτόνομα. Ρίξτε μια ματιά στο ευρετήριο!",
|
||||
"Support for those using, running and writing other bridges": "Υποστήριξη για τους χρήστες που χρησιμοποιούν ή αναπτύσσουν εφαρμογές ενσωμάτωσης για το Matrix"
|
||||
"Support for those using, running and writing other bridges": "Υποστήριξη για τους χρήστες που χρησιμοποιούν ή αναπτύσσουν εφαρμογές ενσωμάτωσης για το Matrix",
|
||||
"Co-ordination for Riot translators": "Συντονισμός για μεταφραστές του Riot",
|
||||
"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/>Μπορείτε επίσης να ορίσετε έναν προσαρμοσμένο διακομιστή ταυτοποίησης αλλά δεν θα μπορείτε να προσκαλέσετε χρήστες ή να προσκληθείτε εσείς μέσω διεύθυνσης ηλεκτρονικού ταχυδρομίου."
|
||||
}
|
||||
|
||||
@@ -33,5 +33,7 @@
|
||||
"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!",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk 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",
|
||||
"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.",
|
||||
"Co-ordination for Riot translators": "Co-ordination for Riot translators"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Vi devas uzi HTTPS por ekranvidadi.",
|
||||
"Welcome to Riot.im": "Bonvenu al Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Malcentra, ĉifrita babilado & kunlaboro povigita de [matrix]",
|
||||
"Search the room directory": "Serĉi en la ĉambrujo",
|
||||
"Search the room directory": "Serĉi en la babilejo-listo",
|
||||
"Chat with Riot Bot": "Babilu kun la roboto Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Komencu kun kelkaj sugestoj de la roboto Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Ĝenerala diskutado pri Matrix kaj Riot",
|
||||
@@ -34,5 +34,6 @@
|
||||
"Dev chat for the Dendrite dev team": "Babilado por la programista skipo de Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Multaj ĉambroj jam ekzistas en Matrix; kaj sendependaj, kaj ligitaj kun jamaj retoj (Slock, IRC, Gitter, ktp.). Rigardu la ĉambrujon!",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s per %(browserName)s je %(osName)s",
|
||||
"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.": "Vi povas uzi proprajn servilajn elektojn por saluti aliajn servilojn de Matrix, per specifo de alia hejmservila URL.<br/>Tio permesas al vi uzi klienton Riot kun jama konto de Matrix en alia hejmservilo.<br/><br/>Vi ankaŭ povas agordi propran identigan servilon, sed vi ne povos inviti uzantojn per retpoŝtadreso, aŭ esti invitata per retpoŝtadreso mem."
|
||||
"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.": "Vi povas uzi proprajn servilajn elektojn por saluti aliajn servilojn de Matrix, per specifo de alia hejmservila URL.<br/>Tio permesas al vi uzi klienton Riot kun jama konto de Matrix en alia hejmservilo.<br/><br/>Vi ankaŭ povas agordi propran identigan servilon, sed vi ne povos inviti uzantojn per retpoŝtadreso, aŭ esti invitata per retpoŝtadreso mem.",
|
||||
"Co-ordination for Riot translators": "Kunordigo por tradukantoj de Riot"
|
||||
}
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
"Dev chat for the Riot/Web dev team": "Conversaciones del equipo de desarrollo de Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Conversaciones del equipo de desarrollo de Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Muchas salas ya están disponibles en Matrix, enlazadas a redes existentes (Slack, IRC, Gitter, etc) o independientes. ¡Revisa el directorio!",
|
||||
"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.": "Puedes usar las opciones del servidor personalizado para acceder a otros servidores Matrix especificando su URL. <br/> Esto te permite usar Riot con una cuenta Matrix existente en un servidor doméstico distinto. <br/><br/>También puedes establecer un servidor de identidad personalizado pero no podrás invitar a otros usuarios usando su dirección de correo electrónico, y tampoco ser invitado por el tuyo."
|
||||
"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.": "Puedes usar las opciones del servidor personalizado para acceder a otros servidores Matrix especificando su URL. <br/> Esto te permite usar Riot con una cuenta Matrix existente en un servidor doméstico distinto. <br/><br/>También puedes establecer un servidor de identidad personalizado pero no podrás invitar a otros usuarios usando su dirección de correo electrónico, y tampoco ser invitado por el tuyo.",
|
||||
"Co-ordination for Riot translators": "Co-odinación de traductores de Riot"
|
||||
}
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
"Dev chat for the Riot/Web dev team": "Riot/web garapen taldearen txata",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite garapen taldearen txata",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Badauden sareetara lotutako gela ugari daude Matrixen (Slack, IRC, Gitter eta abar), baita independienteak. Begiratu direktorioa!",
|
||||
"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.": "Zerbitzari pertsonalizatuaren aukerak erabili ditzakezu beste Matrix zerbitzarietan saioa hasteko, han beste hasiera-zerbitzari baten URLa sartuz.<br/>Horrela Riot aurretik duzun kontu batekin erabili dezakezu beste hasiera-zerbitzari batean.<br/><br/>Identitate-zerbitzari pertsonalizatu bat ezarri dezakezu ere, baina orduan ezin izango dituzu erabiltzaileak e-mail helbidea erabiliz gonbidatu, edo ezin izan izango zaituzte zu e-mail helbidea erabiliz gonbidatu."
|
||||
"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.": "Zerbitzari pertsonalizatuaren aukerak erabili ditzakezu beste Matrix zerbitzarietan saioa hasteko, han beste hasiera-zerbitzari baten URLa sartuz.<br/>Horrela Riot aurretik duzun kontu batekin erabili dezakezu beste hasiera-zerbitzari batean.<br/><br/>Identitate-zerbitzari pertsonalizatu bat ezarri dezakezu ere, baina orduan ezin izango dituzu erabiltzaileak e-mail helbidea erabiliz gonbidatu, edo ezin izan izango zaituzte zu e-mail helbidea erabiliz gonbidatu.",
|
||||
"Co-ordination for Riot translators": "Riot itzultzaileen koordinazioa"
|
||||
}
|
||||
|
||||
@@ -33,5 +33,6 @@
|
||||
"Implementing VoIP services with Matrix": "پیادهسازی سرویسهای VoIP با ماتریکس",
|
||||
"Discussion of the Identity Service API": "بحث درمورد API سرویس هویت",
|
||||
"Building services on Matrix": "ساخت سرویس بر روی ماتریکس",
|
||||
"Support for those using the Matrix spec": "پشتیبانی برای آنان که از مستندات ماتریکس استفاده میکنند"
|
||||
"Support for those using the Matrix spec": "پشتیبانی برای آنان که از مستندات ماتریکس استفاده میکنند",
|
||||
"Co-ordination for Riot translators": "هماهنگی برای مترجمان Riot"
|
||||
}
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
"powered by Matrix": "propulsé par Matrix",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s dans %(browserName)s sous %(osName)s",
|
||||
"Riot Desktop on %(platformName)s": "Version bureau de Riot sur %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot n’est pas supporté sur les appareils mobiles. Installer l’application ?",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot n’est pas disponible en version web mobile. Installer l’application ?",
|
||||
"Unknown device": "Appareil inconnu",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Vous devez utiliser HTTPS pour effectuer un appel en partage d’écran.",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Vous devez utiliser HTTPS pour effectuer un appel avec partage d’écran.",
|
||||
"Welcome to Riot.im": "Bienvenue sur Riot.im",
|
||||
"Chat with Riot Bot": "Discussion avec Riot Bot",
|
||||
"Search the room directory": "Rechercher dans le répertoire de salons",
|
||||
@@ -34,5 +34,6 @@
|
||||
"Dev chat for the Riot/Web dev team": "Discussions de l'équipe de développeurs de Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Discussion pour l'équipe de développeurs de Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "De nombreux salons existent déjà dans Matrix, liés à des réseaux existants (Slack, IRC, Gitter etc) ou indépendants. Jetez un œil au répertoire !",
|
||||
"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."
|
||||
"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.",
|
||||
"Co-ordination for Riot translators": "Coordination des traducteurs de Riot"
|
||||
}
|
||||
|
||||
@@ -4,35 +4,36 @@
|
||||
"Dismiss": "Rexeitar",
|
||||
"powered by Matrix": "funciona grazas a Matrix",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop en %(platformName)s",
|
||||
"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 non se pode executar na web do móbil. Instalar a aplicación?",
|
||||
"Unknown device": "Dispositivo descoñecido",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Precisa utilizar HTTPS para establecer unha chamada de pantalla compartida.",
|
||||
"Welcome to Riot.im": "Benvida a Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat & colaboración descentralizados e cifrados grazas a [matrix]",
|
||||
"Welcome to Riot.im": "Benvida/o a Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversas e colaboración descentralizada e cifrada grazas a [matrix]",
|
||||
"Search the room directory": "Buscar no directorio de salas",
|
||||
"Chat with Riot Bot": "Chat co Bot de Riot",
|
||||
"Get started with some tips from Riot Bot!": "Iníciese con algúns consellos do Bot de Riot!",
|
||||
"Chat with Riot Bot": "Conversa co bot de Riot",
|
||||
"Get started with some tips from Riot Bot!": "Iníciese con algúns consellos do bot de Riot!",
|
||||
"General discussion about Matrix and Riot": "Discusión xeral sobre Matrix e Riot",
|
||||
"Discussion of all things Matrix!": "Conversa sobre to o relativo a Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & chat de Escritorio",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & chat matrix-ios-sdk",
|
||||
"Discussion of all things Matrix!": "Conversa sobre todo o relativo a Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & sala de conversas para escritorio",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & sala de conversas matrix-ios-sdk",
|
||||
"Matrix technical discussions": "Discusións técnicas sobre Matrix",
|
||||
"Running Matrix services": "Servizos correndo sobre Matrix",
|
||||
"Running Matrix services": "Servizos que empregan Matrix",
|
||||
"Community-run support for Synapse": "Axuda da comunidade para Synapse",
|
||||
"Admin support for Dendrite": "Axuda administrador para Dendrite",
|
||||
"Admin support for Dendrite": "Axuda de administrador para Dendrite",
|
||||
"Announcements about Synapse releases": "Anuncios sobre lanzamentos de Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Axuda para quen usa matrix-appservice-irc",
|
||||
"Building services on Matrix": "Deseñando servizos sobre Matrix",
|
||||
"Support for those using the Matrix spec": "Axuda para quen usa a especificación Matrix",
|
||||
"Support for those using the Matrix spec": "Axuda para quen usa a especificación de Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Deseño e implementación de E2E en Matrix",
|
||||
"Implementing VR services with Matrix": "Implementando servizos de RV con Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementación de servizos VoIP con Matrix",
|
||||
"Discussion of the Identity Service API": "Conversa sobre a Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Axuda para que utiliza, executa e desenvolve outras pontes",
|
||||
"Contributing code to Matrix and Riot": "Contribuíndo ao código en Matrix e Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Chat para o equipo de desenvolvemento do Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Chat para o equipo de desenvolvemento de Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Xa existen multitude de salas en Matrix, ligadas a redes existentes (Slack, IRC, Gitter etc) ou independentes. Busque no directorio!",
|
||||
"Riot/Android & matrix-android-sdk chat": "Chat para Riot/Android & matrix-android-sdk",
|
||||
"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."
|
||||
"Discussion of the Identity Service API": "Conversa sobre a API do servizo de identificación",
|
||||
"Support for those using, running and writing other bridges": "Axuda para quen está a utilizar, executar ou desenvolver outras pontes",
|
||||
"Contributing code to Matrix and Riot": "Contribuíndo ao código de Matrix e Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Sala de conversa para o equipo de desenvolvemento de Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Sala de conversas para o equipo de desenvolvemento de Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Xa existen multitude de salas en Matrix ben ligadas a redes existentes (Slack, IRC, Gitter etc) ou ben independentes. Busque no directorio!",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & sala de conversas matrix-android-sdk",
|
||||
"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.": "Pode utilizar as opcións persoais de servidor para conectarse a outros servidores Matrix indicando o enderezo URL dese servidor.</br>Isto permítelle utilizar Riot cunha conta Matrix existente en outro servidor.<br/><br/>Tamén pode empregar un servidor personalizado de identidade mais nese caso nin se poderán convidar a outros usuarios empregando os correo electrónicos nin tampouco eles o poderán convidar a vostede por correo.",
|
||||
"Co-ordination for Riot translators": "Coordinación para tradutora/es de Riot"
|
||||
}
|
||||
|
||||
@@ -1 +1,39 @@
|
||||
{}
|
||||
{
|
||||
"Riot is not supported on mobile web. Install the app?": "रायट फ़ोन पर समर्थन नहीं हैं। एप्लिकेशन इनस्टॉल करना चाहेंगे ?",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s पर रायट डेस्कटॉप",
|
||||
"Unknown device": "अज्ञात यन्त्र",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)s पर %(browserName)s के माध्यम से %(appName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "स्क्रीन साझा की कॉल करने के लिए आपको HTTPS का उपयोग करने की आवश्यकता है।",
|
||||
"Custom Server Options": "कस्टम सर्वर विकल्प",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "आप एक अलग होम सर्वर यूआरएल निर्दिष्ट करके अन्य मैट्रिक्स सर्वरों में साइन इन करने के लिए कस्टम सर्वर विकल्प का उपयोग कर सकते हैं। <br/> यह आपको एक अलग होम सर्वर पर मौजूदा मैट्रिक्स खाते के साथ रायट का उपयोग करने की अनुमति देता है। <br/> <br/> आप अपना आइडेंटिटी सर्वर भी सेट कर सकते हैं लेकिन आप ईमेल पते से उपयोगकर्ताओं को आमंत्रित नहीं कर पाएंगे, या ईमेल पते से स्वयं आमंत्रित नहीं हों सकेंगे।",
|
||||
"Dismiss": "खारिज",
|
||||
"powered by Matrix": "मैट्रिक्स द्वारा संचालित",
|
||||
"Welcome to Riot.im": "Riot.im में आपका स्वागत है",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "[मैट्रिक्स] द्वारा संचालित विकेंद्रीकृत, एन्क्रिप्टेड चैट और सहयोगिता",
|
||||
"Search the room directory": "रूम डायरेक्टरी को खोजें",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "मौजूदा नेटवर्क से जुड़े मैट्रिक्स में बहुत से कमरे पहले से मौजूद हैं (स्लैक, आईआरसी, गिटर इत्यादि) या स्वतंत्र। डायरेक्टरी देखें!",
|
||||
"Chat with Riot Bot": "रायट बॉट के साथ चैट करें",
|
||||
"Get started with some tips from Riot Bot!": "रायट बॉट से कुछ सुझावों के साथ शुरू करें!",
|
||||
"General discussion about Matrix and Riot": "मैट्रिक्स और रायट के बारे में सामान्य चर्चा",
|
||||
"Discussion of all things Matrix!": "मैट्रिक्स की सभी चीजों की चर्चा!",
|
||||
"Riot/Web & Desktop chat": "रायट/वेब और डेस्कटॉप चैट",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "रायट / iOS और matrix-ios-sdk चैट",
|
||||
"Riot/Android & matrix-android-sdk chat": "रायट / एंड्रॉइड और matrix-android-sdk चैट",
|
||||
"Matrix technical discussions": "मैट्रिक्स तकनीकी चर्चाएं",
|
||||
"Running Matrix services": "मैट्रिक्स सेवाएं चलाना",
|
||||
"Community-run support for Synapse": "सामुदायिक चालित Synapse के लिए समर्थन",
|
||||
"Admin support for Dendrite": "डेंडर्राइट के लिए व्यवस्थापक समर्थन",
|
||||
"Announcements about Synapse releases": "Synapse रिलीज के बारे में घोषणाएं",
|
||||
"Support for those using and running matrix-appservice-irc": "Matrix-appservice-irc का उपयोग और चलाने वाले लोगों के लिए समर्थन",
|
||||
"Building services on Matrix": "मैट्रिक्स पर सेवाएं बनाना",
|
||||
"Support for those using the Matrix spec": "मैट्रिक्स spec का उपयोग करने वालों के लिए समर्थन",
|
||||
"Design and implementation of E2E in Matrix": "मैट्रिक्स में E2E के डिजाइन और कार्यान्वयन",
|
||||
"Implementing VR services with Matrix": "मैट्रिक्स के साथ VR सेवाओं को लागू करना",
|
||||
"Implementing VoIP services with Matrix": "मैट्रिक्स के साथ वीओआईपी सेवाओं को लागू करना",
|
||||
"Discussion of the Identity Service API": "आइडेंटिटी सर्विस API की चर्चा",
|
||||
"Support for those using, running and writing other bridges": "अन्य ब्रिज का उपयोग, चलाने और लिखने वालों के लिए समर्थन",
|
||||
"Contributing code to Matrix and Riot": "मैट्रिक्स और रायट में कोड योगदान करना",
|
||||
"Dev chat for the Riot/Web dev team": "रायट / वेब डेव टीम के लिए डेवलपर चैट",
|
||||
"Dev chat for the Dendrite dev team": "डेन्ड्राइट देव टीम के लिए डेवलपर चैट",
|
||||
"Co-ordination for Riot translators": "रायट अनुवादकों के लिए समन्वय"
|
||||
}
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
"Dev chat for the Riot/Web dev team": "Csevegés a Riot/Web fejlesztői csapatával fejlesztőknek",
|
||||
"Dev chat for the Dendrite dev team": "Csevegés a Dendrite fejlesztői csapatával fejlesztőknek",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Már sok szoba van a Matrixon: más hálózatokkal (Slack, IRC, Gitter stb.) összekapcsolt és függetlenek szobák is. Nézd meg a szobajegyzéket!",
|
||||
"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 szerverre is az egyedi szerverbeállításoknál megadott másik szerver URL-jével.<br/>Így használhatod a Riotot egy már máshol meglévő Matrix fiókkal is.<br/><br/>Beállíthatsz egyéni identitásszervert is, de akkor nem tudsz más felhasználókat e-mail címmel meghívni, illetve ők sem tudnak téged."
|
||||
"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 szerverre is az egyedi szerverbeállításoknál megadott Matrix szerver URL-jével.<br/>Így használhatod a Riotot egy már máshol meglévő Matrix fiókkal is.<br/><br/>Beállíthatsz egyéni identitásszervert is, de akkor nem tudsz más felhasználókat e-mail címmel meghívni, illetve ők sem tudnak téged.",
|
||||
"Co-ordination for Riot translators": "Koordináció Riot fordítók számára"
|
||||
}
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
"Dev chat for the Riot/Web dev team": "Obrolan Developer untuk tim developer Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Obrolan Developer untuk tim developer Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Banyak ruang sudah tersedia di Matrix, terhubung ke jaringan yang sudah ada (Slack, IRC, Gitter dls) atau independen. Cek direktori!",
|
||||
"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.": "Anda dapat menggunakan opsi lain untuk mendaftar pada server Matrix yang berbeda dengan memasukkan URL server yang sesuai. <br/>Hal ini memungkinkan anda untuk menggunakan Riot dengan akun matrix yang telah tersedia pada Home server yang berbeda.<br/><br/>Anda juga dapat melakukan pengubahan identitas server akan tetapi akan berakibat tidak dapat mengundang pengguna melalui email, atau diundang melalui email."
|
||||
"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.": "Anda dapat menggunakan opsi lain untuk mendaftar pada server Matrix yang berbeda dengan memasukkan URL server yang sesuai. <br/>Hal ini memungkinkan anda untuk menggunakan Riot dengan akun matrix yang telah tersedia pada Home server yang berbeda.<br/><br/>Anda juga dapat melakukan pengubahan identitas server akan tetapi akan berakibat tidak dapat mengundang pengguna melalui email, atau diundang melalui email.",
|
||||
"Co-ordination for Riot translators": "Koordinasi dengan penerjemah Riot"
|
||||
}
|
||||
|
||||
@@ -7,6 +7,33 @@
|
||||
"Dismiss": "Hafna",
|
||||
"Riot/Web & Desktop chat": "Riot/Spjall á vef- & skjáborði",
|
||||
"Custom Server Options": "Sérsniðnir valkostir vefþjóns",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot er ekki studd á farsímavef. Setja upp appið?",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Þú þarft að vera að nota HTTPS til að nota skjáadeild."
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot er ekki stutt í farsímaútgáfu vefsins. Setja upp forritið?",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Þú verður að nota HTTPS til að hringja samtal með deilingu á skjá.",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk spjall",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk spjall",
|
||||
"Matrix technical discussions": "Tæknilegar umræður varðandi Matrix",
|
||||
"Running Matrix services": "Að keyra Matrix þjónustur",
|
||||
"Chat with Riot Bot": "Spjalla við Riot-róbótann",
|
||||
"Get started with some tips from Riot Bot!": "Komdu þér í gang með nokkrum ábendingum frá Riot-róbótanum!",
|
||||
"General discussion about Matrix and Riot": "Almenn umræða um Matrix og Riot",
|
||||
"Discussion of all things Matrix!": "Almenn umræða um Matrix!",
|
||||
"Implementing VR services with Matrix": "Uppsetning á VR-þjónustum með Matrix",
|
||||
"Implementing VoIP services with Matrix": "Uppsetning á VoIP-þjónustum með Matrix",
|
||||
"Contributing code to Matrix and Riot": "Framlög á kóða til Matrix og Riot",
|
||||
"Co-ordination for Riot translators": "Yfirlit fyrir þýðendur Riot",
|
||||
"Search the room directory": "Leita í herbergisskránni",
|
||||
"Building services on Matrix": "Að byggja þjónustur á Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Hönnun og framkvæmd E2E í Matrix",
|
||||
"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.": "Þú getur notað sérsniðna valkosti til að skrá inn á aðra Matrix-vefþjóna með því að tilgreina aðra slóð á Heimavefþjón.<br/>Þetta gerir þér kleift að nota Riot með fyrirliggjandi Matrix notandaaðgangi á öðrum heimaþjóni.<br/><br/>Þú getur líka stillt sérsniðinn auðkenningarþjón, en þá getur þú ekki boðið notendum eftir tölvupóstfangi eða sjálfur fengið boð með tölvupósti.",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dulritað dreifvinnsluspjall & samstarfstól keyrt með [matrix]",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Margar spjallrásir eru til í Matrix, tengdar við fyrirliggjandi netkerfi (Slack, IRC, Gitter, o.s.frv.) eða óháð. Skoðaðu skráninguna!",
|
||||
"Community-run support for Synapse": "Aðstoð frá samfélaginu fyrir Synapse",
|
||||
"Admin support for Dendrite": "Kerfisstjórnarstuðningur fyrir Dendrite",
|
||||
"Announcements about Synapse releases": "Tilkynningar um Synapse útgáfur",
|
||||
"Support for those using and running matrix-appservice-irc": "Stuðningur við þá sem nota og keyra matrix-appservice-irc",
|
||||
"Support for those using the Matrix spec": "Stuðningur við þá sem nota tæknilega Matrix eiginleika",
|
||||
"Discussion of the Identity Service API": "Umræða um Identity Service API-kerfisviðmót",
|
||||
"Support for those using, running and writing other bridges": "Stuðningur við þá sem nota, keyra og skrifa aðrar brýr",
|
||||
"Dev chat for the Riot/Web dev team": "Forritaraspjall fyrir Riot/vefþróunarhópinn",
|
||||
"Dev chat for the Dendrite dev team": "Forritaraspjall fyrir Dendrite þróunarhópinn"
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"Custom Server Options": "Opzioni Server Personalizzate",
|
||||
"Dismiss": "Scarta",
|
||||
"Custom Server Options": "Opzioni server personalizzate",
|
||||
"Dismiss": "Chiudi",
|
||||
"powered by Matrix": "offerto da Matrix",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop su %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot non è supportato sul web mobile. Vuoi installare l'applicazione?",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot non è supportato sul web mobile. Installare l'applicazione?",
|
||||
"Unknown device": "Dispositivo sconosciuto",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Devi usare HTTPS per utilizzare una chiamata con condivisione schermo.",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Devi usare HTTPS per effettuare una chiamata con la condivisione dello schermo.",
|
||||
"Welcome to Riot.im": "Benvenuto/a su Riot.im",
|
||||
"Search the room directory": "Cerca nella lista delle stanze",
|
||||
"Chat with Riot Bot": "Chatta con Riot Bot",
|
||||
@@ -22,17 +22,18 @@
|
||||
"Support for those using and running matrix-appservice-irc": "Supporto per chi usa e amministra matrix-appservice-irc",
|
||||
"Building services on Matrix": "Costruzione servizi su Matrix",
|
||||
"Support for those using the Matrix spec": "Supporto per chi utilizza le specifiche Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Design e implementazione di E2E in Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Progetto e implementazione di E2E in Matrix",
|
||||
"Implementing VR services with Matrix": "Implementazione servizi VR con Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementazione servizi VoIP con Matrix",
|
||||
"Discussion of the Identity Service API": "Discussione sull'Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Supporto per chi usa, amministra e scrive altri bridge",
|
||||
"Contributing code to Matrix and Riot": "Contributi al codice di Matrix e Riot",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s su %(osName)s",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat criptate e collaborazioni decentralizzate offerte da [matrix]",
|
||||
"Discussion of all things Matrix!": "Discussione su tutto quanto riguardi Matrix!",
|
||||
"Discussion of the Identity Service API": "Discussione API del servizio identità",
|
||||
"Support for those using, running and writing other bridges": "Supporto per chi usa, amministra e scrive altri ponti (bridge)",
|
||||
"Contributing code to Matrix and Riot": "Contributi di codice per Matrix e Riot",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s tramite %(browserName)s su %(osName)s",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat criptate e decentralizzate & collaborazione offerta da [matrix]",
|
||||
"Discussion of all things Matrix!": "Discussione su tutto riguardo Matrix!",
|
||||
"Dev chat for the Riot/Web dev team": "Chat per gli sviluppatori di Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Chat per gli sviluppatori di Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Esistono già molte stanze in Matrix, collegate a reti già esistenti (Slack, IRC, Gitter ecc) o indipendenti. Dai un'occhiata all'elenco!",
|
||||
"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.": "Puoi usare le opzioni server personalizzate per accedere ad altri server Matrix specificando l'indirizzo dell'home server.<br/> Questo permette di usare Matrix con un account esistente su un home server diverso.<br/><br/>È anche possibile impostare un diverso identity server, ma in quel caso non sarà possibile invitare utenti attraverso l'indirizzo e-mail o essere invitati attraverso l'indirizzo e-mail."
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Esistono già molte stanze in Matrix, collegate a reti esistenti (Slack, IRC, Gitter, ecc.) o indipendenti. Controlla l'elenco!",
|
||||
"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.": "Puoi usare le opzioni server personalizzate per accedere ad altri server Matrix specificando l'indirizzo del server home.<br/> Questo permette di usare Riot con un account Matrix esistente su un server home diverso.<br/><br/>È anche possibile impostare un diverso server identità, ma in tal caso non sarà possibile invitare utenti attraverso l'indirizzo e-mail o essere invitati attraverso l'indirizzo e-mail.",
|
||||
"Co-ordination for Riot translators": "Coordinazione per i traduttori di Riot"
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"Chat with Riot Bot": "Riot Botと会話",
|
||||
"Get started with some tips from Riot Bot!": "Riot Botにヒントをもらって始めましょう!",
|
||||
"General discussion about Matrix and Riot": "MatrixとRiotの概略",
|
||||
"Discussion of all things Matrix!": "Matrixなんでも討論",
|
||||
"Discussion of all things Matrix!": "Matrixなんでも議論!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & デスクトップ版チャット",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk チャット",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk チャット",
|
||||
@@ -25,14 +25,15 @@
|
||||
"Admin support for Dendrite": "Dendriteの管理者サポート",
|
||||
"Announcements about Synapse releases": "Synapseの公開についてのお知らせ",
|
||||
"Support for those using and running matrix-appservice-irc": "matrix-appservice-ircを利用並びに運営している方へのサポート",
|
||||
"Building services on Matrix": "Matrixでのサービスの開発",
|
||||
"Building services on Matrix": "Matrix上でのサービスの開発",
|
||||
"Support for those using the Matrix spec": "Matrixスペックを利用する方へのサポート",
|
||||
"Design and implementation of E2E in Matrix": "Matrixでのデザインとエンドツーエンドの実装",
|
||||
"Design and implementation of E2E in Matrix": "Matrixのデザインとエンドツーエンドの実装",
|
||||
"Implementing VR services with Matrix": "MatrixでのVRサービスの実装",
|
||||
"Implementing VoIP services with Matrix": "MatrixでのIP電話サービスの実装",
|
||||
"Discussion of the Identity Service API": "Identity Service APIの議論",
|
||||
"Support for those using, running and writing other bridges": "他のブリッジを利用、運営、作成している方へのサポート",
|
||||
"Contributing code to Matrix and Riot": "MatrixとRiotにコードを提供する",
|
||||
"Dev chat for the Riot/Web dev team": "Riot/Web開発者チームのための開発者チャット",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite開発者チームのための開発者チャット"
|
||||
"Dev chat for the Dendrite dev team": "Dendrite開発者チームのための開発者チャット",
|
||||
"Co-ordination for Riot translators": "Riot 翻訳者による共同作業"
|
||||
}
|
||||
|
||||
39
src/i18n/strings/jbo.json
Normal file
39
src/i18n/strings/jbo.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"Riot is not supported on mobile web. Install the app?": ".i lo samfonxa na kakne lo nu pilno la kibro nu zunti .i .au pei kibycpa le samtci",
|
||||
"Riot Desktop on %(platformName)s": "la skami nu zunti ci'e la'o gy. %(platformName)s .gy.",
|
||||
"Unknown device": "lo na'e te djuno se pilno",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "la'o gy. %(appName)s .gy. xe be'i la'o gy. %(browserName)s .gy. ci'e la'o gy. %(osName)s .gy.",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": ".i la .hytytypysys. sarcu lo nu co'a vidni jorne",
|
||||
"Custom Server Options": "lo macnu se cuxna be fi lo'i samse'u",
|
||||
"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.": ".i zukte lo nu macnu cuxna lo samse'u kei goi ko'a lo nu pilno lo drata samse'u pe la nacmeimei<br/>.i ko'a se cumki lo nu do pilno lo pilno poi zvati lo drata samse'u pe la nacmeimei<br/><br/>.i ji'a cumki fa lo nu do pilno lo drata ke prenu datni samse'u kei goi ko'a .i ku'i ko'a to'e rinka la'a lo nu do zvacpe ja se zvacpe",
|
||||
"Dismiss": "mipri",
|
||||
"powered by Matrix": ".i la nacmeimei cu cumgau",
|
||||
"Welcome to Riot.im": ".i fi'i lo pilno be la nu zunti",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": ".i la nacmeimei cu cumgau lo mifra je na'e se midju nu tavla je ke kansa gunka",
|
||||
"Search the room directory": "sisku fi lo'i kumfa pe'a",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": ".i ci'e la nacmeimei cu kumfa pe'a fa so'i da noi jorne jo nai no'e jorne lo drata ciste no'u mu'a la .slak. jo'u lo te irci jo'u la .gityr. .i",
|
||||
"Chat with Riot Bot": "tavla la nu zunti kei sampre",
|
||||
"Get started with some tips from Riot Bot!": ".i .e'u la nu zunti kei sampre cu sidju ko",
|
||||
"General discussion about Matrix and Riot": "lo nu casnu be la nacmeimei .e la nu zunti",
|
||||
"Discussion of all things Matrix!": "lo nu casnu be ro me la nacmeimei",
|
||||
"Riot/Web & Desktop chat": "lo nu casnu be la kibro nu zunti .e la skami nu zunti",
|
||||
"Running Matrix services": "lo nu ralte lo samtcise'u pe la nacmeimei",
|
||||
"Community-run support for Synapse": "lo nu lo cecmu cu sidju fi tu'a la .sinaps.",
|
||||
"Discussion of the Identity Service API": "lo nu casnu lo prenu datni favgau cimde",
|
||||
"Contributing code to Matrix and Riot": "lo nu dunda lo samselpla la nacmeimei .a la nu zunti",
|
||||
"Co-ordination for Riot translators": "lo nu lo fanva pe la nu zunti cu kansa gunka",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "lo nu casnu la plisyfonkemsamcmu nu zunti .e la'o gy. matrix-ios-sdk .gy.",
|
||||
"Riot/Android & matrix-android-sdk chat": "lo nu casnu la guglyfonkemsamcmu nu zunti .e la'o gy. matrix-android-sdk .gy.",
|
||||
"Matrix technical discussions": "lo nu casnu lo zbaske be la nacmeimei",
|
||||
"Announcements about Synapse releases": "lo notci be lo farvi tcini pe la nirna",
|
||||
"Support for those using and running matrix-appservice-irc": "lo nu sidju lo pilno ja admine be la'o gy. matrix-appservice-irc .gy.",
|
||||
"Building services on Matrix": "lo nu finti lo te selfu ji'u la nacmeimei",
|
||||
"Support for those using the Matrix spec": "lo nu sidju lo pilno be lo sarcu pe la nacmeimei",
|
||||
"Design and implementation of E2E in Matrix": "lo nu finti lo mulno mifra te platu .a lo samtcise'u be my. ji'u la nacmeimei",
|
||||
"Support for those using, running and writing other bridges": "lo nu sidju lo pilno ja admine ja finti be lo drata te jorne",
|
||||
"Dev chat for the Riot/Web dev team": "lo nu lo favgau be la kibro nu zunti cu casnu",
|
||||
"Dev chat for the Dendrite dev team": "lo nu lo favgau be la nirndendriti cu casnu",
|
||||
"Implementing VoIP services with Matrix": "lo nu finti lo samtcise'u be fi la .voip. ji'u la nacmeimei",
|
||||
"Implementing VR services with Matrix": "lo nu finti lo samtcise'u be fi lo na'e fatci munje ji'u la nacmeimei",
|
||||
"Admin support for Dendrite": "lo nu sidju lo admine be la nirndendriti"
|
||||
}
|
||||
39
src/i18n/strings/ka.json
Normal file
39
src/i18n/strings/ka.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot ვებსაიტს არ აქვს მხარდაჭერა მობილური მოწყობილობებისთვის. გსურთ აპლიკაციის დაყენება?",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop-ი %(platformName)s-ზე",
|
||||
"Unknown device": "უცნობი მოწყობილობა",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s-ი %(browserName)s-ით %(osName)s-იდან",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "ეკრანის გაზიარების ფუნქციის მქონე ზარისთვის საჭიროა, იყენებდეთ HTTPS-ს.",
|
||||
"Custom Server Options": "პერსონალიზებული სერვერის პარამეტრები",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "სხვა Matrix სერვერებზე შესასვლელად შეგიძლიათ გამოიყენოთ პერსონალიზებული სერვერის პარამეტრები განსხვავებული მთავარი სერვერის URL-ის მითითებით <br/>ეს გაძლევთ საშუალებას, გამოიყენოთ Riot-ი არსებულ Matrix ანგარიშით სხვა მთავარ სერვერზე.<br/><br/>თქვენ ასევე შეგიძლიათ დააყენოთ პერსონალიზებული იდენტუროის სერვერი, მაგრამ თქვენ ვერ მოიწვევთ მომხმარებლებს ელფოსტის მისამართით და თავად თქვენ ვერ მოგიწვევენ ელფოსტის მისამართით.",
|
||||
"Dismiss": "უარის თქმა",
|
||||
"powered by Matrix": "Matrix-ზე დაფუძნებული",
|
||||
"Welcome to Riot.im": "კეთილი იყოს თქვენი მობრძანება Riot.im-ზე",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "დეცენტრალიზებული, დაშიფრული ჩატი & კოლაბორაცია, დაფუძნებული [matrix]-ზე",
|
||||
"Search the room directory": "მოძებნა ოთახის სიაში",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "მრავალი ოთახი უკვე არსებობს Matrix-ში, რომლებიც არიან დაკავშირებული არსებულ ქსელებთან (Slack, IRC, Glitter და ა.შ) ან დამოუკიდებელი. შეამოწმეთ სია!",
|
||||
"Chat with Riot Bot": "ისაუბრეთ Riot-ის Bot-თან",
|
||||
"Get started with some tips from Riot Bot!": "დაიწყეთ რჩევებით Riot-ის Bot-ისგან!",
|
||||
"General discussion about Matrix and Riot": "ზოგადი დისკუსია Matrix-სა და Riot-ზე",
|
||||
"Discussion of all things Matrix!": "დისკუსია ყველაფერზე, რაც ეხება Matrix-ს!",
|
||||
"Riot/Web & Desktop chat": "Riot/ვებ-ისა & Desktop-ის ჩატი",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS-ისა & matrix-ios-sdk-ის ჩატი",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/ანდროიდისა & matrix-android-sdk-ის ჩატი",
|
||||
"Matrix technical discussions": "Matrix-ის ტექნიკური დისკუსიები",
|
||||
"Running Matrix services": "Matrix-ის სერვისების გამოყენება",
|
||||
"Community-run support for Synapse": "საზოგადოებისმიერი მხარდაჭერა Synapse-ისთვის",
|
||||
"Admin support for Dendrite": "ადმინისტრატორის მხარდაჭერა Dendrite-ისთვის",
|
||||
"Announcements about Synapse releases": "განცხადებები Synapse-ის გამოშვებებთან დაკავშირებით",
|
||||
"Support for those using and running matrix-appservice-irc": "მხარდაჭერა მათთვის, ვინც იყენებს matrix-appservice-irc-ს",
|
||||
"Building services on Matrix": "სერვისების Matrix-ზე დაფუძნებით გამომუშავება",
|
||||
"Support for those using the Matrix spec": "მხარდაჭერა Matrix სპეციფიკაციების გამოყენებასთან დაკავშირებულ კითხვებზე",
|
||||
"Design and implementation of E2E in Matrix": "პირით-პირამდე დაშიფვრის დაგეგმვა და შესრულება",
|
||||
"Implementing VR services with Matrix": "VR სერვისების Matrix-ით შესრულება",
|
||||
"Implementing VoIP services with Matrix": "VoIP სერვისების Matrix-ით შესრულება",
|
||||
"Discussion of the Identity Service API": "იდენტიფიკაციის სერვისის API-ს დისკუსია",
|
||||
"Support for those using, running and writing other bridges": "მხარდაჭერა მათთვის, ვინც იყენებს და წერს სხვა ხიდებს",
|
||||
"Contributing code to Matrix and Riot": "Matrix-ის და Riot-ის გამომუშავებაში მონაწილეობის მიღება",
|
||||
"Dev chat for the Riot/Web dev team": "დეველოპერების ჩატი Riot/ვებ დეველოპერების გუნდთან",
|
||||
"Dev chat for the Dendrite dev team": "დეველოპერების ჩატი Dendrite-ის დეველოპერების გუნდთან",
|
||||
"Co-ordination for Riot translators": "კოორდინაცია Riot-ის მთარგმნელებისთვის"
|
||||
}
|
||||
@@ -1,37 +1,39 @@
|
||||
{
|
||||
"Custom Server Options": "사용자 지정 서버 설정",
|
||||
"Dismiss": "없애기",
|
||||
"powered by Matrix": "매트릭스의 지원을 받고 있어요",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s에서 라이엇 컴퓨터판",
|
||||
"Riot is not supported on mobile web. Install the app?": "라이엇은 모바일 사이트를 지원하지 않아요. 앱을 설치하시겠어요?",
|
||||
"powered by Matrix": "Matrix의 지원을 받고 있습니다",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s PC용 Riot",
|
||||
"Riot is not supported on mobile web. Install the app?": "”Riot은 모바일 사이트를 지원하지 않습니다. 앱을 설치하시겠어요?",
|
||||
"Unknown device": "알 수 없는 장치",
|
||||
"Welcome to Riot.im": "라이엇에 오신 걸 환영해요",
|
||||
"Chat with Riot Bot": "Riot 봇과 이야기하기",
|
||||
"Welcome to Riot.im": "Riot에 오신 걸 환영해요",
|
||||
"Chat with Riot Bot": "Riot 봇과 대화하기",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)s의 %(browserName)s을 통한 %(appName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "화면 공유를 하려면 HTTPS를 써야만 해요.",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "화면 공유 전화를 걸려면 HTTPS를 사용해야 합니다.",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "분산되고, 암호화된 대화 & [matrix]의 지원으로 협력",
|
||||
"Search the room directory": "방 목록을 찾기",
|
||||
"Search the room directory": "방 목록 찾기",
|
||||
"Get started with some tips from Riot Bot!": "라이엇 봇에게 조언을 받고 시작하세요!",
|
||||
"General discussion about Matrix and Riot": "매트릭스와 라이엇에 대한 일반 논의",
|
||||
"Discussion of all things Matrix!": "매트릭스의 모든 것에 대한 토론!",
|
||||
"Riot/Web & Desktop chat": "라이엇/웹 & 컴퓨터 이야기",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "라이엇/IOS & matrix-ios-sdk 대화",
|
||||
"Riot/Android & matrix-android-sdk chat": "매트릭스/안드로이드 & matrix-ios-sdk 대화",
|
||||
"Matrix technical discussions": "매트릭스 기술 논의",
|
||||
"Running Matrix services": "매트릭스 서비스 실행",
|
||||
"General discussion about Matrix and Riot": "Matrix와 Riot에 대한 일반적인 토론",
|
||||
"Discussion of all things Matrix!": "모든 Matrix에 대한 토론!",
|
||||
"Riot/Web & Desktop chat": "Riot/웹 & PC 대화",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/IOS & matrix-ios-sdk 대화",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-ios-sdk 대화",
|
||||
"Matrix technical discussions": "Matrix에 대한 기술적인 토론",
|
||||
"Running Matrix services": "Matrix 서비스 실행 중",
|
||||
"Community-run support for Synapse": "시냅스 커뮤니티 운영 지원",
|
||||
"Admin support for Dendrite": "덴드라이트 관리 지원",
|
||||
"Announcements about Synapse releases": "시냅스 공개 발표",
|
||||
"Support for those using and running matrix-appservice-irc": "matrix-appservice-irc를 사용하고 운영하는 사람들을 지원",
|
||||
"Building services on Matrix": "매트릭스에서 서비스 구축",
|
||||
"Admin support for Dendrite": "Dendrite 관리 지원",
|
||||
"Announcements about Synapse releases": "Synapse 출시에 대한 발표",
|
||||
"Support for those using and running matrix-appservice-irc": "matrix-appservice-irc를 사용하고 운영하는 사람들을 위한 지원",
|
||||
"Building services on Matrix": "Matrix에서 서비스 구축",
|
||||
"Support for those using the Matrix spec": "Matrix spec을 사용하는 사람들을 지원",
|
||||
"Design and implementation of E2E in Matrix": "매트릭스에서 E2E 설계와 구현",
|
||||
"Implementing VR services with Matrix": "매트릭스로 VR 서비스 구현",
|
||||
"Implementing VoIP services with Matrix": "매트릭스로 인터넷전화 서비스 구현",
|
||||
"Implementing VoIP services with Matrix": "Matrix로 인터넷전화 서비스 구현",
|
||||
"Discussion of the Identity Service API": "ID 서비스 API에 대한 논의",
|
||||
"Support for those using, running and writing other bridges": "다른 브릿지를 사용하고, 운영하고, 기록하는 사람들을 지원",
|
||||
"Contributing code to Matrix and Riot": "매트릭스와 라이엇에 코드 기여하기",
|
||||
"Dev chat for the Riot/Web dev team": "라이엇/웹 개발 팀을 위한 개발자 대화",
|
||||
"Support for those using, running and writing other bridges": "다른 브릿지를 사용하고, 운영하고, 기록하는 사람들을 위한 지원",
|
||||
"Contributing code to Matrix and Riot": "Matrix와 Riot에 코드 기여하기",
|
||||
"Dev chat for the Riot/Web dev team": "Riot/웹 개발 팀을 위한 개발자 대화",
|
||||
"Dev chat for the Dendrite dev team": "덴드라이트 개발 팀을 위한 개발자 대화",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "기존 네트워크(Slack, IRC, Gitter 등)에 연결되있거나 독립된 많은 방들이 이미 매트릭스에 있어요. 목록을 확인해보세요!"
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "기존 네트워크(Slack, IRC, Gitter 등)에 연결되있거나 독립된 많은 방이 이미 Matrix에 있습니다. 목록을 확인해보세요!",
|
||||
"Co-ordination for Riot translators": "Riot 번역자 조합",
|
||||
"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/>사용자정의 아이덴티티 서버도 설정할 수 있지만 이메일 주소로 이용자를 초대하거나 자신이 이메일 주소로 초대받을 수 없습니다."
|
||||
}
|
||||
|
||||
@@ -1,38 +1,39 @@
|
||||
{
|
||||
"Unknown device": "Nežinomas įrenginys",
|
||||
"powered by Matrix": "palaikomas Matrix",
|
||||
"powered by Matrix": "veikia su Matrix",
|
||||
"Welcome to Riot.im": "Sveiki atvykę į Riot.im",
|
||||
"Chat with Riot Bot": "Kalbėtis su Riot robotu",
|
||||
"General discussion about Matrix and Riot": "Bendros diskusijos apie Matrix ir Riot",
|
||||
"Matrix technical discussions": "Matrix techninės diskusijos",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot nėra palaikoma naršant svetainėje mobiliaisiais įrenginiais. Įdiegti programėlę?",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop, %(platformName)s",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop, naudojant %(platformName)s",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s per %(browserName)s, naudojant %(osName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Norint skambinti su ekrano bendrinimo funkcija būtina naudoti HTTPS.",
|
||||
"Custom Server Options": "Pasirinktiniai serverio nustatymai",
|
||||
"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.": "Norėdami jungtis prie kito nei Matrix serverio galite pasirinktinio serverio nustatymuose nurodyti kito serverio URL adresą.<br/>Ši funkcija leis naudoti Riot su esama Matrix serverio paskyrą kituose serveriuose.<br/><br/>Taip pat galite nurodyti pasirinktinį identifikavimo serverį, bet tuomet negalėsite kviesti kitų vartotojų el. paštu ar jie jūsų.",
|
||||
"Dismiss": "Nutraukti",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizuotas, šifruotas čatas; bendradarbiavimas palaikomas [matrix]",
|
||||
"Custom Server Options": "Tinkinto serverio parametrai",
|
||||
"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.": "Norėdami prisijungti prie kito nei Matrix serverio, galite naudoti tinkinto serverio parametrus ir nurodyti kito serverio URL adresą.<br/>Tai leis jums naudoti Riot su esama Matrix paskyra kituose serveriuose.<br/><br/>Taip pat galite nustatyti tinkintą tapatybės serverį, tačiau tuomet negalėsite pakviesti kitus naudotojus pagal el. paštą, o taip pat ir jie negalės pakviesti jūsų.",
|
||||
"Dismiss": "Atmesti",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizuoti, šifruoti pokalbiai ir bendradarbiavimas, veikiantis su [matrix]",
|
||||
"Search the room directory": "Ieškoti kambarių kataloge",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Daugybė kambarių yra prisijungę prie Matrix, kurie yra susieti su egzistuojančiais tinklais (Slack, IRC, Gitter etc) arba nepriklausomi. Patikrinkite kambarių katalogą!",
|
||||
"Get started with some tips from Riot Bot!": "Pradėkite su patarimais nuo Riot roboto!",
|
||||
"Discussion of all things Matrix!": "Diskusijos apie viską Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Darbalaukio čatas",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
|
||||
"Running Matrix services": "Vykdant Matrix servisus",
|
||||
"Community-run support for Synapse": "Bendruomenės Synapse palaikymas",
|
||||
"Admin support for Dendrite": "Administratoriaus Dendrite palaikymas",
|
||||
"Announcements about Synapse releases": "Pranešimai apie Synapse naujinimus",
|
||||
"Support for those using and running matrix-appservice-irc": "Palaikymas skirtas matrix-appservice-irc naudotojams",
|
||||
"Building services on Matrix": "Servisų kūrimas ant Matrix",
|
||||
"Support for those using the Matrix spec": "Palaikymas skirtas Matrix spec",
|
||||
"Design and implementation of E2E in Matrix": "E2E dizainas ir įgyvendinimas Matrix'e",
|
||||
"Implementing VR services with Matrix": "VR serviso įgyvendinimas su Matrix",
|
||||
"Implementing VoIP services with Matrix": "VoIP serviso įgyvendinimas su Matrix",
|
||||
"Discussion of the Identity Service API": "Diskusijos apie identifikavimo serviso API",
|
||||
"Support for those using, running and writing other bridges": "Palaikymas skirtas tiems kas naudoja kitus tiltus",
|
||||
"Contributing code to Matrix and Riot": "Contributing code to Matrix and Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Kūrėjų čatas Riot/Web dev team",
|
||||
"Dev chat for the Dendrite dev team": "Kūrėjų čatas Dendrite dev team"
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Daugybė kambarių jau yra Matrix, susieti prie esamų tinklų (Slack, IRC, Gitter ir t.t.) arba nepriklausomi. Pasižvalgykite kataloge!",
|
||||
"Get started with some tips from Riot Bot!": "Pradėkite darbo pradžią nuo Riot roboto patarimų!",
|
||||
"Discussion of all things Matrix!": "Diskusijos apie viską, kas susiję su Matrix!",
|
||||
"Riot/Web & Desktop chat": "Pokalbiai apie Riot/Web ir Desktop",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Pokalbiai apie Riot/iOS ir matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Pokalbiai apie Riot/Android ir matrix-android-sdk",
|
||||
"Running Matrix services": "Matrix paslaugų paleidimas",
|
||||
"Community-run support for Synapse": "Su Synapse susijęs bendruomenės palaikymas",
|
||||
"Admin support for Dendrite": "Dendrite administratorių palaikymas",
|
||||
"Announcements about Synapse releases": "Skelbimai apie Synapse laidas",
|
||||
"Support for those using and running matrix-appservice-irc": "Palaikymas skirtas besinaudojantiems ir prižiūrintiems matrix-appservice-irc",
|
||||
"Building services on Matrix": "Paslaugų kūrimas, naudojant Matrix",
|
||||
"Support for those using the Matrix spec": "Palaikymas skirtas besinaudojantiems Matrix specifikacija",
|
||||
"Design and implementation of E2E in Matrix": "E2E dizainas ir įgyvendinimas ties Matrix",
|
||||
"Implementing VR services with Matrix": "VR paslaugų įgyvendinimas ties Matrix",
|
||||
"Implementing VoIP services with Matrix": "VoIP paslaugų įgyvendinimas ties Matrix",
|
||||
"Discussion of the Identity Service API": "Diskusijos apie tapatybės paslaugos API",
|
||||
"Support for those using, running and writing other bridges": "Palaikymas skirtas besinaudojantiems, prižiūrintiems ar kuriantiems kitus tinklų tiltus",
|
||||
"Contributing code to Matrix and Riot": "Matrix ir Riot kodo plėtojimas",
|
||||
"Dev chat for the Riot/Web dev team": "Kūrėjų pokalbiai, skirti Riot/Web kūrėjų komandai",
|
||||
"Dev chat for the Dendrite dev team": "Kūrėjų pokalbiai, skirti Dendrite kūrėjų komandai",
|
||||
"Co-ordination for Riot translators": "Koordinavimas Riot vertėjams"
|
||||
}
|
||||
|
||||
@@ -1,4 +1,16 @@
|
||||
{
|
||||
"Custom Server Options": "Tilpassede serveralternativer",
|
||||
"powered by Matrix": "benytter seg av Matrix"
|
||||
"powered by Matrix": "benytter seg av Matrix",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot er ikke støttet av mobil-nettlesere. Ønsker De å innstalere appen?",
|
||||
"Riot Desktop on %(platformName)s": "Riot på skrivebordet er på %(platformName)s",
|
||||
"Unknown device": "Ukjent enhet",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s på %(osName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "De er nødt til å benytte HTTPS for å kunne ha en samtale med skjermdeling.",
|
||||
"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.": "De kan benytte brukerdefinerte server-innstillinger for å kunne logge Dem inn på andre Matrix-servere ved å spesifisere en annen hjemmeserver-adresse. <br/> Dette tillater Dem til å bruke Riot med en eksisterende Matrix-konto på en annen hjemmeserver. <br/><br/> De kan i tillegg definere en egen hjemmeserver-identitet, men De kan da ikke invitere andre brukere via email, og De kan heller ikke bli invitert via email selv.",
|
||||
"Dismiss": "Avvis",
|
||||
"Welcome to Riot.im": "Velkommen skal De være til Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Desentralisert, kryptert nettprat & sammabeid drevet av [matrix]",
|
||||
"Search the room directory": "Søk i romutvalget",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Allerede finnes det alskens rom i Matrix, sammenkoblet til eksisterende nettverk (Slack, IRC, Gitter osv.) eller selvstendig. Dersom De formoder, kan De kikke på utvalget!",
|
||||
"Chat with Riot Bot": "Nettprat med Riot Bot"
|
||||
}
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
"Support for those using, running and writing other bridges": "Ondersteuning voor het gebruiken, draaien en ontwikkelen aan andere bruggen",
|
||||
"Dev chat for the Riot/Web dev team": "Dev-chat voor het Riot/Web ontwikkelteam",
|
||||
"Dev chat for the Dendrite dev team": "Dev-chat voor het Dendrite-ontwikkelteam",
|
||||
"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.": "Je kan de custom server opties gebruiken om op andere Matrix server in te loggen door een andere Home server URL op te geven.<br/> Dit laat je toe om Riot te gebruiken met een bestaande Matrix account op een andere home server.<br/><br/>Je kan ook een custom identiteits-server opzetten maar dan kan je geen gebruikers uitnodigen via hun email adres, of zelf uitgenodigd worden via je email adres."
|
||||
"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.": "Je kan de custom serveropties gebruiken om op andere Matrix-servers in te loggen door een andere thuisserver-URL op te geven.<br/> Dit laat je toe om Riot te gebruiken met een bestaand Matrix-account op een andere thuisserver.<br/><br/>Je kan ook een aangepaste-identiteitsserver opzetten maar dan kan je geen gebruikers uitnodigen via hun e-mailadres, of zelf uitgenodigd worden via je e-mailadres.",
|
||||
"Co-ordination for Riot translators": "Coördinatie voor Riot vertalers"
|
||||
}
|
||||
|
||||
39
src/i18n/strings/nn.json
Normal file
39
src/i18n/strings/nn.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot er ikkja støtta på mobilnettlesare. Last æppen inn?",
|
||||
"Riot Desktop on %(platformName)s": "Riot på Skrivebord for %(platformName)s",
|
||||
"Unknown device": "Ukjend eining",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s gjennom %(browserName)s på %(osName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Du må bruka HTTPS for å ha ei samtale med skjermdeling.",
|
||||
"Dismiss": "Avvis",
|
||||
"powered by Matrix": "Matrixdriven",
|
||||
"Welcome to Riot.im": "Velkomen til Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Desentralisert, kryptert nettprat & samarbeid driven av [matrix]",
|
||||
"Search the room directory": "Søk i romutvalet",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Det finst allereie massevis av rom på Matrix, anten lenkja til nettverk som allereie finst (Slack, IRC, Gitter osv.) eller uavhengige. Tak ein titt på utvalet!",
|
||||
"Chat with Riot Bot": "Nettprat med Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Kom i gang med nokre råd frå Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Allmenn meiningsutveksling om Matrix og Riot",
|
||||
"Discussion of all things Matrix!": "Meiningsutveksling om alt som gjeld Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Skrivebordsprat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk-prat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk-prat",
|
||||
"Matrix technical discussions": "Teknisk meiningsutveksling om Matrix",
|
||||
"Running Matrix services": "Å køyra Matrix-tenestar",
|
||||
"Community-run support for Synapse": "Samfunnsdriven støtte for Synapse",
|
||||
"Admin support for Dendrite": "Administratorstøtte for Dendrite",
|
||||
"Announcements about Synapse releases": "Kunngjeringar om Synapse-utgåver",
|
||||
"Support for those using and running matrix-appservice-irc": "Støtte for dei som brukar og køyrar matrix-appleservice-irc",
|
||||
"Building services on Matrix": "Byggingstenester på Matrix",
|
||||
"Support for those using the Matrix spec": "Støtte for dei som brukar Matrix-specen",
|
||||
"Design and implementation of E2E in Matrix": "E2E-oppbygging og -implementering på Matrix",
|
||||
"Implementing VR services with Matrix": "Implementering av VR-tenester med Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementering av VoIP-tenester med Matrix",
|
||||
"Discussion of the Identity Service API": "Meiningsutveksling om Identitetstenar-APIen",
|
||||
"Support for those using, running and writing other bridges": "Støtte for dei som brukar, køyrer og skriv andre bruer",
|
||||
"Contributing code to Matrix and Riot": "For å bidraga med kode til Matrix og Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Utviklar-prat for Riot/Web-utviklargruppa",
|
||||
"Dev chat for the Dendrite dev team": "Utviklar-prat for Dendrite-utviklargruppa",
|
||||
"Co-ordination for Riot translators": "Samordning for Riot-omsetjare",
|
||||
"Custom Server Options": "Eigentenar-innstillingar",
|
||||
"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.": "Du kan bruka eigentenarinnstillingar til å logga inn på andre Matrixtenarar ved å oppgje ein annan Heimtenar-URL. <br/>Dette gjer at du kan bruka Riot med ein Matrixbrukar som allereie finst på ein annan heimtenar.<br/><br/>Du kan òg setja ein eigen identitetstenar men du kjem i so fall ikkje til å kunna byda brukare inn med epost, eller å sjølv verta boden inn med epost."
|
||||
}
|
||||
@@ -8,12 +8,12 @@
|
||||
"Unknown device": "Nieznane urządzenie",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Musisz używać bezpiecznego protokołu HTTPS aby użyć połączenia współdzielenia ekranu.",
|
||||
"Welcome to Riot.im": "Witamy w Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Zdecentralizowany, szyfrowany czat & współpraca wspierana przez [matrix]",
|
||||
"Search the room directory": "Wyszukaj katalog pokojów",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Zdecentralizowany, szyfrowany czat & współpraca oparta na [matrix]",
|
||||
"Search the room directory": "Przeszukaj katalog pokojów",
|
||||
"Chat with Riot Bot": "Rozmowa z Botem Riota",
|
||||
"Get started with some tips from Riot Bot!": "Rozpocznij z wskazówkami Riot Bota!",
|
||||
"General discussion about Matrix and Riot": "Generalna rozmowa o Matrix i Riot",
|
||||
"Discussion of all things Matrix!": "Rozmowa o wszystkim Matrixowym!",
|
||||
"General discussion about Matrix and Riot": "Ogólna rozmowa o Matrix i Riot",
|
||||
"Discussion of all things Matrix!": "Rozmowa o wszystkich sprawach Matrixowych!",
|
||||
"Matrix technical discussions": "Dyskusje techniczne Matrixa",
|
||||
"Riot/Web & Desktop chat": "Czat o Riot/Web i Desktop",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Czat o Riot/iOS i matrix-ios-sdk",
|
||||
@@ -29,10 +29,11 @@
|
||||
"Implementing VR services with Matrix": "Implementowanie usług wirtualnej rzeczywistości w oparciu o Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementowanie usług telefonii internetowej VoIP w oparciu o Matrix",
|
||||
"Discussion of the Identity Service API": "Dyskusja na temat API Identity Service",
|
||||
"Support for those using, running and writing other bridges": "Wsparcie dla używających, zapewniających i piszących inne mosty",
|
||||
"Contributing code to Matrix and Riot": "Wspieranie rozwoju Matrix i Riot",
|
||||
"Support for those using, running and writing other bridges": "Wsparcie dla używających, utrzymujących i piszących inne mosty",
|
||||
"Contributing code to Matrix and Riot": "Współtworzenie kodu do Matrix lub Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Czat deweloperów zespołu Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Czat deweloperów zespołu Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix ma wiele, już działających pokoi, połączonych z istniejącymi sieciami, takimi jak Slack, IRC lub Gitter, a także wiele zupełnie niezależnych. Możesz przejrzeć je wszystkie w spisie pokoi!",
|
||||
"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.": "Możesz skorzystać z opcji dedykowanego serwera, aby zalogować się na inne serwery Matrix, podając inny adres URL serwera Domowego.<br/>Pozwala to na używanie Riot z istniejącym kontem Matrix na innym serwerze domowym.<br/><br/>Możesz również ustawić dedykowany serwer tożsamości, ale nie będziesz w stanie zapraszać użytkowników przez adres email, lub otrzymywać zaproszeń na adres email."
|
||||
"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.": "Możesz skorzystać z opcji niestandardowego serwera, aby zalogować się na inne serwery Matrix, podając inny adres URL serwera domowego.<br/>Pozwala to na używanie Riot z istniejącym kontem Matrix na innym serwerze domowym.<br/><br/>Możesz również ustawić niestandardowy serwer tożsamości, ale nie będziesz w stanie zapraszać użytkowników przez adres e-mail ani otrzymywać zaproszeń na adres e-mail.",
|
||||
"Co-ordination for Riot translators": "Koordynacja tłumaczy Riot"
|
||||
}
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
"Dev chat for the Dendrite dev team": "Chat de desenvolvimento para o time devel do Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Muitas salas já existem no Matrix, algumas independentes, e outras relacionadas a redes existentes (tais como Slack, IRC, Gitter, entre outras). Dê uma olhada na lista de salas públicas!",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, criptografado e colaborativo impulsionado por [matrix]",
|
||||
"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.": "Você pode usar as opções customizadas de servidor para conectar-se a outros servidores Matrix ao especificar uma outra URL de Servidor de Base (homeserver).<br/> Isso permite que você use o Riot com uma conta Matrix existente em outro servidor de base.<br/><br/>Você também pode definir um servidor de identidade customizado, mas neste caso você não poderá convidar outras pesoas por endereço de email, ou ser convidada/o pelo seu endereço de email."
|
||||
"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.": "Você pode usar as opções customizadas de servidor para conectar-se a outros servidores Matrix ao especificar uma outra URL de Servidor de Base (homeserver).<br/> Isso permite que você use o Riot com uma conta Matrix existente em outro servidor de base.<br/><br/>Você também pode definir um servidor de identidade customizado, mas neste caso você não poderá convidar outras pesoas por endereço de email, ou ser convidada/o pelo seu endereço de email.",
|
||||
"Co-ordination for Riot translators": "Coordenação para tradutores Riot"
|
||||
}
|
||||
|
||||
39
src/i18n/strings/ro.json
Normal file
39
src/i18n/strings/ro.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot nu functionează pe mobil. Instalezi aplicaţia?",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop pe %(platformName)s",
|
||||
"Unknown device": "Device necunoscut",
|
||||
"Custom Server Options": "Opțiuni Server Personalizate",
|
||||
"Dismiss": "Închide",
|
||||
"powered by Matrix": "propulsat de Matrix",
|
||||
"Welcome to Riot.im": "Bun venit pe Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat decentralizat, criptat & colaborare propulsata de [matrix]",
|
||||
"Search the room directory": "Caută în lista de camere",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Multe camere există deja in Matrix, conectate la rețele existente (Slack, IRC, Gitter etc) sau independente. Aruncă o privite in lista de camere!",
|
||||
"Chat with Riot Bot": "Discută cu Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Începe cu câteva ponturi din partea Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Discuție generală despre Matrix și Riot",
|
||||
"Discussion of all things Matrix!": "Discuții despre toate subiectele Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Chat pentru desktop",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & chat pentru matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & chat pentru matrix-android-sdk",
|
||||
"Matrix technical discussions": "Discuții tehnice Matrix",
|
||||
"Running Matrix services": "Rularea serviciilor Matrix",
|
||||
"Community-run support for Synapse": "Suport cu ajutorul comunității pentru Synapse",
|
||||
"Admin support for Dendrite": "Suport Administrare pentru Dendrite",
|
||||
"Announcements about Synapse releases": "Anunțuri despre lansări Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Suport pentru cei care utilizează și rulează matrix-appservice-irc",
|
||||
"Building services on Matrix": "Construirea serviciilor cu Matrix",
|
||||
"Support for those using the Matrix spec": "Suport pentru cei ce utilizează specificațiile Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Designul și planificarea E2E în Matrix",
|
||||
"Implementing VR services with Matrix": "Implementarea serviciilor VR cu Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementarea serviciilor VoIP cu Matrix",
|
||||
"Discussion of the Identity Service API": "Discuții despre API-ul Serviciul de Identitate",
|
||||
"Support for those using, running and writing other bridges": "Suport pentru cei ce folosesc, rulează și programeaza alți conectori",
|
||||
"Contributing code to Matrix and Riot": "Contribuirea codului pentru Matrix și Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Chat pentru echipa de dezvoltare Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Chat pentru echipa de dezvoltare Dendrite",
|
||||
"Co-ordination for Riot translators": "Coordonare pentru translatorii Riot",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s pe %(osName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Trebuie să folosești HTTPS pentru a plasa un apel de tip screen-sharing.",
|
||||
"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.": "Poți folosi opțiunile server personalizate pentru a te conecta la alte servere Matrix prin specificarea unui URL de tip Home server diferit.<br/>Acestă opțiune îți permite să utilizezi Riot cu un cont existent pe un home server diferit.<br/><br/>Poți folosi și un server de identitate personalizat, dar nu vei putea invita alți utilizatori prin adresa de email sau să fii tu însuți invitat prim email."
|
||||
}
|
||||
@@ -1,38 +1,39 @@
|
||||
{
|
||||
"Custom Server Options": "Настраиваемые параметры сервера",
|
||||
"Dismiss": "Отказ",
|
||||
"Custom Server Options": "Выбор другого сервера",
|
||||
"Dismiss": "Отклонить",
|
||||
"powered by Matrix": "Основано на Matrix",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s с %(browserName)s на %(osName)s",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop на %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot не поддерживает версию веб-сайта для мобильных устройств. Установить приложение?",
|
||||
"Riot is not supported on mobile web. Install the app?": "Веб-сайт Riot не адаптирован для мобильных устройств. Установить приложение?",
|
||||
"Unknown device": "Неизвестное устройство",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Требуется использование HTTPS для совместного использования рабочего стола.",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Для трансляции рабочего стола требуется использование HTTPS.",
|
||||
"Welcome to Riot.im": "Добро пожаловать на Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализованный, зашифрованный чат и совместная работа при поддержке [matrix]",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализованный, зашифрованный чат и совместное рабочее пространство на основе [matrix]",
|
||||
"Search the room directory": "Поиск в каталоге комнат",
|
||||
"Chat with Riot Bot": "Пообщаться с ботом Riot",
|
||||
"Get started with some tips from Riot Bot!": "Начните с некоторых советов от бота Riot!",
|
||||
"General discussion about Matrix and Riot": "Общая дискуссия о Matrix и Riot",
|
||||
"Discussion of all things Matrix!": "Дискуссия обо всем, что связано с Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop-чат",
|
||||
"Matrix technical discussions": "Технические дискуссии о Matrix",
|
||||
"Running Matrix services": "Запуск сервисов Matrix",
|
||||
"Get started with some tips from Riot Bot!": "Начните с советов от бота Riot!",
|
||||
"General discussion about Matrix and Riot": "Общие разговоры о Matrix и Riot",
|
||||
"Discussion of all things Matrix!": "Разговоры обо всем, что связано с Matrix!",
|
||||
"Riot/Web & Desktop chat": "Чат о Riot/Web и Desktop",
|
||||
"Matrix technical discussions": "Технические разговоры о Matrix",
|
||||
"Running Matrix services": "Запуск и обслуживание своих серверов Matrix",
|
||||
"Community-run support for Synapse": "Поддержка Synapse от сообщества",
|
||||
"Admin support for Dendrite": "Административная поддержка Dendrite",
|
||||
"Building services on Matrix": "Разработка сервисов на Matrix",
|
||||
"Implementing VoIP services with Matrix": "Внедрение VoIP-услуг с помощью Matrix",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk чат",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk чат",
|
||||
"Announcements about Synapse releases": "Объявления о выпусках Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Поддержка тех, кто использует и работает с matrix-appservice-irc",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "В Matrix существует множество комнат, как связанных с существующими сетями (Slack, IRC, Gitter и пр.), так и независимых. Ищите в каталоге!",
|
||||
"Support for those using the Matrix spec": "Поддержка пользователей, использующих Matrix spec",
|
||||
"Design and implementation of E2E in Matrix": "Разработка и внедрение сквозного шифрования (E2E) в Matrix",
|
||||
"Implementing VR services with Matrix": "Внедрение сервисов виртуальной реальности (VR) с помощью Matrix",
|
||||
"Discussion of the Identity Service API": "Обсуждение API службы идентификации",
|
||||
"Support for those using, running and writing other bridges": "Поддержка для тех, кто использует, разрабатывает и внедряет приложения интеграции для Matrix",
|
||||
"Contributing code to Matrix and Riot": "Внести свой вклад в разработку кода Matrix и Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Чат с командой разработчиков Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Чат с командой разработчиков Dendrite",
|
||||
"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/>Кроме того, можно установить пользовательский сервер идентификации, однако вы не сможете ни пригласить других пользователей, ни быть приглашенным, используя адрес электронной почты, ."
|
||||
"Admin support for Dendrite": "Поддержка администраторов Dendrite",
|
||||
"Building services on Matrix": "Разработка сервисов на основе Matrix",
|
||||
"Implementing VoIP services with Matrix": "Реализация VoIP-служб на основе Matrix",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Чат о Riot/iOS и matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Чат о Riot/Android и matrix-android-sdk",
|
||||
"Announcements about Synapse releases": "Объявления о релизах Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Поддержка пользователей и администраторов matrix-appservice-irc",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "В Matrix существует множество комнат, как связанных с другими сетями (Slack, IRC, Gitter и пр.), так и самостоятельных. Загляните в каталог!",
|
||||
"Support for those using the Matrix spec": "Поддержка по вопросам спецификации Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Разработка и внедрение сквозного шифрования в Matrix",
|
||||
"Implementing VR services with Matrix": "Реализация сервисов виртуальной реальности (VR) на основе Matrix",
|
||||
"Discussion of the Identity Service API": "Обсуждение API серверов идентификации",
|
||||
"Support for those using, running and writing other bridges": "Поддержка пользователей и разработчиков прочих мостов в Matrix",
|
||||
"Contributing code to Matrix and Riot": "Участие в разработке Matrix и Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Чат для команды разработчиков Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Чат для команды разработчиков Dendrite",
|
||||
"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/>Кроме того, можно выбрать другой сервер идентификации, однако в таком случае вы не сможете приглашать пользователей или быть приглашенным по адресу электронной почты.",
|
||||
"Co-ordination for Riot translators": "Координационный чат для переводчиков Riot"
|
||||
}
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
"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"
|
||||
"Dev chat for the Dendrite dev team": "Diskusia pre tím vývojárov Dendrite",
|
||||
"Co-ordination for Riot translators": "Koordinácia prekladov Riot"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot-i nuk mbulohet nën web për celularët. Të instalohet aplikacioni?",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot-i nuk mbulohet në web për celularë. Të instalohet aplikacioni?",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop në %(platformName)s",
|
||||
"Unknown device": "Pajisje e panjohur",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s përmes %(browserName)s nën %(osName)s",
|
||||
@@ -9,7 +9,7 @@
|
||||
"Dismiss": "Mos e merr parasysh",
|
||||
"powered by Matrix": "bazuar në Matrix",
|
||||
"Welcome to Riot.im": "Mirë se vini te Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted Fjalosje & bashkëpunim i decentralizuar, i fshehtëzuar, bazuar në [matrix]",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Fjalosje & bashkëpunim i decentralizuar, i fshehtëzuar, bazuar në [matrix]",
|
||||
"Search the room directory": "Kërkoni te drejtoria e dhomave",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Ka tashmë plot dhoma në Matrix, të lidhura me rrjete ekzistues (Slack, IRC, Gitter, etj) ose të pavarur. Hidhini një sy listës!",
|
||||
"Chat with Riot Bot": "Fjalosuni me Robotin Riot",
|
||||
@@ -27,12 +27,13 @@
|
||||
"Support for those using and running matrix-appservice-irc": "Asistencë për ata që përdorin dhe xhirojnë matrix-appservice-irc",
|
||||
"Building services on Matrix": "Ndërtim shërbimesh mbi Matrix",
|
||||
"Support for those using the Matrix spec": "Asistencë për ata që përdorin specifikimet Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Konceptimi dhe sendërtimi i E2E në Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Konceptimi dhe sendërtimi i E2E-s në Matrix",
|
||||
"Implementing VR services with Matrix": "Sendërtim shërbimesh VR me Matrix-in",
|
||||
"Implementing VoIP services with Matrix": "Sendërtim shërbimesh VoIP me Matrix-in",
|
||||
"Discussion of the Identity Service API": "Diskutime mbi Identity Service API",
|
||||
"Discussion of the Identity Service API": "Diskutime mbi API-n Identity Service",
|
||||
"Support for those using, running and writing other bridges": "Asistencë për ata që përdorin, xhirojnë ose programojnë ura të tjera",
|
||||
"Contributing code to Matrix and Riot": "Kontribut me kod te Matrix dhe te Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Fjalosje mbi zhvillimin, për ekipin e zhvilluesve të Riot/Web-i",
|
||||
"Dev chat for the Dendrite dev team": "Fjalosje zhvillimi, për ekipin e zhvilluesve të Dendrite-it"
|
||||
"Dev chat for the Dendrite dev team": "Fjalosje mbi zhvillimi, për ekipin e zhvilluesve të Dendrite-it",
|
||||
"Co-ordination for Riot translators": "Bashkërendim për përkthyes të Riot-it"
|
||||
}
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
"Support for those using, running and writing other bridges": "Подршка за оне који користе, одржавају и пишу друге мостове",
|
||||
"Contributing code to Matrix and Riot": "Додавање кода у Матрикс и Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Програмерско ћаскање за Riot/веб програмерски тим",
|
||||
"Dev chat for the Dendrite dev team": "Програмерско ћаскање за Dendrite програмерски тим"
|
||||
"Dev chat for the Dendrite dev team": "Програмерско ћаскање за Dendrite програмерски тим",
|
||||
"Co-ordination for Riot translators": "Координација за Riot преводиоце"
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"Custom Server Options": "Egna serverinställningar",
|
||||
"Custom Server Options": "Anpassade serverinställningar",
|
||||
"Dismiss": "Avvisa",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s på %(osName)s",
|
||||
"powered by Matrix": "drivs av Matrix",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop på %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot stöds inte på mobil-webb. Installera appen?",
|
||||
"Unknown device": "Okänd enhet",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Du måste använda HTTPS för att dela din skärm.",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Du måste använda HTTPS för att ringa med skärmdelning.",
|
||||
"Welcome to Riot.im": "Välkommen till Riot.im",
|
||||
"Chat with Riot Bot": "Chatta med Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Kom igång med några tips från Riot Bot!",
|
||||
@@ -27,12 +27,13 @@
|
||||
"Dev chat for the Riot/Web dev team": "Chatt för utvecklare av Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Chatt för utvecklare av Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Många rum finns redan i Matrix, länkade till andra nätverk (Slack, IRC, Gitter etc.) eller fristående. Kolla in katalogen!",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentraliserad, krypterad chatt & samarbete möjliggjort med [matrix]",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentraliserad, krypterad chatt & samarbetsplattform möjliggjort med [matrix]",
|
||||
"Search the room directory": "Sök i rumskatalogen",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop-chatt",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk-chatt",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk-chatt",
|
||||
"Admin support for Dendrite": "Hjälp för administratörer av Dendrite",
|
||||
"Building services on Matrix": "Bygga tjänster med Matrix",
|
||||
"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.": "Du kan använda anpassade serverinställningar för att logga in på andra Matrix-servrar genom att ange en annan hemserver-URL.<BR/>Du kan då använda Riot med ett befintligt Matrix-konto på en annan hemserver.<br/><br/>Du kan också ange en anpassad identitetsserver men kommer då inte kunna bjuda in användare med epostadress, eller själv bli inbjuden med epostadress."
|
||||
"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.": "Du kan använda anpassade serverinställningar för att logga in på andra Matrix-servrar genom att ange en annan hemserver-URL.<BR/>Du kan då använda Riot med ett befintligt Matrix-konto på en annan hemserver.<br/><br/>Du kan också ange en anpassad identitetsserver men kommer då inte kunna bjuda in användare med epostadress, eller själv bli inbjuden med epostadress.",
|
||||
"Co-ordination for Riot translators": "Koordination för Riot-översättare"
|
||||
}
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
{
|
||||
"%(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 కి",
|
||||
"Custom Server Options": "మలచిన సేవిక ఎంపికలు",
|
||||
"Dismiss": "రద్దుచేసే",
|
||||
"Riot Desktop on %(platformName)s": "రియట్ రంగస్థలం లో %(platformName)s",
|
||||
"Welcome to Riot.im": "రిమోట్.ఇం కి స్వగతం",
|
||||
"Search the room directory": "గది వివరాన్ని శోధించండి",
|
||||
"Chat with Riot Bot": "రియోట్ బొట్తో మాటామంతి చేయండి"
|
||||
"Chat with Riot Bot": "రియోట్ బొట్తో మాటామంతి చేయండి",
|
||||
"Unknown device": "తెలుయని పరికరం",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "తెర ని పంచే కాల్ కి HTTPS అవసరం.",
|
||||
"Riot is not supported on mobile web. Install the app?": "మొబైల్ బ్రౌజర్ లో రియట్ పనిచేయదు. ఆప్ ఇన్స్టాల్ చేయాలా?"
|
||||
}
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)s işletim sisteminde %(browserName)s ile %(appName)s",
|
||||
"Custom Server Options": "Özel Sunucu Seçenekleri",
|
||||
"Dismiss": "Uzaklaştır",
|
||||
"Custom Server Options": "Özelleştirilebilir Sunucu Seçenekleri",
|
||||
"Dismiss": "Kapat",
|
||||
"powered by Matrix": "Matrix tarafından desteklenmektedir",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s platformunda Riot Masaüstü",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot mobil web'de desteklenmiyor . Uygulamayı yükle ?",
|
||||
"Unknown device": "Bilinmeyen aygıt",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Ekran paylaşımlı arama yapmak için HTTPS kullanıyor olmalısınız.",
|
||||
"Welcome to Riot.im": "Riot.im'e Hoş Geldiniz",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dağıtık , şifreli sohbet & işbirliği ile Matrix tarafından desteklenmektedir",
|
||||
"Welcome to Riot.im": "Riot.im'e hoş geldiniz",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Merkezsiz, şifreli sohbet & işbirliği ile Matrix tarafından desteklenmektedir",
|
||||
"Search the room directory": "Oda dizinini ara",
|
||||
"Chat with Riot Bot": "Riot Bot ile Sohbet Et",
|
||||
"Get started with some tips from Riot Bot!": "Bazı Riot Bot ipuçları ile başlayın !",
|
||||
"Chat with Riot Bot": "Riot Bot ile sohbet et",
|
||||
"Get started with some tips from Riot Bot!": "Riot Bot'tan bazı ipuçları ile başlayın!",
|
||||
"General discussion about Matrix and Riot": "Matrix ve Riot hakkında genel tartışma",
|
||||
"Discussion of all things Matrix!": "Matrix'in tüm tartışması!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Masaüstü sohbet",
|
||||
@@ -19,19 +19,21 @@
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk sohbet",
|
||||
"Matrix technical discussions": "Matrix teknik tartışmalar",
|
||||
"Running Matrix services": "Çalışan Matrix hizmetleri",
|
||||
"Community-run support for Synapse": "Synapse için topluluk tarafından işlenen destek",
|
||||
"Admin support for Dendrite": "Dendrite için Admin desteği",
|
||||
"Community-run support for Synapse": "Synapse için topluluk tarafından işletilen destek",
|
||||
"Admin support for Dendrite": "Dendrite için yönetici desteği",
|
||||
"Announcements about Synapse releases": "Synapse sürümleri hakkında duyurular",
|
||||
"Support for those using and running matrix-appservice-irc": "matrix-appservice-irc kullanan ve çalıştıran kullanıcılar için destek",
|
||||
"Building services on Matrix": "Matrix üzerinde Yapı hizmetleri",
|
||||
"Building services on Matrix": "Matrix üzerinde yapı hizmetleri",
|
||||
"Support for those using the Matrix spec": "Matrix teknik özelliklerini kullananlar için destek",
|
||||
"Design and implementation of E2E in Matrix": "Matrix'te E2E ' nin Tasarım ve İmplementasyonu",
|
||||
"Implementing VR services with Matrix": "Matrix'te VR hizmetlerini implement etmek",
|
||||
"Implementing VoIP services with Matrix": "Matrix'te VoIP hizmetlerini implement etmek",
|
||||
"Discussion of the Identity Service API": "Kimlik Hizmet API ( Identity Service API ) Tartışması",
|
||||
"Design and implementation of E2E in Matrix": "Matrix'te E2E ' nin Tasarımı ve uyglamanması",
|
||||
"Implementing VR services with Matrix": "Matrix'te VR hizmetlerini uygulamak",
|
||||
"Implementing VoIP services with Matrix": "Matrix'te VoIP hizmetlerini uygulamak",
|
||||
"Discussion of the Identity Service API": "Kimlik Hizmet API ( Identity Service API ) tartışması",
|
||||
"Support for those using, running and writing other bridges": "Diğer köprüleri kullanan , çalıştıran ve yazanlar için destek",
|
||||
"Contributing code to Matrix and Riot": "Matrix ve Riot'a kod katkısı (contribution) sağla",
|
||||
"Dev chat for the Riot/Web dev team": "Riot/Web Geliştirici takımı için Geliştirici sohbeti",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite Geliştirici Takımı için Geliştirici sohbeti",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix'te varolan ağlara (Slack , IRC , Gitter vb.) bağlı ya da bağımsız bir çok oda var . Dizini kontrol edin!"
|
||||
"Contributing code to Matrix and Riot": "Matrix ve Riot'a kod katkısı sağlama",
|
||||
"Dev chat for the Riot/Web dev team": "Riot/Web Geliştirici takımı için geliştirici sohbeti",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite geliştirici takımı için geliştirici sohbeti",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix'te var olan ağalara bağlı (Slack , IRC , Gitter vb.) birçok oda var. Dizini kontrol edin!",
|
||||
"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.": "Farklı bir ev sunucusu URL'sini belirterek diğer Matrix sunucularına oturum açmak için özel sunucu seçeneklerini kullanabilirsiniz.<br />Bu, Riot'u başka bir ev sunucusu üzerinde var olan Matrix hesabını kullanmanıza olanak sağlar. <br/><br/> Ayrıca özelleştirilebilir bir kimlik de ayarlayabilirsiniz, ama kullanıcılırı ve kendinizi e-posta adreslerinden davet edemeyeceksiniz.",
|
||||
"Co-ordination for Riot translators": "Riot çeviricileri için iş güdüm (koordinasyon)"
|
||||
}
|
||||
|
||||
@@ -34,5 +34,6 @@
|
||||
"Dev chat for the Dendrite dev team": "Чат команди розробників Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "У мережі Matrix вже існує багато кімнат, що з'єднані як з існуючими мережами (Slack, IRC, Gitter тощо), так і незалежними. Подивіться у каталозі кімнат!",
|
||||
"Running Matrix services": "Запуск служби Matrix",
|
||||
"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/>Окрім цього, можливо встановити ідентифікаційний сервер користувача, але ви не зможете запросити других користувачів та бути запрошенному використовуючи адресу електронної пошти."
|
||||
"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/>Окрім цього, можливо встановити ідентифікаційний сервер користувача, але ви не зможете запросити других користувачів та бути запрошенному використовуючи адресу електронної пошти.",
|
||||
"Co-ordination for Riot translators": "Координаційний чат для перекладачів Riot"
|
||||
}
|
||||
|
||||
@@ -28,11 +28,12 @@
|
||||
"Design and implementation of E2E in Matrix": "在 Matrix 中 E2E 的设计与实现",
|
||||
"Implementing VR services with Matrix": "使用 Matrix 实现虚拟现实服务",
|
||||
"Implementing VoIP services with Matrix": "使用 Matrix 实现 VoIP 服务",
|
||||
"Discussion of the Identity Service API": "关于身份识别服务 API 的讨论",
|
||||
"Discussion of the Identity Service API": "关于身份认证服务 API 的讨论",
|
||||
"Support for those using, running and writing other bridges": "使用、运行、撰写其他桥接服务的支持",
|
||||
"Contributing code to Matrix and Riot": "为 Matrix 和 Riot 贡献代码",
|
||||
"Dev chat for the Riot/Web dev team": "Riot/Web 开发团队的开发讨论",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite 的开发团队的开发讨论",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix 中已有许多聊天室,连接到已有的网络(Slack、IRC 与 Gitter 等)或独立的网络,请查看目录!",
|
||||
"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 服务器上的账号。<br/><br/>你也可以修改身份认证服务器,但你可能因此无法使用电子邮件地址来邀请其他用户,或者被其他用户通过电子邮件邀请。"
|
||||
"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 服务器上的账号。<br/><br/>你也可以修改身份认证服务器,但你可能因此无法使用电子邮件地址来邀请其他用户,或者被其他用户通过电子邮件邀请。",
|
||||
"Co-ordination for Riot translators": "Riot 翻译人员的合作讨论"
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s 透過 %(browserName)s 在 %(osName)s",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "在 %(osName)s 的 %(browserName)s 上的 %(appName)s",
|
||||
"Custom Server Options": "自訂伺服器選項",
|
||||
"Dismiss": "無視",
|
||||
"powered by Matrix": "由 Matrix 架設",
|
||||
"Dismiss": "關閉",
|
||||
"powered by Matrix": "由 Matrix 提供",
|
||||
"Unknown device": "未知裝置",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "你需要使用 HTTPS 來放置螢幕分享的通話。",
|
||||
"Riot Desktop on %(platformName)s": "Riot 桌面版在 %(platformName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "你需要使用 HTTPS 來撥打螢幕分享的通話。",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s 的 Riot 桌面版",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot 不支援行動版網頁,要安裝應用程式嗎?",
|
||||
"Welcome to Riot.im": "歡迎來到 Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化、保密的聊天與協作,由 [matrix] 出品",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化、保密的聊天與協作,由 [matrix] 提供",
|
||||
"Search the room directory": "搜尋聊天室目錄",
|
||||
"Chat with Riot Bot": "與 Riot 機器人聊天",
|
||||
"Get started with some tips from Riot Bot!": "從 Riot 機器人了解使用 Riot 的訣竅吧!",
|
||||
@@ -34,5 +34,6 @@
|
||||
"Dev chat for the Riot/Web dev team": "Riot/Web 開發團隊的開發聊天室",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite 開發團隊的開發聊天室",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix 中已有許多聊天室,連結到已有的網路(Slack、IRC 與 Gitter 等等)或是獨立的網路。來看看聊天室目錄吧!",
|
||||
"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/>您也可以設定一個自訂的識別伺服器,但您可能無法透過電子郵件地址來邀請使用者,或是讓別人透過電子郵件邀請您。"
|
||||
"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/>您也可以設定一個自訂的識別伺服器,但您可能無法透過電子郵件地址來邀請使用者,或是讓別人透過電子郵件邀請您。",
|
||||
"Co-ordination for Riot translators": "Riot 翻譯的協作"
|
||||
}
|
||||
|
||||
65
src/vector/getconfig.js
Normal file
65
src/vector/getconfig.js
Normal file
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
Copyright 2018 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.
|
||||
*/
|
||||
|
||||
import Promise from 'bluebird';
|
||||
import request from 'browser-request';
|
||||
|
||||
export async function getVectorConfig(relativeLocation) {
|
||||
if (relativeLocation === undefined) relativeLocation = '';
|
||||
if (relativeLocation !== '' && !relativeLocation.endsWith('/')) relativeLocation += '/';
|
||||
try {
|
||||
const configJson = await getConfig(`${relativeLocation}config.${document.domain}.json`);
|
||||
// 404s succeed with an empty json config, so check that there are keys
|
||||
if (Object.keys(configJson).length === 0) {
|
||||
throw new Error(); // throw to enter the catch
|
||||
}
|
||||
return configJson;
|
||||
} catch (e) {
|
||||
return await getConfig(relativeLocation + "config.json");
|
||||
}
|
||||
}
|
||||
|
||||
function getConfig(configJsonFilename) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
request(
|
||||
{ method: "GET", url: configJsonFilename },
|
||||
(err, response, body) => {
|
||||
if (err || response.status < 200 || response.status >= 300) {
|
||||
// Lack of a config isn't an error, we should
|
||||
// just use the defaults.
|
||||
// Also treat a blank config as no config, assuming
|
||||
// the status code is 0, because we don't get 404s
|
||||
// from file: URIs so this is the only way we can
|
||||
// not fail if the file doesn't exist when loading
|
||||
// from a file:// URI.
|
||||
if (response) {
|
||||
if (response.status == 404 || (response.status == 0 && body == '')) {
|
||||
resolve({});
|
||||
}
|
||||
}
|
||||
reject({err: err, response: response});
|
||||
return;
|
||||
}
|
||||
|
||||
// We parse the JSON ourselves rather than use the JSON
|
||||
// parameter, since this throws a parse error on empty
|
||||
// which breaks if there's no config.json and we're
|
||||
// loading from the filesystem (see above).
|
||||
resolve(JSON.parse(body));
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -36,20 +36,10 @@
|
||||
<body style="height: 100%;">
|
||||
<section id="matrixchat" style="height: 100%;"></section>
|
||||
<noscript>Sorry, Riot requires JavaScript to be enabled.</noscript> <!-- TODO: Translate this? -->
|
||||
<% for (var i=0; i < htmlWebpackPlugin.files.js.length; i++) {
|
||||
// Not a particularly graceful way of not putting the indexeddb worker script
|
||||
// into the main page
|
||||
if (_.endsWith(htmlWebpackPlugin.files.js[i], 'indexeddb-worker.js')) {
|
||||
%>
|
||||
<script>
|
||||
window.vector_indexeddb_worker_script = '<%= htmlWebpackPlugin.files.js[i] %>';
|
||||
</script>
|
||||
<%
|
||||
continue;
|
||||
}
|
||||
%>
|
||||
<script src="<%= htmlWebpackPlugin.files.js[i] %>"></script>
|
||||
<% } %>
|
||||
<script>
|
||||
window.vector_indexeddb_worker_script = '<%= htmlWebpackPlugin.files.chunks['indexeddb-worker'].entry %>';
|
||||
</script>
|
||||
<script src="<%= htmlWebpackPlugin.files.chunks['bundle'].entry %>"></script>
|
||||
<img src="img/warning.svg" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
|
||||
<audio id="messageAudio">
|
||||
<source src="media/message.ogg" type="audio/ogg" />
|
||||
@@ -73,6 +63,6 @@
|
||||
</audio>
|
||||
<audio id="remoteAudio"></audio>
|
||||
<!-- let CSS themes pass constants to the app -->
|
||||
<div id="mx_theme_accentColor"></div><div id="mx_theme_secondaryAccentColor"/></div><div id="mx_theme_tertiaryAccentColor"/></div>
|
||||
<div id="mx_theme_accentColor"></div><div id="mx_theme_secondaryAccentColor"></div><div id="mx_theme_tertiaryAccentColor"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2018 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.
|
||||
@@ -15,90 +16,69 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
// for ES6 stuff like startsWith() that Safari doesn't handle
|
||||
// and babel doesn't do by default
|
||||
// Note we use this, as well as the babel transform-runtime plugin
|
||||
// since transform-runtime does not cover instance methods
|
||||
// such as "foobar".includes("foo") which bits of our library
|
||||
// code use, but the babel transform-runtime plugin allows the
|
||||
// regenerator runtime to be injected early enough in the process
|
||||
// (it can't be here as it's too late: the alternative is to put
|
||||
// the babel-polyfill as the first 'entry' in the webpack config).
|
||||
// https://babeljs.io/docs/plugins/transform-runtime/
|
||||
require('babel-polyfill');
|
||||
|
||||
// Require common CSS here; this will make webpack process it into bundle.css.
|
||||
// Our own CSS (which is themed) is imported via separate webpack entry points
|
||||
// in webpack.config.js
|
||||
require('matrix-react-sdk/node_modules/gemini-scrollbar/gemini-scrollbar.css');
|
||||
require('matrix-react-sdk/node_modules/gfm.css/gfm.css');
|
||||
require('matrix-react-sdk/node_modules/highlight.js/styles/github.css');
|
||||
require('matrix-react-sdk/node_modules/draft-js/dist/Draft.css');
|
||||
require('gemini-scrollbar/gemini-scrollbar.css');
|
||||
require('gfm.css/gfm.css');
|
||||
require('highlight.js/styles/github.css');
|
||||
require('draft-js/dist/Draft.css');
|
||||
|
||||
const rageshake = require("matrix-react-sdk/lib/rageshake/rageshake");
|
||||
rageshake.init().then(() => {
|
||||
console.log("Initialised rageshake: See https://bugs.chromium.org/p/chromium/issues/detail?id=583193 to fix line numbers on Chrome.");
|
||||
rageshake.cleanup();
|
||||
}, (err) => {
|
||||
console.error("Failed to initialise rageshake: " + err);
|
||||
});
|
||||
import './rageshakesetup';
|
||||
|
||||
window.addEventListener('beforeunload', (e) => {
|
||||
console.log('riot-web closing');
|
||||
// try to flush the logs to indexeddb
|
||||
rageshake.flush();
|
||||
});
|
||||
|
||||
|
||||
// add React and ReactPerf to the global namespace, to make them easier to
|
||||
// access via the console
|
||||
global.React = require("react");
|
||||
import React from 'react';
|
||||
// add React and ReactPerf to the global namespace, to make them easier to
|
||||
// access via the console
|
||||
global.React = React;
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
global.Perf = require("react-addons-perf");
|
||||
global.Perf = require('react-addons-perf');
|
||||
}
|
||||
|
||||
var RunModernizrTests = require("./modernizr"); // this side-effects a global
|
||||
var ReactDOM = require("react-dom");
|
||||
var sdk = require("matrix-react-sdk");
|
||||
const PlatformPeg = require("matrix-react-sdk/lib/PlatformPeg");
|
||||
import './modernizr';
|
||||
import ReactDOM from 'react-dom';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg';
|
||||
sdk.loadSkin(require('../component-index'));
|
||||
var VectorConferenceHandler = require('matrix-react-sdk/lib/VectorConferenceHandler');
|
||||
import VectorConferenceHandler from 'matrix-react-sdk/lib/VectorConferenceHandler';
|
||||
import Promise from 'bluebird';
|
||||
var request = require('browser-request');
|
||||
import request from 'browser-request';
|
||||
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 {parseQs, parseQsFromFragment} from './url_utils';
|
||||
import Platform from './platform';
|
||||
|
||||
import ElectronPlatform from './platform/ElectronPlatform';
|
||||
import WebPlatform from './platform/WebPlatform';
|
||||
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import SettingsStore, {SettingLevel} from "matrix-react-sdk/lib/settings/SettingsStore";
|
||||
import SettingsStore from "matrix-react-sdk/lib/settings/SettingsStore";
|
||||
import Tinter from 'matrix-react-sdk/lib/Tinter';
|
||||
import SdkConfig from "matrix-react-sdk/lib/SdkConfig";
|
||||
|
||||
var lastLocationHashSet = null;
|
||||
import Olm from 'olm';
|
||||
|
||||
var CallHandler = require("matrix-react-sdk/lib/CallHandler");
|
||||
CallHandler.setConferenceHandler(VectorConferenceHandler);
|
||||
import CallHandler from 'matrix-react-sdk/lib/CallHandler';
|
||||
|
||||
MatrixClientPeg.setIndexedDbWorkerScript(window.vector_indexeddb_worker_script);
|
||||
import {getVectorConfig} from './getconfig';
|
||||
|
||||
let lastLocationHashSet = null;
|
||||
|
||||
// Disable warnings for now: we use deprecated bluebird functions
|
||||
// and need to migrate, but they spam the console with warnings.
|
||||
Promise.config({warnings: false});
|
||||
|
||||
function checkBrowserFeatures(featureList) {
|
||||
if (!window.Modernizr) {
|
||||
console.error("Cannot check features - Modernizr global is missing.");
|
||||
return false;
|
||||
}
|
||||
var featureComplete = true;
|
||||
for (var i = 0; i < featureList.length; i++) {
|
||||
let featureComplete = true;
|
||||
for (let i = 0; i < featureList.length; i++) {
|
||||
if (window.Modernizr[featureList[i]] === undefined) {
|
||||
console.error(
|
||||
"Looked for feature '%s' but Modernizr has no results for this. " +
|
||||
"Has it been configured correctly?", featureList[i]
|
||||
"Has it been configured correctly?", featureList[i],
|
||||
);
|
||||
return false;
|
||||
}
|
||||
@@ -112,11 +92,6 @@ function checkBrowserFeatures(featureList) {
|
||||
return featureComplete;
|
||||
}
|
||||
|
||||
var validBrowser = checkBrowserFeatures([
|
||||
"displaytable", "flexbox", "es5object", "es5function", "localstorage",
|
||||
"objectfit", "indexeddb", "webworkers",
|
||||
]);
|
||||
|
||||
// Parse the given window.location and return parameters that can be used when calling
|
||||
// MatrixChat.showScreen(screen, params)
|
||||
function getScreenFromLocation(location) {
|
||||
@@ -124,7 +99,7 @@ function getScreenFromLocation(location) {
|
||||
return {
|
||||
screen: fragparts.location.substring(1),
|
||||
params: fragparts.params,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Here, we do some crude URL analysis to allow
|
||||
@@ -147,12 +122,12 @@ function onHashChange(ev) {
|
||||
|
||||
// This will be called whenever the SDK changes screens,
|
||||
// so a web page can update the URL bar appropriately.
|
||||
var onNewScreen = function(screen) {
|
||||
function onNewScreen(screen) {
|
||||
console.log("newscreen "+screen);
|
||||
var hash = '#/' + screen;
|
||||
const hash = '#/' + screen;
|
||||
lastLocationHashSet = hash;
|
||||
window.location.hash = hash;
|
||||
};
|
||||
}
|
||||
|
||||
// We use this to work out what URL the SDK should
|
||||
// pass through when registering to allow the user to
|
||||
@@ -163,7 +138,7 @@ var onNewScreen = function(screen) {
|
||||
// If we're in electron, we should never pass through a file:// URL otherwise
|
||||
// the identity server will try to 302 the browser to it, which breaks horribly.
|
||||
// so in that instance, hardcode to use riot.im/app for now instead.
|
||||
var makeRegistrationUrl = function(params) {
|
||||
function makeRegistrationUrl(params) {
|
||||
let url;
|
||||
if (window.location.protocol === "file:") {
|
||||
url = 'https://riot.im/app/#/register';
|
||||
@@ -189,77 +164,94 @@ var makeRegistrationUrl = function(params) {
|
||||
return url;
|
||||
}
|
||||
|
||||
window.addEventListener('hashchange', onHashChange);
|
||||
|
||||
function getConfig(configJsonFilename) {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
request(
|
||||
{ method: "GET", url: configJsonFilename },
|
||||
(err, response, body) => {
|
||||
if (err || response.status < 200 || response.status >= 300) {
|
||||
// Lack of a config isn't an error, we should
|
||||
// just use the defaults.
|
||||
// Also treat a blank config as no config, assuming
|
||||
// the status code is 0, because we don't get 404s
|
||||
// from file: URIs so this is the only way we can
|
||||
// not fail if the file doesn't exist when loading
|
||||
// from a file:// URI.
|
||||
if (response) {
|
||||
if (response.status == 404 || (response.status == 0 && body == '')) {
|
||||
deferred.resolve({});
|
||||
export function getConfig(configJsonFilename) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
request(
|
||||
{ method: "GET", url: configJsonFilename },
|
||||
(err, response, body) => {
|
||||
if (err || response.status < 200 || response.status >= 300) {
|
||||
// Lack of a config isn't an error, we should
|
||||
// just use the defaults.
|
||||
// Also treat a blank config as no config, assuming
|
||||
// the status code is 0, because we don't get 404s
|
||||
// from file: URIs so this is the only way we can
|
||||
// not fail if the file doesn't exist when loading
|
||||
// from a file:// URI.
|
||||
if (response) {
|
||||
if (response.status == 404 || (response.status == 0 && body == '')) {
|
||||
resolve({});
|
||||
}
|
||||
}
|
||||
reject({err: err, response: response});
|
||||
return;
|
||||
}
|
||||
deferred.reject({err: err, response: response});
|
||||
return;
|
||||
}
|
||||
|
||||
// We parse the JSON ourselves rather than use the JSON
|
||||
// parameter, since this throws a parse error on empty
|
||||
// which breaks if there's no config.json and we're
|
||||
// loading from the filesystem (see above).
|
||||
deferred.resolve(JSON.parse(body));
|
||||
}
|
||||
);
|
||||
|
||||
return deferred.promise;
|
||||
// We parse the JSON ourselves rather than use the JSON
|
||||
// parameter, since this throws a parse error on empty
|
||||
// which breaks if there's no config.json and we're
|
||||
// loading from the filesystem (see above).
|
||||
resolve(JSON.parse(body));
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function onTokenLoginCompleted() {
|
||||
// if we did a token login, we're now left with the token, hs and is
|
||||
// url as query params in the url; a little nasty but let's redirect to
|
||||
// clear them.
|
||||
var parsedUrl = url.parse(window.location.href);
|
||||
const parsedUrl = url.parse(window.location.href);
|
||||
parsedUrl.search = "";
|
||||
var formatted = url.format(parsedUrl);
|
||||
const formatted = url.format(parsedUrl);
|
||||
console.log("Redirecting to " + formatted + " to drop loginToken " +
|
||||
"from queryparams");
|
||||
window.location.href = formatted;
|
||||
}
|
||||
|
||||
async function loadApp() {
|
||||
if (window.vector_indexeddb_worker_script === undefined) {
|
||||
// If this is missing, something has probably gone wrong with
|
||||
// the bundling. The js-sdk will just fall back to accessing
|
||||
// indexeddb directly with no worker script, but we want to
|
||||
// make sure the indexeddb script is present, so fail hard.
|
||||
throw new Error("Missing indexeddb worker script!");
|
||||
}
|
||||
MatrixClientPeg.setIndexedDbWorkerScript(window.vector_indexeddb_worker_script);
|
||||
CallHandler.setConferenceHandler(VectorConferenceHandler);
|
||||
|
||||
window.addEventListener('hashchange', onHashChange);
|
||||
|
||||
await loadOlm();
|
||||
|
||||
await loadLanguage();
|
||||
|
||||
const fragparts = parseQsFromFragment(window.location);
|
||||
const params = parseQs(window.location);
|
||||
|
||||
// set the platform for react sdk (our Platform object automatically picks the right one)
|
||||
PlatformPeg.set(new Platform());
|
||||
// set the platform for react sdk
|
||||
if (window.ipcRenderer) {
|
||||
console.log("Using Electron platform");
|
||||
const plaf = new ElectronPlatform();
|
||||
PlatformPeg.set(plaf);
|
||||
|
||||
// Electron only: see if we need to do a one-time data
|
||||
// migration
|
||||
if (window.localStorage.getItem('mx_user_id') === null) {
|
||||
console.log("Migrating session from old origin...");
|
||||
await plaf.migrateFromOldOrigin();
|
||||
console.log("Origin migration complete");
|
||||
}
|
||||
} else {
|
||||
console.log("Using Web platform");
|
||||
PlatformPeg.set(new WebPlatform());
|
||||
}
|
||||
|
||||
// Load the config file. First try to load up a domain-specific config of the
|
||||
// form "config.$domain.json" and if that fails, fall back to config.json.
|
||||
let configJson;
|
||||
let configError;
|
||||
try {
|
||||
try {
|
||||
configJson = await getConfig(`config.${document.domain}.json`);
|
||||
// 404s succeed with an empty json config, so check that there are keys
|
||||
if (Object.keys(configJson).length === 0) {
|
||||
throw new Error(); // throw to enter the catch
|
||||
}
|
||||
} catch (e) {
|
||||
configJson = await getConfig("config.json");
|
||||
}
|
||||
configJson = await getVectorConfig();
|
||||
} catch (e) {
|
||||
configError = e;
|
||||
}
|
||||
@@ -270,39 +262,22 @@ async function loadApp() {
|
||||
|
||||
// don't try to redirect to the native apps if we're
|
||||
// verifying a 3pid (but after we've loaded the config)
|
||||
const preventRedirect = Boolean(fragparts.params.client_secret);
|
||||
// or if the user is following a deep link
|
||||
// (https://github.com/vector-im/riot-web/issues/7378)
|
||||
const preventRedirect = fragparts.params.client_secret || fragparts.location.length > 0;
|
||||
|
||||
if (!preventRedirect) {
|
||||
if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
|
||||
// FIXME: ugly status hardcoding
|
||||
if (SettingsStore.getValue("theme") === 'status') {
|
||||
window.location = "https://status.im/join-riot.html";
|
||||
const isIos = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
||||
const isAndroid = /Android/.test(navigator.userAgent);
|
||||
if (isIos || isAndroid) {
|
||||
if (!document.cookie.split(';').some((c) => c.startsWith('mobile_redirect_to_guide'))) {
|
||||
window.location = "mobile_guide/";
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if (confirm(_t("Riot is not supported on mobile web. Install the app?"))) {
|
||||
window.location = "https://itunes.apple.com/us/app/vector.im/id1083446067";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (/Android/.test(navigator.userAgent)) {
|
||||
// FIXME: ugly status hardcoding
|
||||
if (SettingsStore.getValue("theme") === 'status') {
|
||||
window.location = "https://status.im/join-riot.html";
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if (confirm(_t("Riot is not supported on mobile web. Install the app?"))) {
|
||||
window.location = "https://play.google.com/store/apps/details?id=im.vector.alpha";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// as quickly as we possibly can, set a default theme...
|
||||
const styleElements = Object.create(null);
|
||||
let a;
|
||||
const theme = SettingsStore.getValue("theme");
|
||||
for (let i = 0; (a = document.getElementsByTagName("link")[i]); i++) {
|
||||
@@ -322,12 +297,23 @@ async function loadApp() {
|
||||
// in case the Tinter.tint() in MatrixChat fires before the
|
||||
// CSS has actually loaded (which in practice happens)...
|
||||
|
||||
// FIXME: we should probably block loading the app or even
|
||||
// showing a spinner until the theme is loaded, to avoid
|
||||
// flashes of unstyled content.
|
||||
a.onload = () => {
|
||||
// This if fixes Tinter.setTheme to not fire on Firefox
|
||||
// in case it is the first time loading Riot.
|
||||
// `InstallTrigger` is a Object which only exists on Firefox
|
||||
// (it is used for their Plugins) and can be used as a
|
||||
// feature check.
|
||||
// Firefox loads css always before js. This is why we dont use
|
||||
// onload or it's EventListener as thoose will never trigger.
|
||||
if (typeof InstallTrigger !== 'undefined') {
|
||||
Tinter.setTheme(theme);
|
||||
};
|
||||
} else {
|
||||
// FIXME: we should probably block loading the app or even
|
||||
// showing a spinner until the theme is loaded, to avoid
|
||||
// flashes of unstyled content.
|
||||
a.onload = () => {
|
||||
Tinter.setTheme(theme);
|
||||
};
|
||||
}
|
||||
} else {
|
||||
// Firefox requires this to not be done via `setAttribute`
|
||||
// or via HTML.
|
||||
@@ -337,17 +323,19 @@ async function loadApp() {
|
||||
}
|
||||
}
|
||||
|
||||
if (window.localStorage && window.localStorage.getItem('mx_accepts_unsupported_browser')) {
|
||||
console.log('User has previously accepted risks in using an unsupported browser');
|
||||
validBrowser = true;
|
||||
}
|
||||
const validBrowser = checkBrowserFeatures([
|
||||
"displaytable", "flexbox", "es5object", "es5function", "localstorage",
|
||||
"objectfit", "indexeddb", "webworkers",
|
||||
]);
|
||||
|
||||
const acceptInvalidBrowser = window.localStorage && window.localStorage.getItem('mx_accepts_unsupported_browser');
|
||||
|
||||
console.log("Vector starting at "+window.location);
|
||||
if (configError) {
|
||||
window.matrixChat = ReactDOM.render(<div className="error">
|
||||
Unable to load config file: please refresh the page to try again.
|
||||
</div>, document.getElementById('matrixchat'));
|
||||
} else if (validBrowser) {
|
||||
} else if (validBrowser || acceptInvalidBrowser) {
|
||||
const platform = PlatformPeg.get();
|
||||
platform.startUpdater();
|
||||
|
||||
@@ -365,24 +353,59 @@ async function loadApp() {
|
||||
initialScreenAfterLogin={getScreenFromLocation(window.location)}
|
||||
defaultDeviceDisplayName={platform.getDefaultDeviceDisplayName()}
|
||||
/>,
|
||||
document.getElementById('matrixchat')
|
||||
document.getElementById('matrixchat'),
|
||||
);
|
||||
} else {
|
||||
console.error("Browser is missing required features.");
|
||||
// take to a different landing page to AWOOOOOGA at the user
|
||||
var CompatibilityPage = sdk.getComponent("structures.CompatibilityPage");
|
||||
const CompatibilityPage = sdk.getComponent("structures.CompatibilityPage");
|
||||
window.matrixChat = ReactDOM.render(
|
||||
<CompatibilityPage onAccept={function() {
|
||||
if (window.localStorage) window.localStorage.setItem('mx_accepts_unsupported_browser', true);
|
||||
validBrowser = true;
|
||||
console.log("User accepts the compatibility risks.");
|
||||
loadApp();
|
||||
}} />,
|
||||
document.getElementById('matrixchat')
|
||||
document.getElementById('matrixchat'),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function loadOlm() {
|
||||
/* Load Olm. We try the WebAssembly version first, and then the legacy,
|
||||
* asm.js version if that fails. For this reason we need to wait for this
|
||||
* to finish before continuing to load the rest of the app. In future
|
||||
* we could somehow pass a promise down to react-sdk and have it wait on
|
||||
* that so olm can be loading in parallel with the rest of the app.
|
||||
*
|
||||
* We also need to tell the Olm js to look for its wasm file at the same
|
||||
* level as index.html. It really should be in the same place as the js,
|
||||
* ie. in the bundle directory, to avoid caching issues, but as far as I
|
||||
* can tell this is completely impossible with webpack.
|
||||
*/
|
||||
return Olm.init({
|
||||
locateFile: () => 'olm.wasm',
|
||||
}).then(() => {
|
||||
console.log("Using WebAssembly Olm");
|
||||
}).catch((e) => {
|
||||
console.log("Failed to load Olm: trying legacy version");
|
||||
return new Promise((resolve, reject) => {
|
||||
const s = document.createElement('script');
|
||||
s.src = 'olm_legacy.js';
|
||||
s.onload = resolve;
|
||||
s.onerror = reject;
|
||||
document.body.appendChild(s);
|
||||
}).then(() => {
|
||||
// Init window.Olm, ie. the one just loaded by the script tag,
|
||||
// not 'Olm' which is still the failed wasm version.
|
||||
return window.Olm.init();
|
||||
}).then(() => {
|
||||
console.log("Using legacy Olm");
|
||||
}).catch((e) => {
|
||||
console.log("Both WebAssembly and asm.js Olm failed!", e);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function loadLanguage() {
|
||||
const prefLang = SettingsStore.getValue("language", null, /*excludeDefault=*/true);
|
||||
let langs = [];
|
||||
|
||||
@@ -18,4 +18,4 @@ import {IndexedDBStoreWorker} from 'matrix-js-sdk/lib/indexeddb-worker.js';
|
||||
|
||||
const remoteWorker = new IndexedDBStoreWorker(postMessage);
|
||||
|
||||
onmessage = remoteWorker.onMessage;
|
||||
global.onmessage = remoteWorker.onMessage;
|
||||
|
||||
386
src/vector/mobile_guide/index.html
Normal file
386
src/vector/mobile_guide/index.html
Normal file
File diff suppressed because one or more lines are too long
24
src/vector/mobile_guide/index.js
Normal file
24
src/vector/mobile_guide/index.js
Normal file
@@ -0,0 +1,24 @@
|
||||
import {getVectorConfig} from '../getconfig';
|
||||
|
||||
function onBackToRiotClick() {
|
||||
document.cookie = 'mobile_redirect_to_guide=false;path=/';
|
||||
window.location.href = '../';
|
||||
}
|
||||
|
||||
async function initPage() {
|
||||
document.getElementById('back_to_riot_button').onclick = onBackToRiotClick;
|
||||
|
||||
const config = await getVectorConfig('..');
|
||||
let hsUrl;
|
||||
if (config && config['default_hs_url']) {
|
||||
hsUrl = config['default_hs_url'];
|
||||
}
|
||||
if (hsUrl && !hsUrl.endsWith('/')) hsUrl += '/';
|
||||
if (hsUrl && hsUrl !== 'https://matrix.org/') {
|
||||
document.getElementById('step2_container').style.display = 'block';
|
||||
document.getElementById('hs_url').innerHTML = hsUrl;
|
||||
document.getElementById('step_login_header').innerHTML= 'Step 3: Register or Log in';
|
||||
}
|
||||
}
|
||||
|
||||
initPage();
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
Copyright 2016 OpenMarket 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.
|
||||
*/
|
||||
|
||||
/* a very thin shim for loading olm.js: just sets the global OLM_OPTIONS and
|
||||
* requires the actual olm.js library.
|
||||
*
|
||||
* olm.js reads global.OLM_OPTIONS and defines global.Olm. The latter is fine for us,
|
||||
* but we need to prepare the former.
|
||||
*
|
||||
* We can't use webpack's definePlugin to do this, because we tell webpack not
|
||||
* to parse olm.js. We also can't put this code in index.js, because olm and
|
||||
* index.js are loaded in parallel, and we need to make sure OLM_OPTIONS is set
|
||||
* before olm.js is loaded.
|
||||
*/
|
||||
|
||||
/* total_memory must be a power of two, and at least twice the stack.
|
||||
*
|
||||
* We don't need a lot of stack, but we do need about 128K of heap to encrypt a
|
||||
* 64K event (enough to store the ciphertext and the plaintext, bearing in mind
|
||||
* that the plaintext can only be 48K because base64). We also have about 36K
|
||||
* of statics. So let's have 256K of memory.
|
||||
*/
|
||||
global.OLM_OPTIONS = {
|
||||
TOTAL_STACK: 64*1024,
|
||||
TOTAL_MEMORY: 256*1024,
|
||||
};
|
||||
|
||||
require('olm/olm.js');
|
||||
@@ -3,6 +3,7 @@
|
||||
/*
|
||||
Copyright 2016 Aviral Dasgupta
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
Copyright 2018 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.
|
||||
@@ -21,44 +22,26 @@ import VectorBasePlatform, {updateCheckStatusEnum} from './VectorBasePlatform';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import Promise from 'bluebird';
|
||||
import {remote, ipcRenderer, desktopCapturer} from 'electron';
|
||||
import rageshake from 'matrix-react-sdk/lib/rageshake/rageshake';
|
||||
|
||||
remote.autoUpdater.on('update-downloaded', onUpdateDownloaded);
|
||||
|
||||
// try to flush the rageshake logs to indexeddb before quit.
|
||||
ipcRenderer.on('before-quit', function () {
|
||||
console.log('riot-desktop closing');
|
||||
rageshake.flush();
|
||||
});
|
||||
|
||||
function onUpdateDownloaded(ev: Event, releaseNotes: string, ver: string, date: Date, updateURL: string) {
|
||||
dis.dispatch({
|
||||
action: 'new_version',
|
||||
currentVersion: remote.app.getVersion(),
|
||||
newVersion: ver,
|
||||
releaseNotes: releaseNotes,
|
||||
});
|
||||
}
|
||||
const ipcRenderer = window.ipcRenderer;
|
||||
|
||||
function platformFriendlyName(): string {
|
||||
console.log(window.process);
|
||||
switch (window.process.platform) {
|
||||
case 'darwin':
|
||||
return 'macOS';
|
||||
case 'freebsd':
|
||||
return 'FreeBSD';
|
||||
case 'openbsd':
|
||||
return 'OpenBSD';
|
||||
case 'sunos':
|
||||
return 'SunOS';
|
||||
case 'win32':
|
||||
return 'Windows';
|
||||
default:
|
||||
// Sorry, Linux users: you get lumped into here,
|
||||
// but only because Linux's capitalisation is
|
||||
// normal. We do care about you.
|
||||
return window.process.platform[0].toUpperCase() + window.process.platform.slice(1);
|
||||
// used to use window.process but the same info is available here
|
||||
if (navigator.userAgent.indexOf('Macintosh')) {
|
||||
return 'macOS';
|
||||
} else if (navigator.userAgent.indexOf('FreeBSD')) {
|
||||
return 'FreeBSD';
|
||||
} else if (navigator.userAgent.indexOf('OpenBSD')) {
|
||||
return 'OpenBSD';
|
||||
} else if (navigator.userAgent.indexOf('SunOS')) {
|
||||
return 'SunOS';
|
||||
} else if (navigator.userAgent.indexOf('Windows')) {
|
||||
return 'Windows';
|
||||
} else if (navigator.userAgent.indexOf('Linux')) {
|
||||
return 'Linux';
|
||||
} else {
|
||||
return 'Unknown';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,9 +68,11 @@ function getUpdateCheckStatus(status) {
|
||||
export default class ElectronPlatform extends VectorBasePlatform {
|
||||
constructor() {
|
||||
super();
|
||||
dis.register(_onAction);
|
||||
this.updatable = Boolean(remote.autoUpdater.getFeedURL());
|
||||
|
||||
this._pendingIpcCalls = {};
|
||||
this._nextIpcCallId = 0;
|
||||
|
||||
dis.register(_onAction);
|
||||
/*
|
||||
IPC Call `check_updates` returns:
|
||||
true if there is an update available
|
||||
@@ -103,10 +88,28 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
this.showUpdateCheck = false;
|
||||
});
|
||||
|
||||
// try to flush the rageshake logs to indexeddb before quit.
|
||||
ipcRenderer.on('before-quit', function() {
|
||||
console.log('riot-desktop closing');
|
||||
rageshake.flush();
|
||||
});
|
||||
|
||||
ipcRenderer.on('ipcReply', this._onIpcReply.bind(this));
|
||||
ipcRenderer.on('update-downloaded', this.onUpdateDownloaded.bind(this));
|
||||
|
||||
this.startUpdateCheck = this.startUpdateCheck.bind(this);
|
||||
this.stopUpdateCheck = this.stopUpdateCheck.bind(this);
|
||||
}
|
||||
|
||||
async onUpdateDownloaded(ev, updateInfo) {
|
||||
dis.dispatch({
|
||||
action: 'new_version',
|
||||
currentVersion: await this.getAppVersion(),
|
||||
newVersion: updateInfo,
|
||||
releaseNotes: updateInfo.releaseNotes,
|
||||
});
|
||||
}
|
||||
|
||||
getHumanReadableName(): string {
|
||||
return 'Electron Platform'; // no translation required: only used for analytics
|
||||
}
|
||||
@@ -133,7 +136,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
// maybe we should pass basic styling (italics, bold, underline) through from MD
|
||||
// we only have to strip out < and > as the spec doesn't include anything about things like &
|
||||
// so we shouldn't assume that all implementations will treat those properly. Very basic tag parsing is done.
|
||||
if (window.process.platform === 'linux') {
|
||||
if (navigator.userAgent.indexOf('Linux')) {
|
||||
msg = msg.replace(/</g, '<').replace(/>/g, '>');
|
||||
}
|
||||
|
||||
@@ -143,22 +146,17 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
{
|
||||
body: msg,
|
||||
icon: avatarUrl,
|
||||
tag: 'vector',
|
||||
silent: true, // we play our own sounds
|
||||
},
|
||||
);
|
||||
|
||||
notification.onclick = function() {
|
||||
notification.onclick = () => {
|
||||
dis.dispatch({
|
||||
action: 'view_room',
|
||||
room_id: room.roomId,
|
||||
});
|
||||
global.focus();
|
||||
const win = remote.getCurrentWindow();
|
||||
|
||||
if (win.isMinimized()) win.restore();
|
||||
else if (!win.isVisible()) win.show();
|
||||
else win.focus();
|
||||
this._ipcCall('focusWindow');
|
||||
};
|
||||
|
||||
return notification;
|
||||
@@ -172,8 +170,25 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
notif.close();
|
||||
}
|
||||
|
||||
getAppVersion(): Promise<string> {
|
||||
return Promise.resolve(remote.app.getVersion());
|
||||
async getAppVersion(): Promise<string> {
|
||||
return await this._ipcCall('getAppVersion');
|
||||
}
|
||||
|
||||
supportsAutoLaunch() {
|
||||
return true;
|
||||
}
|
||||
|
||||
async getAutoLaunchEnabled() {
|
||||
return await this._ipcCall('getAutoLaunchEnabled');
|
||||
}
|
||||
|
||||
async setAutoLaunchEnabled(enabled) {
|
||||
return await this._ipcCall('setAutoLaunchEnabled', enabled);
|
||||
}
|
||||
|
||||
async canSelfUpdate(): boolean {
|
||||
const feedUrl = await this._ipcCall('getUpdateFeedUrl');
|
||||
return Boolean(feedUrl);
|
||||
}
|
||||
|
||||
startUpdateCheck() {
|
||||
@@ -198,52 +213,47 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
return null;
|
||||
}
|
||||
|
||||
isElectron(): boolean { return true; }
|
||||
|
||||
requestNotificationPermission(): Promise<string> {
|
||||
return Promise.resolve('granted');
|
||||
}
|
||||
|
||||
reload() {
|
||||
remote.getCurrentWebContents().reload();
|
||||
// we used to remote to the main process to get it to
|
||||
// reload the webcontents, but in practice this is unnecessary:
|
||||
// the normal way works fine.
|
||||
window.location.reload(false);
|
||||
}
|
||||
|
||||
/* BEGIN copied and slightly-modified code
|
||||
* setupScreenSharingForIframe function from:
|
||||
* https://github.com/jitsi/jitsi-meet-electron-utils
|
||||
* Copied directly here to avoid the need for a native electron module for
|
||||
* 'just a bit of JavaScript'
|
||||
* NOTE: Apache v2.0 licensed
|
||||
*/
|
||||
setupScreenSharingForIframe(iframe: Object) {
|
||||
iframe.contentWindow.JitsiMeetElectron = {
|
||||
/**
|
||||
* Get sources available for screensharing. The callback is invoked
|
||||
* with an array of DesktopCapturerSources.
|
||||
*
|
||||
* @param {Function} callback - The success callback.
|
||||
* @param {Function} errorCallback - The callback for errors.
|
||||
* @param {Object} options - Configuration for getting sources.
|
||||
* @param {Array} options.types - Specify the desktop source types
|
||||
* to get, with valid sources being "window" and "screen".
|
||||
* @param {Object} options.thumbnailSize - Specify how big the
|
||||
* preview images for the sources should be. The valid keys are
|
||||
* height and width, e.g. { height: number, width: number}. By
|
||||
* default electron will return images with height and width of
|
||||
* 150px.
|
||||
*/
|
||||
obtainDesktopStreams(callback, errorCallback, options = {}) {
|
||||
desktopCapturer.getSources(options,
|
||||
(error, sources) => {
|
||||
if (error) {
|
||||
errorCallback(error);
|
||||
return;
|
||||
}
|
||||
|
||||
callback(sources);
|
||||
});
|
||||
},
|
||||
};
|
||||
async migrateFromOldOrigin() {
|
||||
return this._ipcCall('origin_migrate');
|
||||
}
|
||||
|
||||
async _ipcCall(name, ...args) {
|
||||
const ipcCallId = ++this._nextIpcCallId;
|
||||
return new Promise((resolve, reject) => {
|
||||
this._pendingIpcCalls[ipcCallId] = {resolve, reject};
|
||||
window.ipcRenderer.send('ipcCall', {id: ipcCallId, name, args});
|
||||
// Maybe add a timeout to these? Probably not necessary.
|
||||
});
|
||||
}
|
||||
|
||||
_onIpcReply(ev, payload) {
|
||||
if (payload.id === undefined) {
|
||||
console.warn("Ignoring IPC reply with no ID");
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._pendingIpcCalls[payload.id] === undefined) {
|
||||
console.warn("Unknown IPC payload ID: " + payload.id);
|
||||
return;
|
||||
}
|
||||
|
||||
const callbacks = this._pendingIpcCalls[payload.id];
|
||||
delete this._pendingIpcCalls[payload.id];
|
||||
if (payload.error) {
|
||||
callbacks.reject(payload.error);
|
||||
} else {
|
||||
callbacks.resolve(payload.reply);
|
||||
}
|
||||
}
|
||||
/* END of copied and slightly-modified code */
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
/*
|
||||
Copyright 2016 Aviral Dasgupta
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
Copyright 2018 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.
|
||||
@@ -45,7 +46,6 @@ export default class VectorBasePlatform extends BasePlatform {
|
||||
this.favicon = new Favico({animation: 'none'});
|
||||
this.showUpdateCheck = false;
|
||||
this._updateFavicon();
|
||||
this.updatable = true;
|
||||
|
||||
this.startUpdateCheck = this.startUpdateCheck.bind(this);
|
||||
this.stopUpdateCheck = this.stopUpdateCheck.bind(this);
|
||||
@@ -60,8 +60,8 @@ export default class VectorBasePlatform extends BasePlatform {
|
||||
// This needs to be in in a try block as it will throw
|
||||
// if there are more than 100 badge count changes in
|
||||
// its internal queue
|
||||
let bgColor = "#d00",
|
||||
notif = this.notificationCount;
|
||||
let bgColor = "#d00";
|
||||
let notif = this.notificationCount;
|
||||
|
||||
if (this.errorDidOccur) {
|
||||
notif = notif || "×";
|
||||
@@ -88,6 +88,19 @@ export default class VectorBasePlatform extends BasePlatform {
|
||||
this._updateFavicon();
|
||||
}
|
||||
|
||||
supportsAutoLaunch() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// XXX: Surely this should be a setting like any other?
|
||||
async getAutoLaunchEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
async setAutoLaunchEnabled(enabled) {
|
||||
throw new Error("Unimplemented");
|
||||
}
|
||||
|
||||
/**
|
||||
* Begin update polling, if applicable
|
||||
*/
|
||||
@@ -97,8 +110,8 @@ export default class VectorBasePlatform extends BasePlatform {
|
||||
/**
|
||||
* Whether we can call checkForUpdate on this platform build
|
||||
*/
|
||||
canSelfUpdate(): boolean {
|
||||
return this.updatable;
|
||||
async canSelfUpdate(): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
startUpdateCheck() {
|
||||
@@ -114,7 +127,7 @@ export default class VectorBasePlatform extends BasePlatform {
|
||||
dis.dispatch({
|
||||
action: 'check_updates',
|
||||
value: false,
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
getUpdateCheckStatusEnum() {
|
||||
@@ -136,4 +149,12 @@ export default class VectorBasePlatform extends BasePlatform {
|
||||
getDefaultDeviceDisplayName(): string {
|
||||
return _t("Unknown device");
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate account data from a previous origin
|
||||
* Used only for the electron app
|
||||
*/
|
||||
async migrateFromOldOrigin() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ import Promise from 'bluebird';
|
||||
import url from 'url';
|
||||
import UAParser from 'ua-parser-js';
|
||||
|
||||
var POKE_RATE_MS = 10 * 60 * 1000; // 10 min
|
||||
const POKE_RATE_MS = 10 * 60 * 1000; // 10 min
|
||||
|
||||
export default class WebPlatform extends VectorBasePlatform {
|
||||
constructor() {
|
||||
@@ -68,11 +68,11 @@ export default class WebPlatform extends VectorBasePlatform {
|
||||
// annoyingly, the latest spec says this returns a
|
||||
// promise, but this is only supported in Chrome 46
|
||||
// and Firefox 47, so adapt the callback API.
|
||||
const defer = Promise.defer();
|
||||
global.Notification.requestPermission((result) => {
|
||||
defer.resolve(result);
|
||||
return new Promise(function(resolve, reject) {
|
||||
global.Notification.requestPermission((result) => {
|
||||
resolve(result);
|
||||
});
|
||||
});
|
||||
return defer.promise;
|
||||
}
|
||||
|
||||
displayNotification(title: string, msg: string, avatarUrl: string, room: Object) {
|
||||
@@ -103,31 +103,31 @@ export default class WebPlatform extends VectorBasePlatform {
|
||||
}
|
||||
|
||||
_getVersion(): Promise<string> {
|
||||
const deferred = Promise.defer();
|
||||
|
||||
// We add a cachebuster to the request to make sure that we know about
|
||||
// the most recent version on the origin server. That might not
|
||||
// actually be the version we'd get on a reload (particularly in the
|
||||
// presence of intermediate caching proxies), but still: we're trying
|
||||
// to tell the user that there is a new version.
|
||||
request(
|
||||
{
|
||||
method: "GET",
|
||||
url: "version",
|
||||
qs: { cachebuster: Date.now() },
|
||||
},
|
||||
(err, response, body) => {
|
||||
if (err || response.status < 200 || response.status >= 300) {
|
||||
if (err === null) err = { status: response.status };
|
||||
deferred.reject(err);
|
||||
return;
|
||||
}
|
||||
|
||||
const ver = body.trim();
|
||||
deferred.resolve(ver);
|
||||
},
|
||||
);
|
||||
return deferred.promise;
|
||||
return new Promise(function(resolve, reject) {
|
||||
request(
|
||||
{
|
||||
method: "GET",
|
||||
url: "version",
|
||||
qs: { cachebuster: Date.now() },
|
||||
},
|
||||
(err, response, body) => {
|
||||
if (err || response.status < 200 || response.status >= 300) {
|
||||
if (err === null) err = { status: response.status };
|
||||
reject(err);
|
||||
return;
|
||||
}
|
||||
|
||||
const ver = body.trim();
|
||||
resolve(ver);
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
getAppVersion(): Promise<string> {
|
||||
@@ -142,6 +142,10 @@ export default class WebPlatform extends VectorBasePlatform {
|
||||
setInterval(this.pollForUpdate.bind(this), POKE_RATE_MS);
|
||||
}
|
||||
|
||||
async canSelfUpdate(): boolean {
|
||||
return true;
|
||||
}
|
||||
|
||||
pollForUpdate() {
|
||||
return this._getVersion().then((ver) => {
|
||||
if (this.runningVersion === null) {
|
||||
|
||||
64
src/vector/rageshakesetup.js
Normal file
64
src/vector/rageshakesetup.js
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
Copyright 2018 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Separate file that sets up rageshake logging when imported.
|
||||
* This is necessary so that rageshake logging is set up before
|
||||
* anything else. Webpack puts all import statements at the top
|
||||
* of the file before any code, so imports will always be
|
||||
* evaluated first. Other imports can cause other code to be
|
||||
* evaluated (eg. the loglevel library in js-sdk, which if set
|
||||
* up before rageshake causes some js-sdk logging to be missing
|
||||
* from the rageshake.)
|
||||
*/
|
||||
|
||||
import rageshake from "matrix-react-sdk/lib/rageshake/rageshake";
|
||||
import SdkConfig from "matrix-react-sdk/lib/SdkConfig";
|
||||
|
||||
function initRageshake() {
|
||||
rageshake.init().then(() => {
|
||||
console.log("Initialised rageshake.");
|
||||
console.log("To fix line numbers in Chrome: " +
|
||||
"Meatball menu → Settings → Blackboxing → Add /rageshake\\.js$");
|
||||
|
||||
window.addEventListener('beforeunload', (e) => {
|
||||
console.log('riot-web closing');
|
||||
// try to flush the logs to indexeddb
|
||||
rageshake.flush();
|
||||
});
|
||||
|
||||
rageshake.cleanup();
|
||||
}, (err) => {
|
||||
console.error("Failed to initialise rageshake: " + err);
|
||||
});
|
||||
}
|
||||
|
||||
initRageshake();
|
||||
|
||||
global.mxSendRageshake = function(text, withLogs) {
|
||||
if (withLogs === undefined) withLogs = true;
|
||||
require(['matrix-react-sdk/lib/rageshake/submit-rageshake'], (s) => {
|
||||
s(SdkConfig.get().bug_report_endpoint_url, {
|
||||
userText: text,
|
||||
sendLogs: withLogs,
|
||||
progressCallback: console.log.bind(console),
|
||||
}).then(() => {
|
||||
console.log("Bug report sent!");
|
||||
}, (err) => {
|
||||
console.error(err);
|
||||
});
|
||||
});
|
||||
};
|
||||
@@ -23,16 +23,16 @@ import qs from 'querystring';
|
||||
export function parseQsFromFragment(location) {
|
||||
// if we have a fragment, it will start with '#', which we need to drop.
|
||||
// (if we don't, this will return '').
|
||||
var fragment = location.hash.substring(1);
|
||||
const fragment = location.hash.substring(1);
|
||||
|
||||
// our fragment may contain a query-param-like section. we need to fish
|
||||
// this out *before* URI-decoding because the params may contain ? and &
|
||||
// characters which are only URI-encoded once.
|
||||
var hashparts = fragment.split('?');
|
||||
const hashparts = fragment.split('?');
|
||||
|
||||
var result = {
|
||||
const result = {
|
||||
location: decodeURIComponent(hashparts[0]),
|
||||
params: {}
|
||||
params: {},
|
||||
};
|
||||
|
||||
if (hashparts.length > 1) {
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
// ideally these unit tests could be run under nodejs rather than in a browser
|
||||
// via karma, but having two separate test frameworks in the same project
|
||||
// seems confusing
|
||||
var unit_tests = require.context('./unit-tests', true, /\.js$/);
|
||||
const unit_tests = require.context('./unit-tests', true, /\.js$/);
|
||||
unit_tests.keys().forEach(unit_tests);
|
||||
|
||||
var app_tests = require.context('./app-tests', true, /\.jsx?$/);
|
||||
const app_tests = require.context('./app-tests', true, /\.jsx?$/);
|
||||
app_tests.keys().forEach(app_tests);
|
||||
|
||||
@@ -17,40 +17,40 @@ limitations under the License.
|
||||
/* joining.js: tests for the various paths when joining a room */
|
||||
|
||||
import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg';
|
||||
import Platform from '../../src/vector/platform';
|
||||
import WebPlatform from '../../src/vector/platform/WebPlatform';
|
||||
|
||||
require('skin-sdk');
|
||||
|
||||
var jssdk = require('matrix-js-sdk');
|
||||
const jssdk = require('matrix-js-sdk');
|
||||
|
||||
var sdk = require('matrix-react-sdk');
|
||||
var peg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
var PageTypes = require('matrix-react-sdk/lib/PageTypes');
|
||||
var MatrixChat = sdk.getComponent('structures.MatrixChat');
|
||||
var RoomDirectory = sdk.getComponent('structures.RoomDirectory');
|
||||
var RoomPreviewBar = sdk.getComponent('rooms.RoomPreviewBar');
|
||||
var RoomView = sdk.getComponent('structures.RoomView');
|
||||
const sdk = require('matrix-react-sdk');
|
||||
const peg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
const dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
const PageTypes = require('matrix-react-sdk/lib/PageTypes');
|
||||
const MatrixChat = sdk.getComponent('structures.MatrixChat');
|
||||
const RoomDirectory = sdk.getComponent('structures.RoomDirectory');
|
||||
const RoomPreviewBar = sdk.getComponent('rooms.RoomPreviewBar');
|
||||
const RoomView = sdk.getComponent('structures.RoomView');
|
||||
|
||||
var React = require('react');
|
||||
var ReactDOM = require('react-dom');
|
||||
var ReactTestUtils = require('react-addons-test-utils');
|
||||
var expect = require('expect');
|
||||
const React = require('react');
|
||||
const ReactDOM = require('react-dom');
|
||||
const ReactTestUtils = require('react-addons-test-utils');
|
||||
const expect = require('expect');
|
||||
import Promise from 'bluebird';
|
||||
|
||||
var test_utils = require('../test-utils');
|
||||
var MockHttpBackend = require('matrix-mock-request');
|
||||
const test_utils = require('../test-utils');
|
||||
const MockHttpBackend = require('matrix-mock-request');
|
||||
|
||||
var HS_URL='http://localhost';
|
||||
var IS_URL='http://localhost';
|
||||
var USER_ID='@me:localhost';
|
||||
var ACCESS_TOKEN='access_token';
|
||||
const HS_URL='http://localhost';
|
||||
const IS_URL='http://localhost';
|
||||
const USER_ID='@me:localhost';
|
||||
const ACCESS_TOKEN='access_token';
|
||||
|
||||
describe('joining a room', function () {
|
||||
describe('over federation', function () {
|
||||
var parentDiv;
|
||||
var httpBackend;
|
||||
var matrixChat;
|
||||
describe('joining a room', function() {
|
||||
describe('over federation', function() {
|
||||
let parentDiv;
|
||||
let httpBackend;
|
||||
let matrixChat;
|
||||
|
||||
beforeEach(function() {
|
||||
test_utils.beforeEach(this);
|
||||
@@ -72,8 +72,8 @@ describe('joining a room', function () {
|
||||
});
|
||||
|
||||
it('should not get stuck at a spinner', function() {
|
||||
var ROOM_ALIAS = '#alias:localhost';
|
||||
var ROOM_ID = '!id:localhost';
|
||||
const ROOM_ALIAS = '#alias:localhost';
|
||||
const ROOM_ID = '!id:localhost';
|
||||
|
||||
httpBackend.when('GET', '/pushrules').respond(200, {});
|
||||
httpBackend.when('POST', '/filter').respond(200, { filter_id: 'fid' });
|
||||
@@ -88,9 +88,9 @@ describe('joining a room', function () {
|
||||
localStorage.setItem("mx_access_token", ACCESS_TOKEN );
|
||||
localStorage.setItem("mx_user_id", USER_ID);
|
||||
|
||||
PlatformPeg.set(new Platform());
|
||||
PlatformPeg.set(new WebPlatform());
|
||||
|
||||
var mc = (
|
||||
const mc = (
|
||||
<MatrixChat config={{}}
|
||||
makeRegistrationUrl={()=>{throw new Error("unimplemented");}}
|
||||
initialScreenAfterLogin={{
|
||||
@@ -100,7 +100,7 @@ describe('joining a room', function () {
|
||||
);
|
||||
matrixChat = ReactDOM.render(mc, parentDiv);
|
||||
|
||||
var roomView;
|
||||
let roomView;
|
||||
|
||||
// wait for /sync to happen. This may take some time, as the client
|
||||
// has to initialise indexeddb.
|
||||
@@ -118,11 +118,11 @@ describe('joining a room', function () {
|
||||
}).then(() => {
|
||||
console.log(`${Date.now()} App made requests for directory view; switching to a room.`);
|
||||
|
||||
var roomDir = ReactTestUtils.findRenderedComponentWithType(
|
||||
const roomDir = ReactTestUtils.findRenderedComponentWithType(
|
||||
matrixChat, RoomDirectory);
|
||||
|
||||
// enter an alias in the input, and simulate enter
|
||||
var input = ReactTestUtils.findRenderedDOMComponentWithTag(
|
||||
const input = ReactTestUtils.findRenderedDOMComponentWithTag(
|
||||
roomDir, 'input');
|
||||
input.value = ROOM_ALIAS;
|
||||
ReactTestUtils.Simulate.change(input);
|
||||
|
||||
@@ -17,7 +17,7 @@ limitations under the License.
|
||||
/* loading.js: test the myriad paths we have for loading the application */
|
||||
|
||||
import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg';
|
||||
import Platform from '../../src/vector/platform';
|
||||
import WebPlatform from '../../src/vector/platform/WebPlatform';
|
||||
|
||||
import 'skin-sdk';
|
||||
|
||||
@@ -40,10 +40,21 @@ import * as test_utils from '../test-utils';
|
||||
import MockHttpBackend from 'matrix-mock-request';
|
||||
import {parseQs, parseQsFromFragment} from '../../src/vector/url_utils';
|
||||
|
||||
var DEFAULT_HS_URL='http://my_server';
|
||||
var DEFAULT_IS_URL='http://my_is';
|
||||
const DEFAULT_HS_URL='http://my_server';
|
||||
const DEFAULT_IS_URL='http://my_is';
|
||||
|
||||
describe('loading:', function () {
|
||||
expect.extend({
|
||||
toStartWith(prefix) {
|
||||
expect.assert(
|
||||
this.actual.startsWith(prefix),
|
||||
'expected %s to start with %s',
|
||||
this.actual, prefix,
|
||||
);
|
||||
return this;
|
||||
}
|
||||
});
|
||||
|
||||
describe('loading:', function() {
|
||||
let parentDiv;
|
||||
let httpBackend;
|
||||
|
||||
@@ -74,7 +85,7 @@ describe('loading:', function () {
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(async function () {
|
||||
afterEach(async function() {
|
||||
console.log(`${Date.now()}: loading: afterEach`);
|
||||
if (parentDiv) {
|
||||
ReactDOM.unmountComponentAtNode(parentDiv);
|
||||
@@ -112,12 +123,12 @@ describe('loading:', function () {
|
||||
toString: function() { return this.search + this.hash; },
|
||||
};
|
||||
|
||||
let tokenLoginCompleteDefer = Promise.defer();
|
||||
const tokenLoginCompleteDefer = Promise.defer();
|
||||
tokenLoginCompletePromise = tokenLoginCompleteDefer.promise;
|
||||
|
||||
function onNewScreen(screen) {
|
||||
console.log(Date.now() + " newscreen "+screen);
|
||||
var hash = '#/' + screen;
|
||||
const hash = '#/' + screen;
|
||||
windowLocation.hash = hash;
|
||||
console.log(Date.now() + " browser URI now "+ windowLocation);
|
||||
}
|
||||
@@ -129,7 +140,7 @@ describe('loading:', function () {
|
||||
return {
|
||||
screen: fragparts.location.substring(1),
|
||||
params: fragparts.params,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const MatrixChat = sdk.getComponent('structures.MatrixChat');
|
||||
@@ -140,9 +151,9 @@ describe('loading:', function () {
|
||||
default_is_url: DEFAULT_IS_URL,
|
||||
}, opts.config || {});
|
||||
|
||||
PlatformPeg.set(new Platform());
|
||||
PlatformPeg.set(new WebPlatform());
|
||||
|
||||
var params = parseQs(windowLocation);
|
||||
const params = parseQs(windowLocation);
|
||||
matrixChat = ReactDOM.render(
|
||||
<MatrixChat
|
||||
onNewScreen={onNewScreen}
|
||||
@@ -153,7 +164,7 @@ describe('loading:', function () {
|
||||
onTokenLoginCompleted={() => tokenLoginCompleteDefer.resolve()}
|
||||
initialScreenAfterLogin={getScreenFromLocation(windowLocation)}
|
||||
makeRegistrationUrl={() => {throw new Error('Not implemented');}}
|
||||
/>, parentDiv
|
||||
/>, parentDiv,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -179,7 +190,7 @@ describe('loading:', function () {
|
||||
}
|
||||
|
||||
describe("Clean load with no stored credentials:", function() {
|
||||
it('gives a login panel by default', function (done) {
|
||||
it('gives a login panel by default', function(done) {
|
||||
loadApp();
|
||||
|
||||
Promise.delay(1).then(() => {
|
||||
@@ -257,7 +268,6 @@ describe('loading:', function () {
|
||||
}
|
||||
return completeLogin(matrixChat);
|
||||
}).then(() => {
|
||||
|
||||
// once the sync completes, we should have a room view
|
||||
ReactTestUtils.findRenderedComponentWithType(
|
||||
matrixChat, sdk.getComponent('structures.HomePage'));
|
||||
@@ -356,7 +366,7 @@ describe('loading:', function () {
|
||||
});
|
||||
return httpBackend.flush();
|
||||
}).then(() => {
|
||||
return awaitSyncingSpinner(matrixChat)
|
||||
return awaitSyncingSpinner(matrixChat);
|
||||
}).then(() => {
|
||||
// we got a sync spinner - let the sync complete
|
||||
return expectAndAwaitSync();
|
||||
@@ -380,7 +390,7 @@ describe('loading:', function () {
|
||||
it('shows a login view', function() {
|
||||
// we expect a single <Login> component
|
||||
ReactTestUtils.findRenderedComponentWithType(
|
||||
matrixChat, sdk.getComponent('structures.login.Login')
|
||||
matrixChat, sdk.getComponent('structures.login.Login'),
|
||||
);
|
||||
|
||||
// the only outstanding request should be a GET /login
|
||||
@@ -408,7 +418,7 @@ describe('loading:', function () {
|
||||
});
|
||||
|
||||
describe('Guest auto-registration:', function() {
|
||||
it('shows a home page by default', function (done) {
|
||||
it('shows a home page by default', function(done) {
|
||||
loadApp();
|
||||
|
||||
Promise.delay(1).then(() => {
|
||||
@@ -438,10 +448,7 @@ describe('loading:', function () {
|
||||
}).done(done, done);
|
||||
});
|
||||
|
||||
it('uses the last known homeserver to register with', function (done) {
|
||||
localStorage.setItem("mx_hs_url", "https://homeserver" );
|
||||
localStorage.setItem("mx_is_url", "https://idserver" );
|
||||
|
||||
it('uses the default homeserver to register with', function(done) {
|
||||
loadApp();
|
||||
|
||||
Promise.delay(1).then(() => {
|
||||
@@ -450,7 +457,7 @@ describe('loading:', function () {
|
||||
assertAtLoadingSpinner(matrixChat);
|
||||
|
||||
httpBackend.when('POST', '/register').check(function(req) {
|
||||
expect(req.path).toMatch(new RegExp("^https://homeserver/"));
|
||||
expect(req.path).toStartWith(DEFAULT_HS_URL);
|
||||
expect(req.queryParams.kind).toEqual('guest');
|
||||
}).respond(200, {
|
||||
user_id: "@guest:localhost",
|
||||
@@ -463,21 +470,21 @@ describe('loading:', function () {
|
||||
}).then(() => {
|
||||
return expectAndAwaitSync();
|
||||
}).then((req) => {
|
||||
expect(req.path).toMatch(new RegExp("^https://homeserver/"));
|
||||
expect(req.path).toStartWith(DEFAULT_HS_URL);
|
||||
|
||||
// once the sync completes, we should have a home page
|
||||
httpBackend.verifyNoOutstandingExpectation();
|
||||
ReactTestUtils.findRenderedComponentWithType(
|
||||
matrixChat, sdk.getComponent('structures.HomePage'));
|
||||
expect(windowLocation.hash).toEqual("#/home");
|
||||
expect(MatrixClientPeg.get().baseUrl).toEqual("https://homeserver");
|
||||
expect(MatrixClientPeg.get().idBaseUrl).toEqual("https://idserver");
|
||||
expect(MatrixClientPeg.get().baseUrl).toEqual(DEFAULT_HS_URL);
|
||||
expect(MatrixClientPeg.get().idBaseUrl).toEqual(DEFAULT_IS_URL);
|
||||
}).done(done, done);
|
||||
});
|
||||
|
||||
it('shows a room view if we followed a room link', function(done) {
|
||||
loadApp({
|
||||
uriFragment: "#/room/!room:id"
|
||||
uriFragment: "#/room/!room:id",
|
||||
});
|
||||
Promise.delay(1).then(() => {
|
||||
// at this point, we're trying to do a guest registration;
|
||||
@@ -547,7 +554,7 @@ describe('loading:', function () {
|
||||
|
||||
// we expect a single <Login> component
|
||||
ReactTestUtils.findRenderedComponentWithType(
|
||||
matrixChat, sdk.getComponent('structures.login.Login')
|
||||
matrixChat, sdk.getComponent('structures.login.Login'),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -580,7 +587,7 @@ describe('loading:', function () {
|
||||
});
|
||||
|
||||
describe('Token login:', function() {
|
||||
it('logs in successfully', function (done) {
|
||||
it('logs in successfully', function(done) {
|
||||
loadApp({
|
||||
queryString: "?loginToken=secretToken&homeserver=https%3A%2F%2Fhomeserver&identityServer=https%3A%2F%2Fidserver",
|
||||
});
|
||||
@@ -658,7 +665,7 @@ describe('loading:', function () {
|
||||
|
||||
// assert that we are on the loading page
|
||||
function assertAtLoadingSpinner(matrixChat) {
|
||||
var domComponent = ReactDOM.findDOMNode(matrixChat);
|
||||
const domComponent = ReactDOM.findDOMNode(matrixChat);
|
||||
expect(domComponent.className).toEqual("mx_MatrixChat_splash");
|
||||
|
||||
// just the spinner
|
||||
@@ -697,12 +704,12 @@ function awaitSyncingSpinner(matrixChat, retryLimit, retryCount) {
|
||||
}
|
||||
|
||||
function assertAtSyncingSpinner(matrixChat) {
|
||||
var domComponent = ReactDOM.findDOMNode(matrixChat);
|
||||
const domComponent = ReactDOM.findDOMNode(matrixChat);
|
||||
expect(domComponent.className).toEqual("mx_MatrixChat_splash");
|
||||
|
||||
ReactTestUtils.findRenderedComponentWithType(
|
||||
matrixChat, sdk.getComponent('elements.Spinner'));
|
||||
var logoutLink = ReactTestUtils.findRenderedDOMComponentWithTag(
|
||||
const logoutLink = ReactTestUtils.findRenderedDOMComponentWithTag(
|
||||
matrixChat, 'a');
|
||||
expect(logoutLink.text).toEqual("Logout");
|
||||
}
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
* Skins the react-sdk with the vector components
|
||||
*/
|
||||
|
||||
var sdk = require('matrix-react-sdk');
|
||||
const sdk = require('matrix-react-sdk');
|
||||
sdk.loadSkin(require('../src/component-index'));
|
||||
|
||||
@@ -8,7 +8,7 @@ import Promise from 'bluebird';
|
||||
* @param {Mocha.Context} context The test context
|
||||
*/
|
||||
export function beforeEach(context) {
|
||||
var desc = context.currentTest.fullTitle();
|
||||
const desc = context.currentTest.fullTitle();
|
||||
console.log();
|
||||
console.log(desc);
|
||||
console.log(new Array(1 + desc.length).join("="));
|
||||
@@ -22,7 +22,7 @@ export function beforeEach(context) {
|
||||
* returns true if the current environment supports webrtc
|
||||
*/
|
||||
export function browserSupportsWebRTC() {
|
||||
var n = global.window.navigator;
|
||||
const n = global.window.navigator;
|
||||
return n.getUserMedia || n.webkitGetUserMedia ||
|
||||
n.mozGetUserMedia;
|
||||
}
|
||||
|
||||
@@ -8,17 +8,12 @@ if (!og_image_url) og_image_url = 'https://riot.im/app/themes/riot/img/logos/rio
|
||||
|
||||
module.exports = {
|
||||
entry: {
|
||||
"bundle": "./src/vector/index.js",
|
||||
// Load babel-polyfill first to avoid issues where some imports (namely react)
|
||||
// are potentially loaded before babel-polyfill.
|
||||
"bundle": ["babel-polyfill", "./src/vector/index.js"],
|
||||
"indexeddb-worker": "./src/vector/indexeddb-worker.js",
|
||||
|
||||
// We ship olm.js as a separate lump of javascript. This makes it get
|
||||
// loaded via a separate <script/> tag in index.html (which loads it
|
||||
// into the browser global `Olm`, where js-sdk expects to find it).
|
||||
//
|
||||
// (we should probably make js-sdk load it asynchronously at some
|
||||
// point, so that it doesn't block the pageload, but that is a separate
|
||||
// problem)
|
||||
"olm": "./src/vector/olm-loader.js",
|
||||
"mobileguide": "./src/vector/mobile_guide/index.js",
|
||||
|
||||
// CSS themes
|
||||
"theme-light": "./node_modules/matrix-react-sdk/res/themes/light/css/light.scss",
|
||||
@@ -26,29 +21,40 @@ module.exports = {
|
||||
"theme-status": "./res/themes/status/css/status.scss",
|
||||
},
|
||||
module: {
|
||||
preLoaders: [
|
||||
{ test: /\.js$/, loader: "source-map-loader" },
|
||||
],
|
||||
loaders: [
|
||||
{ test: /\.json$/, loader: "json" },
|
||||
{ test: /\.js$/, loader: "babel", include: path.resolve('./src') },
|
||||
rules: [
|
||||
{ enforce: 'pre', test: /\.js$/, use: "source-map-loader", exclude: /node_modules/, },
|
||||
{ test: /\.js$/, use: "babel-loader", include: path.resolve(__dirname, 'src') },
|
||||
{
|
||||
test: /\.scss$/,
|
||||
|
||||
// 1. postcss-loader turns the SCSS into normal CSS.
|
||||
// 2. css-raw-loader turns the CSS into a javascript module
|
||||
// 2. raw-loader turns the CSS into a javascript module
|
||||
// whose default export is a string containing the CSS.
|
||||
// (css-raw-loader is similar to css-loader, but the latter
|
||||
// (raw-loader is similar to css-loader, but the latter
|
||||
// would also drag in the imgs and fonts that our CSS refers to
|
||||
// as webpack inputs.)
|
||||
// 3. ExtractTextPlugin turns that string into a separate asset.
|
||||
loader: ExtractTextPlugin.extract("css-raw-loader!postcss-loader?config=postcss.config.js"),
|
||||
use: ExtractTextPlugin.extract({
|
||||
use: [
|
||||
"raw-loader",
|
||||
{
|
||||
loader: 'postcss-loader',
|
||||
options: {
|
||||
config: {
|
||||
path: './postcss.config.js'
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
}),
|
||||
},
|
||||
{
|
||||
// this works similarly to the scss case, without postcss.
|
||||
test: /\.css$/,
|
||||
loader: ExtractTextPlugin.extract("css-raw-loader"),
|
||||
use: ExtractTextPlugin.extract({
|
||||
use: "raw-loader"
|
||||
}),
|
||||
},
|
||||
|
||||
],
|
||||
noParse: [
|
||||
// for cross platform compatibility use [\\\/] as the path separator
|
||||
@@ -102,11 +108,6 @@ module.exports = {
|
||||
"matrix-js-sdk": path.resolve('./node_modules/matrix-js-sdk'),
|
||||
},
|
||||
},
|
||||
externals: {
|
||||
// Don't try to bundle electron: leave it as a commonjs dependency
|
||||
// (the 'commonjs' here means it will output a 'require')
|
||||
"electron": "commonjs electron",
|
||||
},
|
||||
plugins: [
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': {
|
||||
@@ -126,10 +127,16 @@ module.exports = {
|
||||
// bottom of <head> or the bottom of <body>, and I'm a bit scared
|
||||
// about moving them.
|
||||
inject: false,
|
||||
excludeChunks: ['mobileguide'],
|
||||
vars: {
|
||||
og_image_url: og_image_url,
|
||||
},
|
||||
}),
|
||||
new HtmlWebpackPlugin({
|
||||
template: './src/vector/mobile_guide/index.html',
|
||||
filename: 'mobile_guide/index.html',
|
||||
chunks: ['mobileguide'],
|
||||
}),
|
||||
],
|
||||
devtool: 'source-map',
|
||||
|
||||
@@ -142,14 +149,11 @@ module.exports = {
|
||||
// don't fill the console up with a mahoosive list of modules
|
||||
chunks: false,
|
||||
},
|
||||
|
||||
// hot mdule replacement doesn't work (I think we'd need react-hot-reload?)
|
||||
// so webpack-dev-server reloads the page on every update which is quite
|
||||
// tedious in Riot since that can take a while.
|
||||
hot: false,
|
||||
inline: false,
|
||||
},
|
||||
};
|
||||
|
||||
// olm is an optional dependency. Ignore it if it's not installed, to avoid a
|
||||
// scary-looking error.
|
||||
try {
|
||||
require('olm');
|
||||
} catch (e) {
|
||||
console.log("Olm is not installed; not shipping it");
|
||||
delete(module.exports.entry["olm"]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user