Compare commits
265 Commits
travis/inl
...
release-v1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
74d51a3ab5 | ||
|
|
f6349dd37d | ||
|
|
0a3eb467fc | ||
|
|
5da849099f | ||
|
|
8e111e2b9d | ||
|
|
24ec0ebbf9 | ||
|
|
122e9ac087 | ||
|
|
d70c651040 | ||
|
|
3254de8394 | ||
|
|
485f92840e | ||
|
|
77476451bd | ||
|
|
055d55aac6 | ||
|
|
1f16ae98f5 | ||
|
|
07cf2f20fb | ||
|
|
a70803a36e | ||
|
|
f78be2631a | ||
|
|
a380f9c9f2 | ||
|
|
3a537d9fdc | ||
|
|
3a67dc18e9 | ||
|
|
3d90242aba | ||
|
|
11ba1a6ce8 | ||
|
|
cef446d7fa | ||
|
|
59e00cb41d | ||
|
|
c08b7be434 | ||
|
|
4960838e58 | ||
|
|
06ac124bab | ||
|
|
661e946e60 | ||
|
|
4825cf1425 | ||
|
|
8bafc273cb | ||
|
|
b5ffac2db1 | ||
|
|
1c36138ae8 | ||
|
|
fb094fddba | ||
|
|
6029556291 | ||
|
|
53eb0e0f26 | ||
|
|
a93c82fe9c | ||
|
|
4e1204f34e | ||
|
|
618665f655 | ||
|
|
ea01af7993 | ||
|
|
d95a6a38ae | ||
|
|
1ef1c4fbae | ||
|
|
7015d6e3eb | ||
|
|
fe90016f8d | ||
|
|
b739b0faf9 | ||
|
|
700d894324 | ||
|
|
10194fe445 | ||
|
|
90a20ce6a7 | ||
|
|
a380fe5883 | ||
|
|
148149f765 | ||
|
|
7895fc1c78 | ||
|
|
51b380da65 | ||
|
|
c41ba297e3 | ||
|
|
e565044aa3 | ||
|
|
304fccaec4 | ||
|
|
4e0ea04d3c | ||
|
|
0733cd6a9b | ||
|
|
0cd7d9a57d | ||
|
|
8ce7de3b1c | ||
|
|
f04790e1cd | ||
|
|
0ac07c4522 | ||
|
|
e716e484a6 | ||
|
|
099f5844b4 | ||
|
|
918d9834ee | ||
|
|
009a56cee7 | ||
|
|
040555772a | ||
|
|
3b1193c1e6 | ||
|
|
c00abd6add | ||
|
|
f9db77758b | ||
|
|
5eaaf34fe2 | ||
|
|
a9c43e57a8 | ||
|
|
4cb245b8d8 | ||
|
|
9502a11f6d | ||
|
|
d998fa88e6 | ||
|
|
4ef7ceebe5 | ||
|
|
4acde37698 | ||
|
|
49bcf02db3 | ||
|
|
45424f4a3b | ||
|
|
dbd4e209d3 | ||
|
|
10d5855bba | ||
|
|
182ec9cdb4 | ||
|
|
c07f2e1c18 | ||
|
|
93e6abefed | ||
|
|
fc02ecc3a1 | ||
|
|
25f2859a95 | ||
|
|
64c44aef8e | ||
|
|
8dfc3797f0 | ||
|
|
bb979157e4 | ||
|
|
1f2559a86d | ||
|
|
114acc022f | ||
|
|
63f370c2db | ||
|
|
b1f9a96268 | ||
|
|
c246d7839f | ||
|
|
cd127c51ae | ||
|
|
6670859dc6 | ||
|
|
6c8d52f8df | ||
|
|
b260621aff | ||
|
|
07a0af2aae | ||
|
|
7cfec9255e | ||
|
|
90825eac79 | ||
|
|
12c56fb647 | ||
|
|
b39b92eb20 | ||
|
|
008ea589dc | ||
|
|
ee620be1ec | ||
|
|
2db3bb5556 | ||
|
|
bc70ef72ff | ||
|
|
d3fb0acdfb | ||
|
|
17c566e31e | ||
|
|
ac42f774aa | ||
|
|
28fb9bfc75 | ||
|
|
b98effbf32 | ||
|
|
889ed4541b | ||
|
|
427ca9d92d | ||
|
|
3df2616f4e | ||
|
|
9ef7507750 | ||
|
|
c5f533011b | ||
|
|
d03032b808 | ||
|
|
17dcef621e | ||
|
|
bf305f76a7 | ||
|
|
5ad5af7f20 | ||
|
|
4b3ba43f38 | ||
|
|
7e6ce7fb76 | ||
|
|
5c126cb61e | ||
|
|
6d056d7a08 | ||
|
|
d22e1fff16 | ||
|
|
0c8fee3528 | ||
|
|
535ca49479 | ||
|
|
86c61cab33 | ||
|
|
416de8332a | ||
|
|
e30137ce68 | ||
|
|
982b10464f | ||
|
|
dc4cc02682 | ||
|
|
a8429f3e1d | ||
|
|
3343d14323 | ||
|
|
94d05c7e25 | ||
|
|
2976d4c0cf | ||
|
|
b2683fb675 | ||
|
|
f7180853fc | ||
|
|
cb625469a5 | ||
|
|
296e5913b7 | ||
|
|
bd888ff7c9 | ||
|
|
26a229d745 | ||
|
|
47f1d2fb98 | ||
|
|
f0069c6ebd | ||
|
|
15fe7091ff | ||
|
|
f5c2d51f1e | ||
|
|
947c913d1c | ||
|
|
69b4296fa7 | ||
|
|
8692d6fa89 | ||
|
|
83359afe5d | ||
|
|
8abc7cd87c | ||
|
|
11b40eeff4 | ||
|
|
9cf35ab199 | ||
|
|
87806b8a67 | ||
|
|
417835fcca | ||
|
|
708f6a26b1 | ||
|
|
1a7cfc67d9 | ||
|
|
29528eaed4 | ||
|
|
42067f9fd5 | ||
|
|
ea8989816f | ||
|
|
571807d226 | ||
|
|
9960277ad0 | ||
|
|
4e0035b0a7 | ||
|
|
9c3627dca9 | ||
|
|
36f8a37bd4 | ||
|
|
0fa062ccf6 | ||
|
|
c98ca42bbd | ||
|
|
b0c43890af | ||
|
|
dd303b292a | ||
|
|
53f9895901 | ||
|
|
14c23f1387 | ||
|
|
4d6a8f9194 | ||
|
|
3c8efd51ef | ||
|
|
cddbe86481 | ||
|
|
5e86344293 | ||
|
|
2ffb9e8438 | ||
|
|
ed4c6a77d1 | ||
|
|
c2e87dde85 | ||
|
|
001b15b856 | ||
|
|
84d6dcf498 | ||
|
|
e4c9444fe3 | ||
|
|
0532c9c37b | ||
|
|
f06eb14c48 | ||
|
|
1b349023ed | ||
|
|
72f987a42b | ||
|
|
1c18379b5c | ||
|
|
325cf2c08b | ||
|
|
4c96b7826c | ||
|
|
3228a3abd1 | ||
|
|
ddbfab4fc5 | ||
|
|
b744e97fd0 | ||
|
|
cd7fd24b1a | ||
|
|
1de7828e4d | ||
|
|
fb0bc34042 | ||
|
|
f38aedae85 | ||
|
|
ecf41e6fa5 | ||
|
|
643897a204 | ||
|
|
0bc5a01228 | ||
|
|
95fb11a2b9 | ||
|
|
19748762a5 | ||
|
|
d1d6ef55ff | ||
|
|
c6e9aba308 | ||
|
|
bd38ad5166 | ||
|
|
1952cf6563 | ||
|
|
c580148bb7 | ||
|
|
75aef71fe6 | ||
|
|
5207e35488 | ||
|
|
040058957f | ||
|
|
11ce4fa41b | ||
|
|
74b4c91d58 | ||
|
|
c7d34ae926 | ||
|
|
9400bd1fd2 | ||
|
|
e7301ffd74 | ||
|
|
43bc270284 | ||
|
|
5642fc4026 | ||
|
|
97a43d058d | ||
|
|
46082f63b3 | ||
|
|
3f0f077ced | ||
|
|
dfa70b0637 | ||
|
|
184efbbc44 | ||
|
|
a9db513352 | ||
|
|
1ea1d29d3e | ||
|
|
ff74d3ce13 | ||
|
|
75f840a214 | ||
|
|
fd85d3f33d | ||
|
|
ac15f2755c | ||
|
|
d178286e2b | ||
|
|
929fa5d59d | ||
|
|
20b1321818 | ||
|
|
47486e84dd | ||
|
|
83ebda350a | ||
|
|
6fa5591cfe | ||
|
|
a2074cbc02 | ||
|
|
1d79f97a7a | ||
|
|
57d5206592 | ||
|
|
912e7c9f68 | ||
|
|
a05c68e8d9 | ||
|
|
9063f07b05 | ||
|
|
a13863714c | ||
|
|
5e6ae6a855 | ||
|
|
9e15000ea1 | ||
|
|
6201c3a3f5 | ||
|
|
88bf562150 | ||
|
|
c5cff11fba | ||
|
|
11d02f68da | ||
|
|
61ad5409ea | ||
|
|
8ad5640ece | ||
|
|
4eb7c1bc00 | ||
|
|
54513158b9 | ||
|
|
0a793d23be | ||
|
|
281236432a | ||
|
|
b211407b76 | ||
|
|
740bf51e46 | ||
|
|
c854769440 | ||
|
|
0c7baa46f4 | ||
|
|
a1c602c98e | ||
|
|
025225a899 | ||
|
|
146ed151dd | ||
|
|
cd2dda268f | ||
|
|
b8b8a5ee85 | ||
|
|
a76c4ae943 | ||
|
|
979851ae1b | ||
|
|
54b8e93ee4 | ||
|
|
92a12b7ac0 | ||
|
|
bcf4aaee95 | ||
|
|
f2b98f14d4 | ||
|
|
c6ab8d1d37 |
@@ -7,14 +7,14 @@ assignees: ''
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Is your suggestion related to a problem? Please describe.**
|
#### Is your suggestion related to a problem? Please describe.
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
#### Describe the solution you'd like.
|
||||||
A clear and concise description of what you want to happen.
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
#### Describe alternatives you've considered.
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
**Additional context**
|
#### Additional context
|
||||||
Add any other context or screenshots about the feature request here.
|
Add any other context or screenshots about the feature request here.
|
||||||
|
|||||||
3
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
3
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<!-- Please read CONTRIBUTING.md before submitting your pull request -->
|
||||||
|
|
||||||
|
<!-- Include a Sign-Off at the end of your Pull Request (as described in CONTRIBUTING.md), or on every commit -->
|
||||||
217
CHANGELOG.md
217
CHANGELOG.md
@@ -1,3 +1,210 @@
|
|||||||
|
Changes in [1.7.30](https://github.com/vector-im/element-web/releases/tag/v1.7.30) (2021-06-07)
|
||||||
|
===============================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.30-rc.1...v1.7.30)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.23.0 and JS SDK 11.2.0
|
||||||
|
|
||||||
|
Changes in [1.7.30-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.30-rc.1) (2021-06-01)
|
||||||
|
=========================================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.29...v1.7.30-rc.1)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.23.0-rc.1 and JS SDK 11.2.0-rc.1
|
||||||
|
* Translations update from Weblate
|
||||||
|
[\#17526](https://github.com/vector-im/element-web/pull/17526)
|
||||||
|
* Add Modernizr test for Promise.allSettled given js-sdk and react-sdk depend
|
||||||
|
on it
|
||||||
|
[\#17464](https://github.com/vector-im/element-web/pull/17464)
|
||||||
|
* Bump libolm dependency, and update package name.
|
||||||
|
[\#17433](https://github.com/vector-im/element-web/pull/17433)
|
||||||
|
* Remove logo spinner
|
||||||
|
[\#17423](https://github.com/vector-im/element-web/pull/17423)
|
||||||
|
|
||||||
|
Changes in [1.7.29](https://github.com/vector-im/element-web/releases/tag/v1.7.29) (2021-05-24)
|
||||||
|
===============================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.29-rc.1...v1.7.29)
|
||||||
|
|
||||||
|
## Security notice
|
||||||
|
|
||||||
|
Element Web 1.7.29 fixes (by upgrading to olm 3.2.3) an issue in code used for
|
||||||
|
decrypting server-side stored secrets. The issue could potentially allow a
|
||||||
|
malicious homeserver to cause a stack buffer overflow in the affected function
|
||||||
|
and to control that function's local variables.
|
||||||
|
|
||||||
|
## All changes
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.22.0 and JS SDK 11.1.0
|
||||||
|
* [Release] Bump libolm dependency, and update package name
|
||||||
|
[\#17456](https://github.com/vector-im/element-web/pull/17456)
|
||||||
|
|
||||||
|
Changes in [1.7.29-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.29-rc.1) (2021-05-19)
|
||||||
|
=========================================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.28...v1.7.29-rc.1)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.22.0-rc.1 and JS SDK 11.1.0-rc.1
|
||||||
|
* Translations update from Weblate
|
||||||
|
[\#17384](https://github.com/vector-im/element-web/pull/17384)
|
||||||
|
* Prevent minification of `.html` files
|
||||||
|
[\#17349](https://github.com/vector-im/element-web/pull/17349)
|
||||||
|
* Update matrix-widget-api/react-sdk dependency reference
|
||||||
|
[\#17346](https://github.com/vector-im/element-web/pull/17346)
|
||||||
|
* Add `yarn start:https`
|
||||||
|
[\#16989](https://github.com/vector-im/element-web/pull/16989)
|
||||||
|
* Translations update from Weblate
|
||||||
|
[\#17239](https://github.com/vector-im/element-web/pull/17239)
|
||||||
|
* Remove "in development" flag from voice messages labs documentation
|
||||||
|
[\#17204](https://github.com/vector-im/element-web/pull/17204)
|
||||||
|
* Add required webpack+jest config to load Safari support modules
|
||||||
|
[\#17193](https://github.com/vector-im/element-web/pull/17193)
|
||||||
|
|
||||||
|
Changes in [1.7.28](https://github.com/vector-im/element-web/releases/tag/v1.7.28) (2021-05-17)
|
||||||
|
===============================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.28-rc.1...v1.7.28)
|
||||||
|
|
||||||
|
## Security notice
|
||||||
|
|
||||||
|
Element Web 1.7.28 fixes (by upgrading to matrix-react-sdk 3.21.0) a low
|
||||||
|
severity issue (GHSA-8796-gc9j-63rv) related to file upload. When uploading a
|
||||||
|
file, the local file preview can lead to execution of scripts embedded in the
|
||||||
|
uploaded file, but only after several user interactions to open the preview in
|
||||||
|
a separate tab. This only impacts the local user while in the process of
|
||||||
|
uploading. It cannot be exploited remotely or by other users. Thanks to
|
||||||
|
[Muhammad Zaid Ghifari](https://github.com/MR-ZHEEV) for responsibly disclosing
|
||||||
|
this via Matrix's Security Disclosure Policy.
|
||||||
|
|
||||||
|
## All changes
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.21.0 and JS SDK 11.0.0
|
||||||
|
|
||||||
|
Changes in [1.7.28-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.28-rc.1) (2021-05-11)
|
||||||
|
=========================================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.27...v1.7.28-rc.1)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.21.0-rc.1 and JS SDK 11.0.0-rc.1
|
||||||
|
* Switch back to release version of `sanitize-html`
|
||||||
|
[\#17231](https://github.com/vector-im/element-web/pull/17231)
|
||||||
|
* Bump url-parse from 1.4.7 to 1.5.1
|
||||||
|
[\#17199](https://github.com/vector-im/element-web/pull/17199)
|
||||||
|
* Bump lodash from 4.17.20 to 4.17.21
|
||||||
|
[\#17205](https://github.com/vector-im/element-web/pull/17205)
|
||||||
|
* Bump hosted-git-info from 2.8.8 to 2.8.9
|
||||||
|
[\#17219](https://github.com/vector-im/element-web/pull/17219)
|
||||||
|
* Disable host checking on the webpack dev server
|
||||||
|
[\#17194](https://github.com/vector-im/element-web/pull/17194)
|
||||||
|
* Bump ua-parser-js from 0.7.23 to 0.7.24
|
||||||
|
[\#17190](https://github.com/vector-im/element-web/pull/17190)
|
||||||
|
|
||||||
|
Changes in [1.7.27](https://github.com/vector-im/element-web/releases/tag/v1.7.27) (2021-05-10)
|
||||||
|
===============================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.27-rc.1...v1.7.27)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.20.0 and JS SDK 10.1.0
|
||||||
|
|
||||||
|
Changes in [1.7.27-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.27-rc.1) (2021-05-04)
|
||||||
|
=========================================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.26...v1.7.27-rc.1)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.20.0-rc.1 and JS SDK 10.1.0-rc.1
|
||||||
|
* Translations update from Weblate
|
||||||
|
[\#17160](https://github.com/vector-im/element-web/pull/17160)
|
||||||
|
* Document option for obeying asserted identity
|
||||||
|
[\#17008](https://github.com/vector-im/element-web/pull/17008)
|
||||||
|
* Implement IPC call to Electron to set language
|
||||||
|
[\#17052](https://github.com/vector-im/element-web/pull/17052)
|
||||||
|
* Convert Vector skin react components to Typescript
|
||||||
|
[\#17061](https://github.com/vector-im/element-web/pull/17061)
|
||||||
|
* Add code quality review policy
|
||||||
|
[\#16980](https://github.com/vector-im/element-web/pull/16980)
|
||||||
|
* Register RecorderWorklet from react-sdk
|
||||||
|
[\#17013](https://github.com/vector-im/element-web/pull/17013)
|
||||||
|
* Preload Inter font to avoid FOIT on slow connections
|
||||||
|
[\#17039](https://github.com/vector-im/element-web/pull/17039)
|
||||||
|
* Disable `postcss-calc`'s noisy `warnWhenCannotResolve` option
|
||||||
|
[\#17041](https://github.com/vector-im/element-web/pull/17041)
|
||||||
|
|
||||||
|
Changes in [1.7.26](https://github.com/vector-im/element-web/releases/tag/v1.7.26) (2021-04-26)
|
||||||
|
===============================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.26-rc.1...v1.7.26)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.19.0 and JS SDK 10.0.0
|
||||||
|
|
||||||
|
Changes in [1.7.26-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.26-rc.1) (2021-04-21)
|
||||||
|
=========================================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.25...v1.7.26-rc.1)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.19.0-rc.1 and JS SDK 10.0.0-rc.1
|
||||||
|
* Translations update from Weblate
|
||||||
|
[\#17031](https://github.com/vector-im/element-web/pull/17031)
|
||||||
|
* Bump ssri from 6.0.1 to 6.0.2
|
||||||
|
[\#17010](https://github.com/vector-im/element-web/pull/17010)
|
||||||
|
* Fix `NODE_ENV` value for CI environments
|
||||||
|
[\#17003](https://github.com/vector-im/element-web/pull/17003)
|
||||||
|
* Use React production mode in CI builds
|
||||||
|
[\#16969](https://github.com/vector-im/element-web/pull/16969)
|
||||||
|
* Labs documentation for DND mode
|
||||||
|
[\#16962](https://github.com/vector-im/element-web/pull/16962)
|
||||||
|
* Rename blackboxing to new option ignore list
|
||||||
|
[\#16965](https://github.com/vector-im/element-web/pull/16965)
|
||||||
|
* Remove velocity-animate from lockfile
|
||||||
|
[\#16963](https://github.com/vector-im/element-web/pull/16963)
|
||||||
|
* Add mobile download link configuration
|
||||||
|
[\#16890](https://github.com/vector-im/element-web/pull/16890)
|
||||||
|
* Switch develop to not-staging Scalar by default
|
||||||
|
[\#16883](https://github.com/vector-im/element-web/pull/16883)
|
||||||
|
* Support a config option to skip login/welcome and go to SSO
|
||||||
|
[\#16880](https://github.com/vector-im/element-web/pull/16880)
|
||||||
|
|
||||||
|
Changes in [1.7.25](https://github.com/vector-im/element-web/releases/tag/v1.7.25) (2021-04-12)
|
||||||
|
===============================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.25-rc.1...v1.7.25)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.18.0 and JS SDK 9.11.0
|
||||||
|
|
||||||
|
Changes in [1.7.25-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.25-rc.1) (2021-04-07)
|
||||||
|
=========================================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.24...v1.7.25-rc.1)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.18.0-rc.1 and JS SDK 9.11.0-rc.1
|
||||||
|
* Translations update from Weblate
|
||||||
|
[\#16882](https://github.com/vector-im/element-web/pull/16882)
|
||||||
|
* Revert "Docker image: serve pre-compressed assets using gzip_static"
|
||||||
|
[\#16838](https://github.com/vector-im/element-web/pull/16838)
|
||||||
|
* Move native node modules documentation to element-desktop
|
||||||
|
[\#16814](https://github.com/vector-im/element-web/pull/16814)
|
||||||
|
* Add user settings for warn before exit
|
||||||
|
[\#16781](https://github.com/vector-im/element-web/pull/16781)
|
||||||
|
* Change ISSUE_TEMPLATE bold lines to proper headers
|
||||||
|
[\#16768](https://github.com/vector-im/element-web/pull/16768)
|
||||||
|
* Add example for deployment into Kubernetes
|
||||||
|
[\#16447](https://github.com/vector-im/element-web/pull/16447)
|
||||||
|
* Create bare-bones `PULL_REQUEST_TEMPLATE.md`
|
||||||
|
[\#16770](https://github.com/vector-im/element-web/pull/16770)
|
||||||
|
* Add webpack config and labs flag docs for voice messages
|
||||||
|
[\#16705](https://github.com/vector-im/element-web/pull/16705)
|
||||||
|
|
||||||
|
Changes in [1.7.24](https://github.com/vector-im/element-web/releases/tag/v1.7.24) (2021-03-29)
|
||||||
|
===============================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.24-rc.1...v1.7.24)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.17.0 and JS SDK 9.10.0
|
||||||
|
|
||||||
|
Changes in [1.7.24-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.24-rc.1) (2021-03-25)
|
||||||
|
=========================================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.23...v1.7.24-rc.1)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.17.0-rc.2 and JS SDK 9.10.0-rc.1
|
||||||
|
* Translations update from Weblate
|
||||||
|
[\#16766](https://github.com/vector-im/element-web/pull/16766)
|
||||||
|
* Docker image: serve pre-compressed assets using gzip_static
|
||||||
|
[\#16698](https://github.com/vector-im/element-web/pull/16698)
|
||||||
|
* Fix style lint issues
|
||||||
|
[\#16732](https://github.com/vector-im/element-web/pull/16732)
|
||||||
|
* Updated expected webpack output in setup guide
|
||||||
|
[\#16740](https://github.com/vector-im/element-web/pull/16740)
|
||||||
|
* Docs for `loginForWelcome`
|
||||||
|
[\#16468](https://github.com/vector-im/element-web/pull/16468)
|
||||||
|
* Disable rageshake persistence if no logs would be submitted
|
||||||
|
[\#16697](https://github.com/vector-im/element-web/pull/16697)
|
||||||
|
|
||||||
Changes in [1.7.23](https://github.com/vector-im/element-web/releases/tag/v1.7.23) (2021-03-15)
|
Changes in [1.7.23](https://github.com/vector-im/element-web/releases/tag/v1.7.23) (2021-03-15)
|
||||||
===============================================================================================
|
===============================================================================================
|
||||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.23-rc.1...v1.7.23)
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.23-rc.1...v1.7.23)
|
||||||
@@ -38,12 +245,12 @@ Changes in [1.7.22](https://github.com/vector-im/element-web/releases/tag/v1.7.2
|
|||||||
|
|
||||||
## Security notice
|
## Security notice
|
||||||
|
|
||||||
Element Web 1.7.22 fixes (by upgrading to matrix-react-sdk 3.15.0) a low
|
Element Web 1.7.22 fixes (by upgrading to matrix-react-sdk 3.15.0) a moderate
|
||||||
severity issue (CVE-2021-21320) where the user content sandbox can be abused to
|
severity issue (CVE-2021-21320) where the user content sandbox can be abused to
|
||||||
trick users into opening unexpected documents. The content is opened with a
|
trick users into opening unexpected documents after several user interactions.
|
||||||
`blob` origin that cannot access Matrix user data, so messages and secrets are
|
The content can be opened with a `blob` origin from the Matrix client, so it is
|
||||||
not at risk. Thanks to @keerok for responsibly disclosing this via Matrix's
|
possible for a malicious document to access user messages and secrets. Thanks to
|
||||||
Security Disclosure Policy.
|
@keerok for responsibly disclosing this via Matrix's Security Disclosure Policy.
|
||||||
|
|
||||||
## All changes
|
## All changes
|
||||||
|
|
||||||
|
|||||||
19
README.md
19
README.md
@@ -202,6 +202,12 @@ docker build -t \
|
|||||||
.
|
.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Running in Kubernetes
|
||||||
|
=====================
|
||||||
|
|
||||||
|
The provided element-web docker image can also be run from within a Kubernetes cluster.
|
||||||
|
See the [Kubernetes example](docs/kubernetes.md) for more details.
|
||||||
|
|
||||||
config.json
|
config.json
|
||||||
===========
|
===========
|
||||||
|
|
||||||
@@ -298,15 +304,10 @@ yarn start
|
|||||||
|
|
||||||
Wait a few seconds for the initial build to finish; you should see something like:
|
Wait a few seconds for the initial build to finish; you should see something like:
|
||||||
```
|
```
|
||||||
Hash: b0af76309dd56d7275c8
|
[element-js] <s> [webpack.Progress] 100%
|
||||||
Version: webpack 1.12.14
|
[element-js]
|
||||||
Time: 14533ms
|
[element-js] ℹ 「wdm」: 1840 modules
|
||||||
Asset Size Chunks Chunk Names
|
[element-js] ℹ 「wdm」: Compiled successfully.
|
||||||
bundle.js 4.2 MB 0 [emitted] main
|
|
||||||
bundle.css 91.5 kB 0 [emitted] main
|
|
||||||
bundle.js.map 5.29 MB 0 [emitted] main
|
|
||||||
bundle.css.map 116 kB 0 [emitted] main
|
|
||||||
+ 1013 hidden modules
|
|
||||||
```
|
```
|
||||||
Remember, the command will not terminate since it runs the web server
|
Remember, the command will not terminate since it runs the web server
|
||||||
and rebuilds source files when they change. This development server also
|
and rebuilds source files when they change. This development server also
|
||||||
|
|||||||
@@ -25,9 +25,7 @@
|
|||||||
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
||||||
"defaultCountryCode": "GB",
|
"defaultCountryCode": "GB",
|
||||||
"showLabsSettings": false,
|
"showLabsSettings": false,
|
||||||
"features": {
|
"features": { },
|
||||||
"feature_new_spinner": false
|
|
||||||
},
|
|
||||||
"default_federate": true,
|
"default_federate": true,
|
||||||
"default_theme": "light",
|
"default_theme": "light",
|
||||||
"roomDirectory": {
|
"roomDirectory": {
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ For a good example, see https://develop.element.io/config.json.
|
|||||||
`default_hs_url` is specified. When multiple sources are specified, it is unclear
|
`default_hs_url` is specified. When multiple sources are specified, it is unclear
|
||||||
which should take priority and therefore the application cannot continue.
|
which should take priority and therefore the application cannot continue.
|
||||||
* As of Element 1.4.0, identity servers are optional. See [Identity servers](#identity-servers) below.
|
* As of Element 1.4.0, identity servers are optional. See [Identity servers](#identity-servers) below.
|
||||||
|
1. `sso_immediate_redirect`: When `true`, Element will assume the default server supports SSO
|
||||||
|
and attempt to send the user there to continue (if they aren't already logged in). Default
|
||||||
|
`false`. Note that this disables all usage of the welcome page.
|
||||||
1. `features`: Lookup of optional features that may be force-enabled (`true`) or force-disabled (`false`).
|
1. `features`: Lookup of optional features that may be force-enabled (`true`) or force-disabled (`false`).
|
||||||
When features are not listed here, their defaults will be used, and users can turn them on/off if `showLabsSettings`
|
When features are not listed here, their defaults will be used, and users can turn them on/off if `showLabsSettings`
|
||||||
allows them to. The available optional experimental features vary from release to release and are
|
allows them to. The available optional experimental features vary from release to release and are
|
||||||
@@ -72,6 +75,9 @@ For a good example, see https://develop.element.io/config.json.
|
|||||||
1. `homeUrl`: Content shown on the inside of the app when a specific room is
|
1. `homeUrl`: Content shown on the inside of the app when a specific room is
|
||||||
not selected. By default, no home page is configured. If one is set, a
|
not selected. By default, no home page is configured. If one is set, a
|
||||||
button to access it will be shown in the top left menu.
|
button to access it will be shown in the top left menu.
|
||||||
|
1. `loginForWelcome`: Overrides `welcomeUrl` to make the welcome page be the
|
||||||
|
same page as the login page when `true`. This effectively disables the
|
||||||
|
welcome page.
|
||||||
1. `defaultCountryCode`: The ISO 3166 alpha2 country code to use when showing
|
1. `defaultCountryCode`: The ISO 3166 alpha2 country code to use when showing
|
||||||
country selectors, like the phone number input on the registration page.
|
country selectors, like the phone number input on the registration page.
|
||||||
Defaults to `GB` if the given code is unknown or not provided.
|
Defaults to `GB` if the given code is unknown or not provided.
|
||||||
@@ -110,12 +116,26 @@ For a good example, see https://develop.element.io/config.json.
|
|||||||
1. `logo`: An HTTP URL to the avatar for the desktop build. Should be 24x24, ideally
|
1. `logo`: An HTTP URL to the avatar for the desktop build. Should be 24x24, ideally
|
||||||
an SVG.
|
an SVG.
|
||||||
1. `url`: An HTTP URL for where to send the user to download the desktop build.
|
1. `url`: An HTTP URL for where to send the user to download the desktop build.
|
||||||
|
1. `mobileBuilds`: Used to alter promotional links to the mobile app. By default the
|
||||||
|
builds are considered available and accessible from https://element.io. This config
|
||||||
|
option is typically used in a context of encouraging the user to try the mobile app
|
||||||
|
instead of a mobile/incompatible browser.
|
||||||
|
1. `ios`: The URL to the iOS build. If `null`, it will be assumed to be not available.
|
||||||
|
If not set, the default element.io builds will be used.
|
||||||
|
1. `android`: The URL to the Android build. If `null`, it will be assumed to be not available.
|
||||||
|
If not set, the default element.io builds will be used.
|
||||||
|
1. `fdroid`: The URL to the FDroid build. If `null`, it will be assumed to be not available.
|
||||||
|
If not set, the default element.io builds will be used.
|
||||||
1. `mobileGuideToast`: Whether to show a toast a startup which nudges users on
|
1. `mobileGuideToast`: Whether to show a toast a startup which nudges users on
|
||||||
iOS and Android towards the native mobile apps. The toast redirects to the
|
iOS and Android towards the native mobile apps. The toast redirects to the
|
||||||
mobile guide if they accept. Defaults to false.
|
mobile guide if they accept. Defaults to false.
|
||||||
1. `audioStreamUrl`: If supplied, show an option on Jitsi widgets to stream
|
1. `audioStreamUrl`: If supplied, show an option on Jitsi widgets to stream
|
||||||
audio using Jitsi's live streaming feature. This option is experimental and
|
audio using Jitsi's live streaming feature. This option is experimental and
|
||||||
may be removed at any time without notice.
|
may be removed at any time without notice.
|
||||||
|
1. `voip`: Behaviour related to calls
|
||||||
|
1. `obeyAssertedIdentity`: If set, MSC3086 asserted identity messages sent
|
||||||
|
on VoIP calls will cause the call to appear in the room corresponding to the
|
||||||
|
asserted identity. This *must* only be set in trusted environments.
|
||||||
|
|
||||||
Note that `index.html` also has an og:image meta tag that is set to an image
|
Note that `index.html` also has an og:image meta tag that is set to an image
|
||||||
hosted on riot.im. This is the image used if links to your copy of Element
|
hosted on riot.im. This is the image used if links to your copy of Element
|
||||||
|
|||||||
187
docs/kubernetes.md
Normal file
187
docs/kubernetes.md
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
Running in Kubernetes
|
||||||
|
=====================
|
||||||
|
|
||||||
|
In case you would like to deploy element-web in a kubernetes cluster you can use
|
||||||
|
the provided Kubernetes example below as a starting point. Note that this example assumes the
|
||||||
|
Nginx ingress to be installed.
|
||||||
|
|
||||||
|
Note that the content of the required `config.json` is defined inside this yaml because it needs
|
||||||
|
to be put in your Kubernetes cluster as a `ConfigMap`.
|
||||||
|
|
||||||
|
So to use it you must create a file with this content as a starting point and modify it so it meets
|
||||||
|
the requirements of your environment.
|
||||||
|
|
||||||
|
Then you can deploy it to your cluster with something like `kubectl apply -f my-element-web.yaml`.
|
||||||
|
|
||||||
|
# This is an example of a POSSIBLE config for deploying a single element-web instance in Kubernetes
|
||||||
|
|
||||||
|
# Use the element-web namespace to put it all in.
|
||||||
|
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: element-web
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# The config.json file is to be put into Kubernetes as a config file in such a way that
|
||||||
|
# the element web instance can read it.
|
||||||
|
# The code below shows how this can be done with the config.sample.json content.
|
||||||
|
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: element-config
|
||||||
|
namespace: element-web
|
||||||
|
data:
|
||||||
|
config.json: |
|
||||||
|
{
|
||||||
|
"default_server_config": {
|
||||||
|
"m.homeserver": {
|
||||||
|
"base_url": "https://matrix-client.matrix.org",
|
||||||
|
"server_name": "matrix.org"
|
||||||
|
},
|
||||||
|
"m.identity_server": {
|
||||||
|
"base_url": "https://vector.im"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"disable_custom_urls": false,
|
||||||
|
"disable_guests": false,
|
||||||
|
"disable_login_language_selector": false,
|
||||||
|
"disable_3pid_login": false,
|
||||||
|
"brand": "Element",
|
||||||
|
"integrations_ui_url": "https://scalar.vector.im/",
|
||||||
|
"integrations_rest_url": "https://scalar.vector.im/api",
|
||||||
|
"integrations_widgets_urls": [
|
||||||
|
"https://scalar.vector.im/_matrix/integrations/v1",
|
||||||
|
"https://scalar.vector.im/api",
|
||||||
|
"https://scalar-staging.vector.im/_matrix/integrations/v1",
|
||||||
|
"https://scalar-staging.vector.im/api",
|
||||||
|
"https://scalar-staging.riot.im/scalar/api"
|
||||||
|
],
|
||||||
|
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
||||||
|
"defaultCountryCode": "GB",
|
||||||
|
"showLabsSettings": false,
|
||||||
|
"features": { },
|
||||||
|
"default_federate": true,
|
||||||
|
"default_theme": "light",
|
||||||
|
"roomDirectory": {
|
||||||
|
"servers": [
|
||||||
|
"matrix.org"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"piwik": {
|
||||||
|
"url": "https://piwik.riot.im/",
|
||||||
|
"whitelistedHSUrls": ["https://matrix.org"],
|
||||||
|
"whitelistedISUrls": ["https://vector.im", "https://matrix.org"],
|
||||||
|
"siteId": 1
|
||||||
|
},
|
||||||
|
"enable_presence_by_hs_url": {
|
||||||
|
"https://matrix.org": false,
|
||||||
|
"https://matrix-client.matrix.org": false
|
||||||
|
},
|
||||||
|
"settingDefaults": {
|
||||||
|
"breadcrumbs": true
|
||||||
|
},
|
||||||
|
"jitsi": {
|
||||||
|
"preferredDomain": "jitsi.riot.im"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# A deployment of the element-web for a single instance
|
||||||
|
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: element
|
||||||
|
namespace: element-web
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: element
|
||||||
|
replicas: 1
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: element
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: element
|
||||||
|
image: vectorim/element-web:latest
|
||||||
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /app/config.json
|
||||||
|
subPath: config.json
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
name: element
|
||||||
|
protocol: TCP
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: element
|
||||||
|
initialDelaySeconds: 2
|
||||||
|
periodSeconds: 3
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: element
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 10
|
||||||
|
volumes:
|
||||||
|
- name: config-volume
|
||||||
|
configMap:
|
||||||
|
name: element-config
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Wrap it all in a Service
|
||||||
|
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: element
|
||||||
|
namespace: element-web
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: element
|
||||||
|
ports:
|
||||||
|
- name: default
|
||||||
|
protocol: TCP
|
||||||
|
port: 80
|
||||||
|
targetPort: 80
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# An ingress definition to expose the service via a hostname
|
||||||
|
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: element
|
||||||
|
namespace: element-web
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: nginx
|
||||||
|
nginx.ingress.kubernetes.io/configuration-snippet: |
|
||||||
|
add_header X-Frame-Options SAMEORIGIN;
|
||||||
|
add_header X-Content-Type-Options nosniff;
|
||||||
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
|
add_header Content-Security-Policy "frame-ancestors 'none'";
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: element.example.nl
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: /
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: element
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
17
docs/labs.md
17
docs/labs.md
@@ -19,10 +19,6 @@ Still in heavy development.
|
|||||||
|
|
||||||
Enables rendering of LaTeX maths in messages using [KaTeX](https://katex.org/). LaTeX between single dollar-signs is interpreted as inline maths and double dollar-signs as display maths (i.e. centred on its own line).
|
Enables rendering of LaTeX maths in messages using [KaTeX](https://katex.org/). LaTeX between single dollar-signs is interpreted as inline maths and double dollar-signs as display maths (i.e. centred on its own line).
|
||||||
|
|
||||||
## New spinner design (`feature_new_spinner`)
|
|
||||||
|
|
||||||
Replaces the old spinner image with a new, svg-based one featuring a sleeker design.
|
|
||||||
|
|
||||||
## Message pinning (`feature_pinning`)
|
## Message pinning (`feature_pinning`)
|
||||||
|
|
||||||
Allows you to pin messages in the room. To pin a message, use the 3 dots to the right of the message
|
Allows you to pin messages in the room. To pin a message, use the 3 dots to the right of the message
|
||||||
@@ -123,3 +119,16 @@ or feedback for this functionality at this time.
|
|||||||
|
|
||||||
Allows users to receive encrypted messages by creating a device that is stored
|
Allows users to receive encrypted messages by creating a device that is stored
|
||||||
encrypted on the server, as described in [MSC2697](https://github.com/matrix-org/matrix-doc/pull/2697).
|
encrypted on the server, as described in [MSC2697](https://github.com/matrix-org/matrix-doc/pull/2697).
|
||||||
|
|
||||||
|
## Voice messages (`feature_voice_messages`)
|
||||||
|
|
||||||
|
Offers a way to send more time-sensitive information through the power of voice. When enabled, use the microphone
|
||||||
|
icon on the lower right to start recording your message. You will have a chance to review after you're done recording,
|
||||||
|
and if it sounds fine then send it off for the rest of the room to hear.
|
||||||
|
|
||||||
|
Voice messages are automatically downloaded to ensure they are ready for playback as soon as possible.
|
||||||
|
|
||||||
|
## Do not disturb (`feature_dnd`)
|
||||||
|
|
||||||
|
Enables UI for turning on "do not disturb" mode for the current device. When DND mode is engaged, popups
|
||||||
|
and notification noises are suppressed. Not perfect, but can help reduce noise.
|
||||||
|
|||||||
@@ -1,60 +1,3 @@
|
|||||||
# Native Node Modules
|
# Native Node Modules
|
||||||
|
|
||||||
For some features, the desktop version of Element can make use of native Node
|
This documentation moved to the [`element-desktop`](https://github.com/vector-im/element-desktop/blob/develop/docs/native-node-modules.md) repository.
|
||||||
modules. These allow Riot to integrate with the desktop in ways that a browser
|
|
||||||
cannot.
|
|
||||||
|
|
||||||
While native modules enable powerful new features, they must be complied for
|
|
||||||
each operating system. For official Element releases, we will always build these
|
|
||||||
modules from source to ensure we can trust the compiled output. In the future,
|
|
||||||
we may offer a pre-compiled path for those who want to use these features in a
|
|
||||||
custom build of Element without installing the various build tools required.
|
|
||||||
|
|
||||||
Do note that compiling a module for a particular operating system
|
|
||||||
(Linux/macOS/Windows) will need to be done on that operating system.
|
|
||||||
Cross-compiling from a host OS for a different target OS may be possible, but
|
|
||||||
we don't support this flow with Element dependencies at this time.
|
|
||||||
|
|
||||||
At the moment, we need to make some changes to the Element release process before
|
|
||||||
we can support native Node modules at release time, so these features are
|
|
||||||
currently disabled by default until that is resolved. The following sections
|
|
||||||
explain the manual steps you can use with a custom build of Element to enable
|
|
||||||
these features if you'd like to try them out.
|
|
||||||
|
|
||||||
## Adding Seshat for search in E2E encrypted rooms
|
|
||||||
|
|
||||||
Seshat is a native Node module that adds support for local event indexing and
|
|
||||||
full text search in E2E encrypted rooms.
|
|
||||||
|
|
||||||
Since Seshat is written in Rust, the Rust compiler and related tools need to be
|
|
||||||
installed before installing Seshat itself. To install Rust please consult the
|
|
||||||
official Rust [documentation](https://www.rust-lang.org/tools/install).
|
|
||||||
|
|
||||||
Seshat also depends on the SQLCipher library to store its data in encrypted form
|
|
||||||
on disk. You'll need to install it via your OS package manager.
|
|
||||||
|
|
||||||
After installing the Rust compiler and SQLCipher, Seshat support can be added
|
|
||||||
using yarn inside the `electron_app/` directory:
|
|
||||||
|
|
||||||
yarn add matrix-seshat
|
|
||||||
|
|
||||||
You will have to rebuild the native libraries against electron's version of
|
|
||||||
of node rather than your system node, using the `electron-build-env` tool.
|
|
||||||
This is also needed to when pulling in changes to Seshat using `yarn link`.
|
|
||||||
Again from the `electron_app/` directory:
|
|
||||||
|
|
||||||
yarn add electron-build-env
|
|
||||||
|
|
||||||
Recompiling Seshat itself can be done like so:
|
|
||||||
|
|
||||||
yarn run electron-build-env -- --electron 6.1.1 -- neon build matrix-seshat --release
|
|
||||||
|
|
||||||
Please make sure to include all the `--` as well as the `--release` command line
|
|
||||||
switch at the end. Modify your electron version accordingly depending on the
|
|
||||||
version that is installed on your system.
|
|
||||||
|
|
||||||
After this is done the Electron version of Element can be run from the main folder
|
|
||||||
as usual using:
|
|
||||||
|
|
||||||
yarn electron
|
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,43 @@ When reviewing code, here are some things we look for and also things we avoid:
|
|||||||
* Assign issues only when in progress to indicate to others what can be picked
|
* Assign issues only when in progress to indicate to others what can be picked
|
||||||
up
|
up
|
||||||
|
|
||||||
|
## Code Quality
|
||||||
|
|
||||||
|
In the past, we have occasionally written different kinds of tests for
|
||||||
|
Element and the SDKs, but it hasn't been a consistent focus. Going forward, we'd
|
||||||
|
like to change that.
|
||||||
|
|
||||||
|
* For new features, code reviewers will expect some form of automated testing to
|
||||||
|
be included by default
|
||||||
|
* For bug fixes, regression tests are of course great to have, but we don't want
|
||||||
|
to block fixes on this, so we won't require them at this time
|
||||||
|
|
||||||
|
The above policy is not a strict rule, but instead it's meant to be a
|
||||||
|
conversation between the author and reviewer. As an author, try to think about
|
||||||
|
writing a test when making your next change. As a reviewer, try to think about
|
||||||
|
how you might test the area of code you are reviewing. If the reviewer agrees
|
||||||
|
it would be quite difficult to test some new feature, then it's okay for them to
|
||||||
|
accept the change without tests for now, but we'd eventually like to be more
|
||||||
|
strict about this further down the road.
|
||||||
|
|
||||||
|
If you do spot areas that are quite hard to test today, please let us know in
|
||||||
|
[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org). We can
|
||||||
|
work on improving the app architecture and testing helpers so that future tests
|
||||||
|
are easier for everyone to write, but we won't know which parts are difficult
|
||||||
|
unless people shout when stumbling through them.
|
||||||
|
|
||||||
|
We recognise that this testing policy will slow things down a bit, but overall
|
||||||
|
it should encourage better long-term health of the app and give everyone more
|
||||||
|
confidence when making changes as coverage increases over time.
|
||||||
|
|
||||||
|
For changes guarded by a feature flag, we currently lean towards prioritising
|
||||||
|
our ability to evolve quickly using such flags and thus we will not currently
|
||||||
|
require tests to appear at the same time as the initial landing of features
|
||||||
|
guarded by flags, as long as (for new flagged features going forward) the
|
||||||
|
feature author understands that they are effectively deferring part of their
|
||||||
|
work (adding tests) until later and tests are expected to appear before the
|
||||||
|
feature can be enabled by default.
|
||||||
|
|
||||||
## Design and Product Review
|
## Design and Product Review
|
||||||
|
|
||||||
We want to ensure that all changes to Element fit with our design and product
|
We want to ensure that all changes to Element fit with our design and product
|
||||||
@@ -79,5 +116,5 @@ easily.
|
|||||||
|
|
||||||
Before starting work on a feature, it's best to ensure your plan aligns well
|
Before starting work on a feature, it's best to ensure your plan aligns well
|
||||||
with our vision for Element. Please chat with the team in
|
with our vision for Element. Please chat with the team in
|
||||||
[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) before you
|
[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) before
|
||||||
start so we can ensure it's something we'd be willing to merge.
|
you start so we can ensure it's something we'd be willing to merge.
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"default_server_name": "matrix.org",
|
"default_server_name": "matrix.org",
|
||||||
"brand": "Element",
|
"brand": "Element",
|
||||||
"integrations_ui_url": "https://scalar-staging.vector.im/",
|
"integrations_ui_url": "https://scalar.vector.im/",
|
||||||
"integrations_rest_url": "https://scalar-staging.vector.im/api",
|
"integrations_rest_url": "https://scalar.vector.im/api",
|
||||||
"integrations_widgets_urls": [
|
"integrations_widgets_urls": [
|
||||||
"https://scalar.vector.im/_matrix/integrations/v1",
|
"https://scalar.vector.im/_matrix/integrations/v1",
|
||||||
"https://scalar.vector.im/api",
|
"https://scalar.vector.im/api",
|
||||||
|
|||||||
30
package.json
30
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "element-web",
|
"name": "element-web",
|
||||||
"version": "1.7.23",
|
"version": "1.7.30",
|
||||||
"description": "A feature-rich client for Matrix.org",
|
"description": "A feature-rich client for Matrix.org",
|
||||||
"author": "New Vector Ltd.",
|
"author": "New Vector Ltd.",
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"i18n": "matrix-gen-i18n",
|
"i18n": "matrix-gen-i18n",
|
||||||
"prunei18n": "matrix-prune-i18n",
|
"prunei18n": "matrix-prune-i18n",
|
||||||
"diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && yarn i18n && node scripts/compare-file.js src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json",
|
"diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && matrix-gen-i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json",
|
||||||
"reskindex": "reskindex -h src/header",
|
"reskindex": "reskindex -h src/header",
|
||||||
"reskindex:watch": "reskindex -h src/header -w",
|
"reskindex:watch": "reskindex -h src/header -w",
|
||||||
"reskindex:watch-react": "node scripts/yarn-sub.js matrix-react-sdk reskindex:watch",
|
"reskindex:watch-react": "node scripts/yarn-sub.js matrix-react-sdk reskindex:watch",
|
||||||
@@ -44,8 +44,9 @@
|
|||||||
"build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json",
|
"build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json",
|
||||||
"dist": "scripts/package.sh",
|
"dist": "scripts/package.sh",
|
||||||
"start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"",
|
"start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"",
|
||||||
|
"start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js --https\"",
|
||||||
"start:res": "yarn build:jitsi && node scripts/copy-res.js -w",
|
"start:res": "yarn build:jitsi && node scripts/copy-res.js -w",
|
||||||
"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": "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 --disable-host-check",
|
||||||
"lint": "yarn lint:types && yarn lint:js && yarn lint:style",
|
"lint": "yarn lint:types && yarn lint:js && yarn lint:style",
|
||||||
"lint:js": "eslint src",
|
"lint:js": "eslint src",
|
||||||
"lint:types": "tsc --noEmit --jsx react",
|
"lint:types": "tsc --noEmit --jsx react",
|
||||||
@@ -53,20 +54,20 @@
|
|||||||
"test": "jest"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.3.tgz",
|
||||||
"browser-request": "^0.3.3",
|
"browser-request": "^0.3.3",
|
||||||
"gfm.css": "^1.1.2",
|
"gfm.css": "^1.1.2",
|
||||||
"highlight.js": "^10.5.0",
|
"highlight.js": "^10.5.0",
|
||||||
"jsrsasign": "^10.1.5",
|
"jsrsasign": "^10.1.5",
|
||||||
"katex": "^0.12.0",
|
"katex": "^0.12.0",
|
||||||
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
|
"matrix-js-sdk": "11.2.0",
|
||||||
"matrix-react-sdk": "github:matrix-org/matrix-react-sdk#develop",
|
"matrix-react-sdk": "3.23.0",
|
||||||
"matrix-widget-api": "^0.1.0-beta.13",
|
"matrix-widget-api": "^0.1.0-beta.14",
|
||||||
"olm": "https://packages.matrix.org/npm/olm/olm-3.2.1.tgz",
|
|
||||||
"prop-types": "^15.7.2",
|
"prop-types": "^15.7.2",
|
||||||
"react": "^16.14.0",
|
"react": "^16.14.0",
|
||||||
"react-dom": "^16.14.0",
|
"react-dom": "^16.14.0",
|
||||||
"sanitize-html": "github:apostrophecms/sanitize-html#3c7f93f2058f696f5359e3e58d464161647226db",
|
"sanitize-html": "^2.3.2",
|
||||||
"ua-parser-js": "^0.7.23"
|
"ua-parser-js": "^0.7.24"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.12.10",
|
"@babel/core": "^7.12.10",
|
||||||
@@ -86,12 +87,13 @@
|
|||||||
"@babel/preset-typescript": "^7.12.7",
|
"@babel/preset-typescript": "^7.12.7",
|
||||||
"@babel/register": "^7.12.10",
|
"@babel/register": "^7.12.10",
|
||||||
"@babel/runtime": "^7.12.5",
|
"@babel/runtime": "^7.12.5",
|
||||||
|
"@principalstudio/html-webpack-inject-preload": "^1.2.7",
|
||||||
"@types/flux": "^3.1.9",
|
"@types/flux": "^3.1.9",
|
||||||
"@types/modernizr": "^3.5.3",
|
"@types/modernizr": "^3.5.3",
|
||||||
"@types/node": "^14.14.22",
|
"@types/node": "^14.14.22",
|
||||||
"@types/react": "^16.9",
|
"@types/react": "^16.9",
|
||||||
"@types/react-dom": "^16.9.10",
|
"@types/react-dom": "^16.9.10",
|
||||||
"@types/sanitize-html": "^1.27.1",
|
"@types/sanitize-html": "^2.3.1",
|
||||||
"autoprefixer": "^9.8.6",
|
"autoprefixer": "^9.8.6",
|
||||||
"babel-eslint": "^10.1.0",
|
"babel-eslint": "^10.1.0",
|
||||||
"babel-jest": "^26.6.3",
|
"babel-jest": "^26.6.3",
|
||||||
@@ -111,13 +113,14 @@
|
|||||||
"fake-indexeddb": "^3.1.2",
|
"fake-indexeddb": "^3.1.2",
|
||||||
"file-loader": "^5.1.0",
|
"file-loader": "^5.1.0",
|
||||||
"fs-extra": "^0.30.0",
|
"fs-extra": "^0.30.0",
|
||||||
"html-webpack-plugin": "^3.2.0",
|
"html-webpack-plugin": "^4.5.2",
|
||||||
"jest": "^26.6.3",
|
"jest": "^26.6.3",
|
||||||
"jest-environment-jsdom-sixteen": "^1.0.3",
|
"jest-environment-jsdom-sixteen": "^1.0.3",
|
||||||
"json-loader": "^0.5.7",
|
"json-loader": "^0.5.7",
|
||||||
"loader-utils": "^1.4.0",
|
"loader-utils": "^1.4.0",
|
||||||
"matrix-mock-request": "^1.2.3",
|
"matrix-mock-request": "^1.2.3",
|
||||||
"matrix-react-test-utils": "^0.2.2",
|
"matrix-react-test-utils": "^0.2.2",
|
||||||
|
"matrix-web-i18n": "github:matrix-org/matrix-web-i18n",
|
||||||
"mini-css-extract-plugin": "^0.12.0",
|
"mini-css-extract-plugin": "^0.12.0",
|
||||||
"minimist": "^1.2.5",
|
"minimist": "^1.2.5",
|
||||||
"mkdirp": "^1.0.4",
|
"mkdirp": "^1.0.4",
|
||||||
@@ -165,7 +168,10 @@
|
|||||||
"^react$": "<rootDir>/node_modules/react",
|
"^react$": "<rootDir>/node_modules/react",
|
||||||
"^react-dom$": "<rootDir>/node_modules/react-dom",
|
"^react-dom$": "<rootDir>/node_modules/react-dom",
|
||||||
"^matrix-js-sdk$": "<rootDir>/node_modules/matrix-js-sdk/src",
|
"^matrix-js-sdk$": "<rootDir>/node_modules/matrix-js-sdk/src",
|
||||||
"^matrix-react-sdk$": "<rootDir>/node_modules/matrix-react-sdk/src"
|
"^matrix-react-sdk$": "<rootDir>/node_modules/matrix-react-sdk/src",
|
||||||
|
"decoderWorker\\.min\\.js": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
||||||
|
"decoderWorker\\.min\\.wasm": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
||||||
|
"waveWorker\\.min\\.js": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js"
|
||||||
},
|
},
|
||||||
"transformIgnorePatterns": [
|
"transformIgnorePatterns": [
|
||||||
"/node_modules/(?!matrix-js-sdk).+$",
|
"/node_modules/(?!matrix-js-sdk).+$",
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ limitations under the License.
|
|||||||
background: -moz-linear-gradient(top, #c5e0f7 0%, #ffffff 100%);
|
background: -moz-linear-gradient(top, #c5e0f7 0%, #ffffff 100%);
|
||||||
background: -webkit-linear-gradient(top, #c5e0f7 0%, #ffffff 100%);
|
background: -webkit-linear-gradient(top, #c5e0f7 0%, #ffffff 100%);
|
||||||
background: linear-gradient(to bottom, #c5e0f7 0%, #ffffff 100%);
|
background: linear-gradient(to bottom, #c5e0f7 0%, #ffffff 100%);
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#c5e0f7', endColorstr='#ffffff',GradientType=0 );
|
filter: progid:dximagetransform.microsoft.gradient(startColorstr='#c5e0f7', endColorstr='#ffffff', GradientType=0);
|
||||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
@@ -41,7 +41,7 @@ limitations under the License.
|
|||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
margin-right: 4px;
|
margin-right: 4px;
|
||||||
min-width: 80px;
|
min-width: 80px;
|
||||||
background-color: #03B381;
|
background-color: #03b381;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 12px 22px;
|
padding: 12px 22px;
|
||||||
@@ -54,7 +54,7 @@ limitations under the License.
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mx_HomePage_header {
|
.mx_HomePage_header {
|
||||||
color: #2E2F32;
|
color: #2e2f32;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -95,7 +95,7 @@ limitations under the License.
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mx_FooterLink {
|
.mx_FooterLink {
|
||||||
color: #368BD6;
|
color: #368bd6;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,4 +14,4 @@ JSSDK_SHA=$(cd node_modules/matrix-js-sdk; git rev-parse --short=12 HEAD)
|
|||||||
|
|
||||||
VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop
|
VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop
|
||||||
|
|
||||||
CI_PACKAGE=true DIST_VERSION=$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA scripts/package.sh -d
|
CI_PACKAGE=true DIST_VERSION=$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA scripts/package.sh
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
const fs = require("fs");
|
|
||||||
|
|
||||||
if (process.argv.length < 4) throw new Error("Missing source and target file arguments");
|
|
||||||
|
|
||||||
const sourceFile = fs.readFileSync(process.argv[2], 'utf8');
|
|
||||||
const targetFile = fs.readFileSync(process.argv[3], 'utf8');
|
|
||||||
|
|
||||||
if (sourceFile !== targetFile) {
|
|
||||||
throw new Error("Files do not match");
|
|
||||||
}
|
|
||||||
@@ -69,7 +69,7 @@ const COPY_LIST = [
|
|||||||
["res/vector-icons/**", "webapp/vector-icons"],
|
["res/vector-icons/**", "webapp/vector-icons"],
|
||||||
["res/decoder-ring/**", "webapp/decoder-ring"],
|
["res/decoder-ring/**", "webapp/decoder-ring"],
|
||||||
["node_modules/matrix-react-sdk/res/media/**", "webapp/media"],
|
["node_modules/matrix-react-sdk/res/media/**", "webapp/media"],
|
||||||
["node_modules/olm/olm_legacy.js", "webapp", { directwatch: 1 }],
|
["node_modules/@matrix-org/olm/olm_legacy.js", "webapp", { directwatch: 1 }],
|
||||||
["./config.json", "webapp", { directwatch: 1 }],
|
["./config.json", "webapp", { directwatch: 1 }],
|
||||||
["contribute.json", "webapp"],
|
["contribute.json", "webapp"],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -27,7 +27,55 @@ interface IProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
||||||
const brand = SdkConfig.get().brand;
|
const {brand, mobileBuilds} = SdkConfig.get();
|
||||||
|
|
||||||
|
let ios = null;
|
||||||
|
const iosCustomUrl = mobileBuilds?.ios;
|
||||||
|
if (iosCustomUrl !== null) { // could be undefined or a string
|
||||||
|
ios = <>
|
||||||
|
<p><strong>iOS</strong> (iPhone or iPad)</p>
|
||||||
|
<a
|
||||||
|
href={iosCustomUrl || "https://apps.apple.com/app/vector/id1083446067"}
|
||||||
|
target="_blank"
|
||||||
|
className="mx_ClearDecoration"
|
||||||
|
>
|
||||||
|
<img height="48" src="themes/element/img/download/apple.svg" alt="Apple App Store" />
|
||||||
|
</a>
|
||||||
|
</>;
|
||||||
|
}
|
||||||
|
|
||||||
|
let android = [<p className="mx_Spacer" key="header"><strong>Android</strong></p>];
|
||||||
|
const andCustomUrl = mobileBuilds?.android;
|
||||||
|
const fdroidCustomUrl = mobileBuilds?.fdroid;
|
||||||
|
if (andCustomUrl !== null) { // undefined or string
|
||||||
|
android.push(<a
|
||||||
|
href={andCustomUrl || "https://play.google.com/store/apps/details?id=im.vector.app"}
|
||||||
|
target="_blank"
|
||||||
|
className="mx_ClearDecoration"
|
||||||
|
key="android"
|
||||||
|
>
|
||||||
|
<img height="48" src="themes/element/img/download/google.svg" alt="Google Play Store" />
|
||||||
|
</a>);
|
||||||
|
}
|
||||||
|
if (fdroidCustomUrl !== null) { // undefined or string
|
||||||
|
android.push(<a
|
||||||
|
href={fdroidCustomUrl || "https://f-droid.org/repository/browse/?fdid=im.vector.app"}
|
||||||
|
target="_blank"
|
||||||
|
className="mx_ClearDecoration"
|
||||||
|
key="fdroid"
|
||||||
|
>
|
||||||
|
<img height="48" src="themes/element/img/download/fdroid.svg" alt="F-Droid" />
|
||||||
|
</a>);
|
||||||
|
}
|
||||||
|
if (android.length === 1) { // just a header, meaning no links
|
||||||
|
android = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
let mobileHeader = <h2 id="step2_heading">{_t("Use %(brand)s on mobile", {brand})}</h2>;
|
||||||
|
if (!android.length && !ios) {
|
||||||
|
mobileHeader = null;
|
||||||
|
}
|
||||||
|
|
||||||
return <div className="mx_ErrorView">
|
return <div className="mx_ErrorView">
|
||||||
<div className="mx_ErrorView_container">
|
<div className="mx_ErrorView_container">
|
||||||
<div className="mx_HomePage_header">
|
<div className="mx_HomePage_header">
|
||||||
@@ -76,30 +124,9 @@ const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
|||||||
<div className="mx_HomePage_col">
|
<div className="mx_HomePage_col">
|
||||||
<div className="mx_HomePage_row">
|
<div className="mx_HomePage_row">
|
||||||
<div>
|
<div>
|
||||||
<h2 id="step2_heading">Use Element on mobile</h2>
|
{mobileHeader}
|
||||||
<p><strong>iOS</strong> (iPhone or iPad)</p>
|
{ios}
|
||||||
<a
|
{android}
|
||||||
href="https://apps.apple.com/app/vector/id1083446067"
|
|
||||||
target="_blank"
|
|
||||||
className="mx_ClearDecoration"
|
|
||||||
>
|
|
||||||
<img height="48" src="themes/element/img/download/apple.svg" alt="Apple App Store" />
|
|
||||||
</a>
|
|
||||||
<p className="mx_Spacer"><strong>Android</strong></p>
|
|
||||||
<a
|
|
||||||
href="https://play.google.com/store/apps/details?id=im.vector.app"
|
|
||||||
target="_blank"
|
|
||||||
className="mx_ClearDecoration"
|
|
||||||
>
|
|
||||||
<img height="48" src="themes/element/img/download/google.svg" alt="Google Play Store" />
|
|
||||||
</a>
|
|
||||||
<a
|
|
||||||
href="https://f-droid.org/repository/browse/?fdid=im.vector.app"
|
|
||||||
target="_blank"
|
|
||||||
className="mx_ClearDecoration"
|
|
||||||
>
|
|
||||||
<img height="48" src="themes/element/img/download/fdroid.svg" alt="F-Droid" />
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export default class VectorEmbeddedPage extends EmbeddedPage {
|
|||||||
static replaces = 'EmbeddedPage';
|
static replaces = 'EmbeddedPage';
|
||||||
|
|
||||||
// we're overriding the base component here, for Element-specific tweaks
|
// we're overriding the base component here, for Element-specific tweaks
|
||||||
translate(s) {
|
translate(s: string) {
|
||||||
s = sanitizeHtml(_t(s));
|
s = sanitizeHtml(_t(s));
|
||||||
// ugly fix for https://github.com/vector-im/element-web/issues/4243
|
// ugly fix for https://github.com/vector-im/element-web/issues/4243
|
||||||
// eslint-disable-next-line max-len
|
// eslint-disable-next-line max-len
|
||||||
@@ -16,16 +16,11 @@ limitations under the License.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import SdkConfig from 'matrix-react-sdk/src/SdkConfig';
|
import SdkConfig from 'matrix-react-sdk/src/SdkConfig';
|
||||||
|
|
||||||
export default class VectorAuthHeaderLogo extends React.PureComponent {
|
export default class VectorAuthHeaderLogo extends React.PureComponent {
|
||||||
static replaces = 'AuthHeaderLogo'
|
static replaces = 'AuthHeaderLogo'
|
||||||
|
|
||||||
static propTypes = {
|
|
||||||
icon: PropTypes.string,
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const brandingConfig = SdkConfig.get().branding;
|
const brandingConfig = SdkConfig.get().branding;
|
||||||
let logoUrl = "themes/element/img/logos/element-logo.svg";
|
let logoUrl = "themes/element/img/logos/element-logo.svg";
|
||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import React from 'react';
|
import React, { CSSProperties } from 'react';
|
||||||
import * as sdk from 'matrix-react-sdk/src/index';
|
import * as sdk from 'matrix-react-sdk/src/index';
|
||||||
import SdkConfig from 'matrix-react-sdk/src/SdkConfig';
|
import SdkConfig from 'matrix-react-sdk/src/SdkConfig';
|
||||||
|
|
||||||
@@ -48,12 +48,12 @@ export default class VectorAuthPage extends React.PureComponent {
|
|||||||
background: `center/cover fixed url(${VectorAuthPage.getWelcomeBackgroundUrl()})`,
|
background: `center/cover fixed url(${VectorAuthPage.getWelcomeBackgroundUrl()})`,
|
||||||
};
|
};
|
||||||
|
|
||||||
const modalStyle = {
|
const modalStyle: CSSProperties = {
|
||||||
position: 'relative',
|
position: 'relative',
|
||||||
background: 'initial',
|
background: 'initial',
|
||||||
};
|
};
|
||||||
|
|
||||||
const blurStyle = {
|
const blurStyle: CSSProperties = {
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
top: 0,
|
top: 0,
|
||||||
right: 0,
|
right: 0,
|
||||||
@@ -63,7 +63,7 @@ export default class VectorAuthPage extends React.PureComponent {
|
|||||||
background: pageStyle.background,
|
background: pageStyle.background,
|
||||||
};
|
};
|
||||||
|
|
||||||
const modalContentStyle = {
|
const modalContentStyle: CSSProperties = {
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
zIndex: 1,
|
zIndex: 1,
|
||||||
background: 'rgba(255, 255, 255, 0.59)',
|
background: 'rgba(255, 255, 255, 0.59)',
|
||||||
@@ -32,5 +32,6 @@
|
|||||||
"Open": "Отвори",
|
"Open": "Отвори",
|
||||||
"Your browser can't run %(brand)s": "Браузърът ви не може да изпълни %(brand)s",
|
"Your browser can't run %(brand)s": "Браузърът ви не може да изпълни %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s използва модерни функции на браузъра, които не се поддържат от Вашия.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s използва модерни функции на браузъра, които не се поддържат от Вашия.",
|
||||||
"Powered by Matrix": "Базирано на Matrix"
|
"Powered by Matrix": "Базирано на Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Използвайте %(brand)s на мобилен телефон"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"Welcome to Element": "Vítá vás Element",
|
"Welcome to Element": "Vítá vás Element",
|
||||||
"Unknown device": "Neznámé zařízení",
|
"Unknown device": "Neznámé zařízení",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "Pro uskutečnění hovoru se sdílením obrazovky musíte používat HTTPS.",
|
"You need to be using HTTPS to place a screen-sharing call.": "Pro uskutečnění hovoru se sdílením obrazovky musíte používat HTTPS.",
|
||||||
"Dismiss": "Zahodit",
|
"Dismiss": "Zavřít",
|
||||||
"powered by Matrix": "používá protokol Matrix",
|
"powered by Matrix": "používá protokol Matrix",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráce na platformě [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráce na platformě [matrix]",
|
||||||
"Sign In": "Přihlásit se",
|
"Sign In": "Přihlásit se",
|
||||||
|
|||||||
@@ -2,35 +2,36 @@
|
|||||||
"powered by Matrix": "betrieben mit Matrix",
|
"powered by Matrix": "betrieben mit Matrix",
|
||||||
"Dismiss": "Ausblenden",
|
"Dismiss": "Ausblenden",
|
||||||
"Unknown device": "Unbekanntes Gerät",
|
"Unknown device": "Unbekanntes Gerät",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "Du musst HTTPS nutzen um einen Anruf mit Bildschirmfreigabe durchzuführen.",
|
"You need to be using HTTPS to place a screen-sharing call.": "Du musst HTTPS nutzen, um einen Anruf mit Bildschirmfreigabe durchzuführen.",
|
||||||
"Welcome to Element": "Willkommen bei Element",
|
"Welcome to Element": "Willkommen bei Element",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung mittels [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung basierend auf [matrix]",
|
||||||
"Sign In": "Anmelden",
|
"Sign In": "Anmelden",
|
||||||
"Create Account": "Account erstellen",
|
"Create Account": "Konto erstellen",
|
||||||
"Explore rooms": "Räume erkunden",
|
"Explore rooms": "Räume erkunden",
|
||||||
"Unexpected error preparing the app. See console for details.": "Unerwarteter Fehler bei der Vorbereitung der App. Siehe in die Konsole für mehr Details.",
|
"Unexpected error preparing the app. See console for details.": "Unerwarteter Fehler bei der Vorbereitung der App. Siehe in die Konsole für mehr Details.",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ungültige Konfiguration: Es kann nur eine der Optionen default_server_config, default_server_name oder default_hs_url angegeben werden.",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ungültige Konfiguration: Es kann nur eine der Optionen default_server_config, default_server_name oder default_hs_url angegeben werden.",
|
||||||
"Invalid configuration: no default server specified.": "Ungültige Konfiguration: Es wurde kein Standardserver angegeben.",
|
"Invalid configuration: no default server specified.": "Ungültige Konfiguration: Es wurde kein Standardserver angegeben.",
|
||||||
"The message from the parser is: %(message)s": "Die Nachricht des Parsers ist: %(message)s",
|
"The message from the parser is: %(message)s": "Die Nachricht des Parsers ist: %(message)s",
|
||||||
"Invalid JSON": "Ungültiges JSON",
|
"Invalid JSON": "Ungültiges JSON",
|
||||||
"Go to your browser to complete Sign In": "Gehe in deinen Browser, um die Anmeldung abzuschließen",
|
"Go to your browser to complete Sign In": "Gehe zu deinem Browser, um die Anmeldung abzuschließen",
|
||||||
"Open user settings": "Öffne Nutzer-Einstellungen",
|
"Open user settings": "Benutzereinstellungen öffnen",
|
||||||
"Unable to load config file: please refresh the page to try again.": "Konfigurationsdatei kann nicht geladen werden: Bitte aktualisiere die Seite, um es erneut zu versuchen.",
|
"Unable to load config file: please refresh the page to try again.": "Konfigurationsdatei kann nicht geladen werden: Bitte aktualisiere die Seite, um es erneut zu versuchen.",
|
||||||
"Missing indexeddb worker script!": "Fehlendes indexeddb Worker-Skript!",
|
"Missing indexeddb worker script!": "Fehlendes indexeddb-Arbeitsskript!",
|
||||||
"Previous/next recently visited room or community": "Vorheriger/nächster kürzlich besuchter Raum oder Community",
|
"Previous/next recently visited room or community": "Vorheriger/nächster kürzlich besuchter Raum oder Community",
|
||||||
"Unsupported browser": "Nicht unterstützter Browser",
|
"Unsupported browser": "Nicht unterstützter Browser",
|
||||||
"Go to element.io": "Gehe zu element.io",
|
"Go to element.io": "Gehe zu element.io",
|
||||||
"Failed to start": "Start fehlgeschlagen",
|
"Failed to start": "Start fehlgeschlagen",
|
||||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
|
||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Bitte installiere <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, oder <safariLink>Safari</safariLink> für das beste Erlebnis.",
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Bitte installiere <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> oder <safariLink>Safari</safariLink> für das beste Erlebnis.",
|
||||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kannst deinen aktuellen Browser weiterhin verwenden, es kann aber sein, dass einige oder alle Funktionen nicht verfügbar stehen oder dass das Aussehen und die Bedienung der Anwendung nicht korrekt ist.",
|
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kannst deinen aktuellen Browser weiterhin verwenden. Es ist aber möglich, dass nicht alles richtig funktioniert oder das Aussehen der App inkorrekt ist.",
|
||||||
"I understand the risks and wish to continue": "Ich verstehe die Risiken und möchte fortfahren",
|
"I understand the risks and wish to continue": "Ich verstehe die Risiken und möchte fortfahren",
|
||||||
"Your Element is misconfigured": "Dein Element ist falsch konfiguriert",
|
"Your Element is misconfigured": "Dein Element ist falsch konfiguriert",
|
||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Deine Element Konfiguration enthält ungültiges JSON. Bitte korrigiere das Problem und lade die Seite neu.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Deine Elementkonfiguration enthält ungültiges JSON. Bitte korrigiere das Problem und lade die Seite neu.",
|
||||||
"Download Completed": "Download fertiggestellt",
|
"Download Completed": "Herunterladen fertiggestellt",
|
||||||
"Open": "Öffnen",
|
"Open": "Öffnen",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s verwendet erweiterte Browserfunktionen, die von Ihrem aktuellen Browser nicht unterstützt werden.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s verwendet erweiterte Browserfunktionen, die von deinem Browser nicht unterstützt werden.",
|
||||||
"Your browser can't run %(brand)s": "Dein Browser kann %(brand)s nicht ausführen",
|
"Your browser can't run %(brand)s": "Dein Browser kann %(brand)s nicht ausführen",
|
||||||
"Powered by Matrix": "Betrieben mit Matrix"
|
"Powered by Matrix": "Betrieben mit Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Verwende %(brand)s auf dem Handy"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
||||||
"Powered by Matrix": "Powered by Matrix",
|
"Powered by Matrix": "Powered by Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Use %(brand)s on mobile",
|
||||||
"Unsupported browser": "Unsupported browser",
|
"Unsupported browser": "Unsupported browser",
|
||||||
"Your browser can't run %(brand)s": "Your browser can't run %(brand)s",
|
"Your browser can't run %(brand)s": "Your browser can't run %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uses advanced browser features which aren't supported by your current browser.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uses advanced browser features which aren't supported by your current browser.",
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Via agordaro de Elemento enhavas nevalidajn datumojn de JSON. Bonvolu korekti la problemon kaj aktualigi la paĝon.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Via agordaro de Elemento enhavas nevalidajn datumojn de JSON. Bonvolu korekti la problemon kaj aktualigi la paĝon.",
|
||||||
"Your browser can't run %(brand)s": "Via foliumilo ne povas ruli %(brand)s",
|
"Your browser can't run %(brand)s": "Via foliumilo ne povas ruli %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uzas specialajn funkciojn de foliumilo, kiujn via nuna foliumilo ne subtenas.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uzas specialajn funkciojn de foliumilo, kiujn via nuna foliumilo ne subtenas.",
|
||||||
"Powered by Matrix": "Povigata de Matrix"
|
"Powered by Matrix": "Povigata de Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Uzi %(brand)s telefone"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"Open": "Abrir",
|
"Open": "Abrir",
|
||||||
"Your browser can't run %(brand)s": "Tu navegador no es compatible con %(brand)s",
|
"Your browser can't run %(brand)s": "Tu navegador no es compatible con %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funciones avanzadas que su navegador actual no soporta.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funciones avanzadas que su navegador actual no soporta.",
|
||||||
"Powered by Matrix": "Funciona con Matrix"
|
"Powered by Matrix": "Funciona con Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Usar %(brand)s en modo móvil"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Sinu Element'i seadistustes on vigased JSON-vormingus andmed. Palun paranda see viga ja laadi leht uuesti.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Sinu Element'i seadistustes on vigased JSON-vormingus andmed. Palun paranda see viga ja laadi leht uuesti.",
|
||||||
"Your browser can't run %(brand)s": "%(brand)s ei toimi sinu brauseris",
|
"Your browser can't run %(brand)s": "%(brand)s ei toimi sinu brauseris",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s kasutab mitmeid uusi brauseri-põhiseid tehnoloogiaid, mis ei ole veel sinu veebibrauseris toetatud.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s kasutab mitmeid uusi brauseri-põhiseid tehnoloogiaid, mis ei ole veel sinu veebibrauseris toetatud.",
|
||||||
"Powered by Matrix": "Põhineb Matrix'il"
|
"Powered by Matrix": "Põhineb Matrix'il",
|
||||||
|
"Use %(brand)s on mobile": "Kasuta %(brand)s rakendust nutiseadmes"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,11 +26,12 @@
|
|||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s%(browserName)s، %(osName)s",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s%(browserName)s، %(osName)s",
|
||||||
"Unsupported browser": "مرورگر پشتبانی نشده",
|
"Unsupported browser": "مرورگر پشتبانی نشده",
|
||||||
"Your browser can't run %(brand)s": "مرورگر شما نمیتواند %(brand)s را اجرا کند",
|
"Your browser can't run %(brand)s": "مرورگر شما نمیتواند %(brand)s را اجرا کند",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s از ویژگی های پیشرفته مرورگر استفاده میکند که که در مرورگر فعلی شما پشتیبانی نمیشوند.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s از ویژگی های پیشرفته مرورگر استفاده میکند که در مرورگر فعلی شما پشتیبانی نمیشوند.",
|
||||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "لطفا برای تجربه بهتر <chromeLink>کروم</chromeLink>، <firefoxLink>فایرفاکس</firefoxLink>، یا <safariLink>سافاری</safariLink> را نصب کنید.",
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "لطفا برای تجربه بهتر <chromeLink>کروم</chromeLink>، <firefoxLink>فایرفاکس</firefoxLink>، یا <safariLink>سافاری</safariLink> را نصب کنید.",
|
||||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "شما میتوانید با مرورگر فعلی خود ادامه دهید، اما ممکن است برخی یا کل ویژگی ها کار نکنند و نگاه و احساس از برنامه ممکن است درست نباشد.",
|
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "شما میتوانید با مرورگر فعلی خود ادامه دهید، اما ممکن است برخی یا کل ویژگی ها کار نکنند و نگاه و احساس از برنامه ممکن است درست نباشد.",
|
||||||
"I understand the risks and wish to continue": "از خطرات این کار آگاهم و مایلم که ادامه بدهم",
|
"I understand the risks and wish to continue": "از خطرات این کار آگاهم و مایلم که ادامه بدهم",
|
||||||
"Go to element.io": "برو به element.io",
|
"Go to element.io": "برو به element.io",
|
||||||
"Failed to start": "مشکل در آغاز",
|
"Failed to start": "مشکل در آغاز",
|
||||||
"Powered by Matrix": "قدرتگرفته از ماتریکس"
|
"Powered by Matrix": "قدرتگرفته از ماتریکس",
|
||||||
|
"Use %(brand)s on mobile": "استفاده از %(brand)s روی گوشی"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Messagerie et collaboration décentralisées et chiffrées, propulsées par [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Messagerie et collaboration décentralisées et chiffrées, propulsées par [matrix]",
|
||||||
"Sign In": "Se connecter",
|
"Sign In": "Se connecter",
|
||||||
"Create Account": "Créer un compte",
|
"Create Account": "Créer un compte",
|
||||||
"Explore rooms": "Explorer les salons",
|
"Explore rooms": "Parcourir les salons",
|
||||||
"Unexpected error preparing the app. See console for details.": "Une erreur inattendue est survenue pendant la préparation de l’application. Consultez la console pour avoir des détails.",
|
"Unexpected error preparing the app. See console for details.": "Une erreur inattendue est survenue pendant la préparation de l’application. Consultez la console pour avoir des détails.",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuration invalide : il ne faut spécifier qu’un des trois champs parmis default_server_config, default_server_name et default_hs_url.",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuration invalide : il ne faut spécifier qu’un des trois champs parmis default_server_config, default_server_name et default_hs_url.",
|
||||||
"Invalid configuration: no default server specified.": "Configuration invalide : aucun serveur par défaut spécifié.",
|
"Invalid configuration: no default server specified.": "Configuration invalide : aucun serveur par défaut spécifié.",
|
||||||
@@ -32,5 +32,6 @@
|
|||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configuration de votre Element contient du JSON invalide. Veuillez corriger le problème et recharger la page.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configuration de votre Element contient du JSON invalide. Veuillez corriger le problème et recharger la page.",
|
||||||
"Your browser can't run %(brand)s": "Votre navigateur ne peut pas exécuter %(brand)s",
|
"Your browser can't run %(brand)s": "Votre navigateur ne peut pas exécuter %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s nécessite des fonctionnalités avancées que votre navigateur actuel ne prend pas en charge.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s nécessite des fonctionnalités avancées que votre navigateur actuel ne prend pas en charge.",
|
||||||
"Powered by Matrix": "Propulsé par Matrix"
|
"Powered by Matrix": "Propulsé par Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Utiliser %(brand)s sur téléphone"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,5 +7,31 @@
|
|||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Meán comhrá agus comhoibriú, díláraithe agus criptithe, cumhachtaithe ag [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Meán comhrá agus comhoibriú, díláraithe agus criptithe, cumhachtaithe ag [matrix]",
|
||||||
"Sign In": "Sínigh Isteach",
|
"Sign In": "Sínigh Isteach",
|
||||||
"Create Account": "Déan cuntas a chruthú",
|
"Create Account": "Déan cuntas a chruthú",
|
||||||
"Explore rooms": "Breathnaigh thart ar na seomraí"
|
"Explore rooms": "Breathnaigh thart ar na seomraí",
|
||||||
|
"Your browser can't run %(brand)s": "Níl do bhrabhsálaí comhoiriúnach do %(brand)s",
|
||||||
|
"Go to your browser to complete Sign In": "Oscail do bhrabhsálaí agus críochnaigh an clárú",
|
||||||
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Coinníonn do chumraíocht JSON neamhbhailí. Ceartaigh an fadhb agus athlódáil an leathanach le do thoil.",
|
||||||
|
"Your Element is misconfigured": "Níl do fheidhmchlár Element cumraithe i gceart",
|
||||||
|
"Previous/next recently visited room or community": "roimhe/chéad eile, seomra nó pobal is déanaí",
|
||||||
|
"Failed to start": "Theip chun tosú",
|
||||||
|
"I understand the risks and wish to continue": "Tuigim na rioscaí agus ba mhaith liom lean ar aghaidh",
|
||||||
|
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "An féidir leat úsáid do bhrabhsálaí reatha, ach nár oibrí roinnt nó gach gné agus nár thaispeántar an feidhmchlár i gceart.",
|
||||||
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Suiteáil <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> chun an taithí is fearr a fháil.",
|
||||||
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "Úsáideann %(brand)s gnéithe ardforbartha nach bhfuil ar fáil faoi do bhrabhsálaí reatha.",
|
||||||
|
"Unsupported browser": "Brabhsálaí gan tacaíocht",
|
||||||
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s deisce (%(platformName)s)",
|
||||||
|
"Unexpected error preparing the app. See console for details.": "Earráid nuair an feidhmchlár a hullmhú. Feic sa consól le haghaidh eolas.",
|
||||||
|
"Unable to load config file: please refresh the page to try again.": "Ní féidir an comhad cumraíochta a lódáil. Athnuaigh an leathanach chun déanamh iarracht arís le do thoil.",
|
||||||
|
"Download Completed": "Íoslódáil críochnaithe",
|
||||||
|
"Invalid JSON": "JSON neamhbhailí",
|
||||||
|
"The message from the parser is: %(message)s": "Is í an teachtaireacht as an parsálaí: %(message)s",
|
||||||
|
"Invalid configuration: no default server specified.": "Cumraíocht neamhbhailí: Níl aon freastalaí réamhshocraithe a sonrú.",
|
||||||
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Cumraíocht neamhbhailí: ní féidir ach ceann de default_server_config, default_server_name, nó default_hs_url a shonrú.",
|
||||||
|
"Missing indexeddb worker script!": "An script oibrí \"indexeddb\" ag iarraidh!",
|
||||||
|
"Powered by Matrix": "Cumhachtaithe ag Matrix",
|
||||||
|
"Go to element.io": "Téigh go element.io",
|
||||||
|
"Open user settings": "Oscail socruithe úsáideora",
|
||||||
|
"Open": "Oscail",
|
||||||
|
"Use %(brand)s on mobile": "Úsáid %(brand)s ar guthán póca"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "A configuración de Element contén JSON non válido. Corrixe o problema e recarga a páxina.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "A configuración de Element contén JSON non válido. Corrixe o problema e recarga a páxina.",
|
||||||
"Your browser can't run %(brand)s": "O teu navegador non pode executar %(brand)s",
|
"Your browser can't run %(brand)s": "O teu navegador non pode executar %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s utiliza características avanzadas do navegador que non están dispoñibles no teu navegador.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s utiliza características avanzadas do navegador que non están dispoñibles no teu navegador.",
|
||||||
"Powered by Matrix": "Funciona grazas a Matrix"
|
"Powered by Matrix": "Funciona grazas a Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Utiliza %(brand)s no móbil"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Az Element érvénytelen JSON-t tartalmazó konfigurációval rendelkezik. Javítsa és töltse újra az oldalt.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Az Element érvénytelen JSON-t tartalmazó konfigurációval rendelkezik. Javítsa és töltse újra az oldalt.",
|
||||||
"Your browser can't run %(brand)s": "A böngészője nem tudja futtatni ezt: %(brand)s",
|
"Your browser can't run %(brand)s": "A böngészője nem tudja futtatni ezt: %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s speciális böngészőfunkciókat használ, amelyeket a jelenlegi böngészője nem támogat.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s speciális böngészőfunkciókat használ, amelyeket a jelenlegi böngészője nem támogat.",
|
||||||
"Powered by Matrix": "A gépházban: Matrix"
|
"Powered by Matrix": "A gépházban: Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Mobilon használd ezt: %(brand)s"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,5 +4,8 @@
|
|||||||
"Unknown device": "Perangkat Tidak Diketahui",
|
"Unknown device": "Perangkat Tidak Diketahui",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "Anda perlu menggunakan HTTPS untuk melakukan panggilan berbagi-layar.",
|
"You need to be using HTTPS to place a screen-sharing call.": "Anda perlu menggunakan HTTPS untuk melakukan panggilan berbagi-layar.",
|
||||||
"Welcome to Element": "Selamat datang di Element",
|
"Welcome to Element": "Selamat datang di Element",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Obrolan terenkripsi, terdesentralisasi & kolaborasi didukung oleh [matrix]"
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Obrolan terenkripsi, terdesentralisasi & kolaborasi didukung oleh [matrix]",
|
||||||
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfigurasi Element Anda mengandung JSON yang tidak valid. Mohon perbaiki masalahnya dan muat ulang halaman nya.",
|
||||||
|
"Invalid configuration: no default server specified.": "Konfigurasi tidak valid: server default belum ditentukan.",
|
||||||
|
"Missing indexeddb worker script!": "Tidak ada script worker indexeddb!"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element stillingar þínar innihalda ógilda JSON. Vinsamlegast leiðréttu vandamálið og endurhladdu síðuna.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element stillingar þínar innihalda ógilda JSON. Vinsamlegast leiðréttu vandamálið og endurhladdu síðuna.",
|
||||||
"Your Element is misconfigured": "Element þitt er rangt stillt",
|
"Your Element is misconfigured": "Element þitt er rangt stillt",
|
||||||
"Invalid configuration: no default server specified.": "Ógild stilling: enginn sjálfgefinn þjónn tilgreindur.",
|
"Invalid configuration: no default server specified.": "Ógild stilling: enginn sjálfgefinn þjónn tilgreindur.",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ógild stilling: getur aðeins tilgreint einn af default_server_config, default_server_name eða default_hs_url."
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ógild stilling: getur aðeins tilgreint einn af default_server_config, default_server_name eða default_hs_url.",
|
||||||
|
"Use %(brand)s on mobile": "Nota %(brand)s í síma"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configurazione del tuo elemento contiene un JSON non valido. Correggi il problema e ricarica la pagina.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configurazione del tuo elemento contiene un JSON non valido. Correggi il problema e ricarica la pagina.",
|
||||||
"Your browser can't run %(brand)s": "Il tuo browser non può eseguire %(brand)s",
|
"Your browser can't run %(brand)s": "Il tuo browser non può eseguire %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funzionalità avanzate del browser che non sono supportate dal tuo browser attuale.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funzionalità avanzate del browser che non sono supportate dal tuo browser attuale.",
|
||||||
"Powered by Matrix": "Offerto da Matrix"
|
"Powered by Matrix": "Offerto da Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Usa %(brand)s su mobile"
|
||||||
}
|
}
|
||||||
|
|||||||
3
src/i18n/strings/lo.json
Normal file
3
src/i18n/strings/lo.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"Open": "ເປີດ"
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
"Dismiss": "Atmesti",
|
"Dismiss": "Atmesti",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizuoti, šifruoti pokalbiai ir bendradarbiavimas, veikiantis su [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizuoti, šifruoti pokalbiai ir bendradarbiavimas, veikiantis su [matrix]",
|
||||||
"Sign In": "Prisijungti",
|
"Sign In": "Prisijungti",
|
||||||
"Create Account": "Sukurti paskyrą",
|
"Create Account": "Sukurti Paskyrą",
|
||||||
"Explore rooms": "Žvalgyti kambarius",
|
"Explore rooms": "Žvalgyti kambarius",
|
||||||
"The message from the parser is: %(message)s": "Analizatoriaus žinutė yra: %(message)s",
|
"The message from the parser is: %(message)s": "Analizatoriaus žinutė yra: %(message)s",
|
||||||
"Invalid JSON": "Klaidingas JSON",
|
"Invalid JSON": "Klaidingas JSON",
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"Dismiss": "Afwijzen",
|
"Dismiss": "Sluiten",
|
||||||
"powered by Matrix": "draait op Matrix",
|
"powered by Matrix": "draait op Matrix",
|
||||||
"Unknown device": "Onbekend apparaat",
|
"Unknown device": "Onbekend apparaat",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "Oproepen met schermdelen vergen HTTPS.",
|
"You need to be using HTTPS to place a screen-sharing call.": "Oproepen met schermdelen vergen HTTPS.",
|
||||||
"Welcome to Element": "Welkom bij Element",
|
"Welcome to Element": "Welkom bij Element",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Gedecentraliseerd en versleuteld chatten & samenwerken dankzij [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Gedecentraliseerd en versleuteld chatten & samenwerken dankzij [matrix]",
|
||||||
"Sign In": "Aanmelden",
|
"Sign In": "Inloggen",
|
||||||
"Create Account": "Account aanmaken",
|
"Create Account": "Registeren",
|
||||||
"Explore rooms": "Gesprekken ontdekken",
|
"Explore rooms": "Gesprekken ontdekken",
|
||||||
"Unexpected error preparing the app. See console for details.": "Er is een onverwachte fout opgetreden bij het voorbereiden van de app. Zie de console voor details.",
|
"Unexpected error preparing the app. See console for details.": "Er is een onverwachte fout opgetreden bij het voorbereiden van de app. Zie de console voor details.",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuratiefout: kan slechts één van default_server_config, default_server_name, of default_hs_url opgeven.",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuratiefout: kan slechts één van default_server_config, default_server_name, of default_hs_url opgeven.",
|
||||||
@@ -22,15 +22,16 @@
|
|||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
"Unsupported browser": "Niet-ondersteunde browser",
|
"Unsupported browser": "Niet-ondersteunde browser",
|
||||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Installeer <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, of <safariLink>Safari</safariLink> voor de beste gebruikservaring.",
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Installeer <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, of <safariLink>Safari</safariLink> voor de beste gebruikservaring.",
|
||||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Je kunt je huidige browser blijven gebruiken, maar sommige of alle functies zouden niet kunnen werken en de uitstraling van het programma kan verkeerd zijn.",
|
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "U kunt uw huidige browser blijven gebruiken, maar sommige of alle functies zouden niet kunnen werken en de weergave van het programma kan verkeerd zijn.",
|
||||||
"I understand the risks and wish to continue": "Ik begrijp de risico's en wil verder gaan",
|
"I understand the risks and wish to continue": "Ik begrijp de risico's en wil verder gaan",
|
||||||
"Go to element.io": "Ga naar element.io",
|
"Go to element.io": "Ga naar element.io",
|
||||||
"Failed to start": "Opstarten mislukt",
|
"Failed to start": "Opstarten mislukt",
|
||||||
"Open": "Openen",
|
"Open": "Openen",
|
||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Je Element configuratie bevat ongeldige JSON. Gelieve het probleem te corrigeren daarna de pagina te herladen.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Uw Element configuratie bevat ongeldige JSON. Gelieve het probleem te corrigeren daarna de pagina te herladen.",
|
||||||
"Download Completed": "Download voltooid",
|
"Download Completed": "Download voltooid",
|
||||||
"Your Element is misconfigured": "Je Element is verkeerd geconfigureerd",
|
"Your Element is misconfigured": "Uw Element is verkeerd geconfigureerd",
|
||||||
"Your browser can't run %(brand)s": "Je browser kan %(brand)s niet draaien",
|
"Your browser can't run %(brand)s": "Uw browser kan %(brand)s niet starten",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s gebruikt geavanceerde functies die niet ondersteund worden in je huidige browser.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s gebruikt geavanceerde functies die niet ondersteund worden in uw huidige browser.",
|
||||||
"Powered by Matrix": "Gebruikt Matrix technologie"
|
"Powered by Matrix": "Mogelijk gemaakt door Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Gebruik %(brand)s op uw mobiel"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,5 +10,27 @@
|
|||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Messatjariá chifrada, descentralizada e collaborativa propulsada per [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Messatjariá chifrada, descentralizada e collaborativa propulsada per [matrix]",
|
||||||
"Sign In": "Se connectar",
|
"Sign In": "Se connectar",
|
||||||
"Create Account": "Crear un compte",
|
"Create Account": "Crear un compte",
|
||||||
"Explore rooms": "Percórrer las salas"
|
"Explore rooms": "Percórrer las salas",
|
||||||
|
"Missing indexeddb worker script!": "Lo worker script IndexedDB manca !",
|
||||||
|
"Invalid configuration: no default server specified.": "Configuracion invalida : pas de servidor per defauta especificat.",
|
||||||
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuracion invalida : podètz unicament especificar un camp entre default_server_config, default_server_name, o default_hs_url.",
|
||||||
|
"Failed to start": "Non se pòt pas lançar",
|
||||||
|
"Go to element.io": "Anar a element.io",
|
||||||
|
"I understand the risks and wish to continue": "Compréni los risques e vòli contunhar",
|
||||||
|
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Podètz contunhar a utilizar lo vòstre navigator actual, mas qualques o totes las foncionalitats o/e l'apparéncia poirián mal foncionar .",
|
||||||
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Si vos plai installatz <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, o <safariLink>Safari</safariLink> per una melhora experiéncia.",
|
||||||
|
"Your browser can't run %(brand)s": "Lo vòstre navigator non pòt pas executar %(brand)s",
|
||||||
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s utiliza de foncions avançadas que lo vòstre navigator non suporta pas.",
|
||||||
|
"Unsupported browser": "Navigator incompatible",
|
||||||
|
"Powered by Matrix": "Fonciona ambé Matrix",
|
||||||
|
"You need to be using HTTPS to place a screen-sharing call.": "Devetz utilizar HTTPS per apelar ambé partatge d'ecran.",
|
||||||
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s de burèu (%(platformName)s)",
|
||||||
|
"Previous/next recently visited room or community": "Sala o comunautat recentament visitada precedenta/seguenta",
|
||||||
|
"Open user settings": "Dobrir los paramètres utilizaire",
|
||||||
|
"Open": "Dobrir",
|
||||||
|
"Download Completed": "Descargament acabat",
|
||||||
|
"Unable to load config file: please refresh the page to try again.": "Se pòt pas cargar lo fichièr de configuracion : si vos plai actualizatz la pagina per tornar ensajar.",
|
||||||
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configuracion d'Element conténe de JSON invalid. Si vos plai corregitz lo problème e actualizatz la pagina.",
|
||||||
|
"Your Element is misconfigured": "Lo vòstre Element es mal configurat"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s używa zaawansowanych funkcji przeglądarki, które nie są dostępne w twojej przeglądarce.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s używa zaawansowanych funkcji przeglądarki, które nie są dostępne w twojej przeglądarce.",
|
||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracja Elementa zawiera niepoprawny JSON. Popraw konfiguracje i odśwież stronę.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracja Elementa zawiera niepoprawny JSON. Popraw konfiguracje i odśwież stronę.",
|
||||||
"Your Element is misconfigured": "Element jest nieprawidłowo skonfigurowany",
|
"Your Element is misconfigured": "Element jest nieprawidłowo skonfigurowany",
|
||||||
"Powered by Matrix": "Zasilane przez Matrix"
|
"Powered by Matrix": "Zasilane przez Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Użyj %(brand)s w telefonie"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Sua configuração do Element contém JSON inválido. Por favor, corrija o problema e recarregue a página.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Sua configuração do Element contém JSON inválido. Por favor, corrija o problema e recarregue a página.",
|
||||||
"Your browser can't run %(brand)s": "Seu navegador não consegue rodar o %(brand)s",
|
"Your browser can't run %(brand)s": "Seu navegador não consegue rodar o %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa recursos avançados que não são suportados pelo seu navegador de internet atual.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa recursos avançados que não são suportados pelo seu navegador de internet atual.",
|
||||||
"Powered by Matrix": "Construído com tecnologia Matrix"
|
"Powered by Matrix": "Construído com tecnologia Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Usar %(brand)s no celular"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat decentralizat, criptat & colaborare propulsata de [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat decentralizat, criptat & colaborare propulsata de [matrix]",
|
||||||
"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 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.",
|
||||||
"Sign In": "Autentificare",
|
"Sign In": "Autentificare",
|
||||||
"Create Account": "Înregistare",
|
"Create Account": "Crează un cont",
|
||||||
"Explore rooms": "Explorează camerele",
|
"Explore rooms": "Explorează camerele",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuratie invalida: se poate specifica doar una dintre default_server_config, default_server_name, or default_hs_url.",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuratie invalida: se poate specifica doar una dintre default_server_config, default_server_name, or default_hs_url.",
|
||||||
"Invalid JSON": "JSON invalid",
|
"Invalid JSON": "JSON invalid",
|
||||||
@@ -16,5 +16,22 @@
|
|||||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Instalati va rog <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> pentru o experienta mai buna.",
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Instalati va rog <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> pentru o experienta mai buna.",
|
||||||
"I understand the risks and wish to continue": "Inteleg riscul si doresc sa continui",
|
"I understand the risks and wish to continue": "Inteleg riscul si doresc sa continui",
|
||||||
"Go to element.io": "Acceseaza element.io",
|
"Go to element.io": "Acceseaza element.io",
|
||||||
"Failed to start": "Nu reuseste sa porneasca"
|
"Failed to start": "Nu reuseste sa porneasca",
|
||||||
|
"Your Element is misconfigured": "Element-ul tău este configurat necorespunzător",
|
||||||
|
"Missing indexeddb worker script!": "Scriptul de lucru indexddb lipsește!",
|
||||||
|
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Poți continua să folosești browser-ul curent, însă aspectul și experiența câtorva sau tuturor funcțiilor poate fi incorectă.",
|
||||||
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s folosește funcții avansate de browser ce nu sunt suportate de browser-ul dumneavoastră.",
|
||||||
|
"Your browser can't run %(brand)s": "Browserul tău nu poate rula %(brand)s",
|
||||||
|
"Use %(brand)s on mobile": "Folosește %(brand)s pe mobil",
|
||||||
|
"Powered by Matrix": "Bazat pe Matrix",
|
||||||
|
"Go to your browser to complete Sign In": "Du-te la browser pentru a finaliza Autentificarea",
|
||||||
|
"Previous/next recently visited room or community": "Precedenta/următoarea cameră sau comunitate vizitată recent",
|
||||||
|
"Open user settings": "Deschide setările de utilizator",
|
||||||
|
"Open": "Deschide",
|
||||||
|
"Download Completed": "Descărcare Completă",
|
||||||
|
"Unexpected error preparing the app. See console for details.": "Eroare neașteptată în aplicație. Vezi consola pentru detalii.",
|
||||||
|
"Unable to load config file: please refresh the page to try again.": "Nu se poate încărca fișierul de configurație: vă rugăm sa reîncărcați pagina și să încercați din nou.",
|
||||||
|
"The message from the parser is: %(message)s": "Mesajul de la parser este: %(message)s",
|
||||||
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Configurația ta Element conține JSON invalid. Vă rugăm sa corectați problema și să reîncărcați pagina.",
|
||||||
|
"Invalid configuration: no default server specified.": "Configurație invalidă: niciun server implicit specificat."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"Open": "Открыть",
|
"Open": "Открыть",
|
||||||
"Your browser can't run %(brand)s": "Ваш браузер не может запустить %(brand)s",
|
"Your browser can't run %(brand)s": "Ваш браузер не может запустить %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s использует расширенные возможности, которые не поддерживаются вашим браузером.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s использует расширенные возможности, которые не поддерживаются вашим браузером.",
|
||||||
"Powered by Matrix": "На технологии Matrix"
|
"Powered by Matrix": "На технологии Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Воспользуйтесь %(brand)s на мобильном телефоне"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Formësimi juaj i Element-it përmban JSON të pavlefshëm. Ju lutemi, ndreqeni problemin dhe ringarkoni faqen.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Formësimi juaj i Element-it përmban JSON të pavlefshëm. Ju lutemi, ndreqeni problemin dhe ringarkoni faqen.",
|
||||||
"Your browser can't run %(brand)s": "Shfletuesi juaj s’mund të xhirojë %(brand)s",
|
"Your browser can't run %(brand)s": "Shfletuesi juaj s’mund të xhirojë %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s përdor veçori të thelluara të shfletuesit, të cilat shfletuesi juaj i tanishëm s’i mbulon.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s përdor veçori të thelluara të shfletuesit, të cilat shfletuesi juaj i tanishëm s’i mbulon.",
|
||||||
"Powered by Matrix": "Bazuar në Matrix"
|
"Powered by Matrix": "Bazuar në Matrix",
|
||||||
|
"Use %(brand)s on mobile": "Përdor %(brand)s në celular"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"Open": "Öppna",
|
"Open": "Öppna",
|
||||||
"Powered by Matrix": "Drivs av Matrix",
|
"Powered by Matrix": "Drivs av Matrix",
|
||||||
"Your browser can't run %(brand)s": "Din webbläsare kan inte köra %(brand)s",
|
"Your browser can't run %(brand)s": "Din webbläsare kan inte köra %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s använder avancerade webbläsarfunktioner som inte stöds av din aktuella webbläsare."
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s använder avancerade webbläsarfunktioner som inte stöds av din aktuella webbläsare.",
|
||||||
|
"Use %(brand)s on mobile": "Använd %(brand)s på mobilen"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,19 @@
|
|||||||
{
|
{
|
||||||
"powered by Matrix": "ใช้เทคโนโลยี Matrix",
|
"powered by Matrix": "ใช้เทคโนโลยี Matrix",
|
||||||
"Dismiss": "ไม่สนใจ",
|
"Dismiss": "ปิด",
|
||||||
"Unknown device": "อุปกรณ์ที่ไม่รู้จัก",
|
"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 Element": "ยินดีต้อนรับสู่ Element",
|
"Welcome to Element": "ยินดีต้อนรับสู่ Element",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "ระบบแชทและประสานงาน ไร้ศูนย์กลางและเข้ารหัสได้ โดยใช้เทคโนโลยีจาก [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "ระบบแชทและประสานงาน ไร้ศูนย์กลางและเข้ารหัสได้ โดยใช้เทคโนโลยีจาก [matrix]",
|
||||||
"The message from the parser is: %(message)s": "ข้อความจากparserคือ:%(message)s",
|
"The message from the parser is: %(message)s": "ข้อความจากตัวแยกวิเคราะห์คือ: %(message)s",
|
||||||
"Invalid JSON": "JSON ไม่ถูกต้อง",
|
"Invalid JSON": "JSON ไม่ถูกต้อง",
|
||||||
"Sign In": "เข้าสู่ระบบ",
|
"Sign In": "ลงชื่อเข้า",
|
||||||
"Create Account": "สร้างบัญชี",
|
"Create Account": "สร้างบัญชี",
|
||||||
"Explore rooms": "สำรวจห้อง"
|
"Explore rooms": "สำรวจห้อง",
|
||||||
|
"Download Completed": "การดาวน์โหลดเสร็จสมบูรณ์",
|
||||||
|
"Open user settings": "เปิดการตั้งค่าผู้ใช้",
|
||||||
|
"Go to element.io": "ไปยัง element.io",
|
||||||
|
"Failed to start": "ไม่สามารถเริ่ม",
|
||||||
|
"Open": "เปิด",
|
||||||
|
"Powered by Matrix": "ขับเคลื่อนโดย Matrix"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,9 +8,9 @@
|
|||||||
"Sign In": "Giriş Yap",
|
"Sign In": "Giriş Yap",
|
||||||
"Create Account": "Hesap Oluştur",
|
"Create Account": "Hesap Oluştur",
|
||||||
"Explore rooms": "Odaları keşfet",
|
"Explore rooms": "Odaları keşfet",
|
||||||
"Invalid JSON": "Geçersiz JSON",
|
"Invalid JSON": "JSON geçersiz",
|
||||||
"Unexpected error preparing the app. See console for details.": "Uygulama hazırlanırken beklenmeyen bir hata oldu. Detaylar için konsola bakın.",
|
"Unexpected error preparing the app. See console for details.": "Uygulama hazırlanırken beklenmeyen bir hata oldu. Detaylar için konsola bakın.",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Geçersiz yapılandırma: default_server_config, default_server_name, yada default_hs_url den sadece birisi seçilebilir.",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Hatalı ayarlar: default_server_config, default_server_name ve default_hs_url ayarlarından en fazla biri girilebilir.",
|
||||||
"Invalid configuration: no default server specified.": "Geçersiz yapılandırma: varsayılan sunucu seçilmemiş.",
|
"Invalid configuration: no default server specified.": "Geçersiz yapılandırma: varsayılan sunucu seçilmemiş.",
|
||||||
"The message from the parser is: %(message)s": "Ayrıştırıcıdan gelen mesaj: %(message)s",
|
"The message from the parser is: %(message)s": "Ayrıştırıcıdan gelen mesaj: %(message)s",
|
||||||
"Go to your browser to complete Sign In": "Oturum açmayı tamamlamak için tarayıcınıza gidin",
|
"Go to your browser to complete Sign In": "Oturum açmayı tamamlamak için tarayıcınıza gidin",
|
||||||
@@ -28,9 +28,10 @@
|
|||||||
"Go to element.io": "element.io adresine git",
|
"Go to element.io": "element.io adresine git",
|
||||||
"Failed to start": "Başlatılamadı",
|
"Failed to start": "Başlatılamadı",
|
||||||
"Previous/next recently visited room or community": "Yakında ziyaret edilen önceki/sonraki oda veya topluluk",
|
"Previous/next recently visited room or community": "Yakında ziyaret edilen önceki/sonraki oda veya topluluk",
|
||||||
"Powered by Matrix": "Matrix tarafından güçlendirildi",
|
"Powered by Matrix": "Gücünü Matrix'ten alır",
|
||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName) (%(browserName), %(osName))",
|
||||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Masaüstü (%(platformName)s)",
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Masaüstü (%(platformName)s)",
|
||||||
"Open": "Aç",
|
"Open": "Aç",
|
||||||
"Missing indexeddb worker script!": "Indexeddb worker kodu eksik!"
|
"Missing indexeddb worker script!": "Indexeddb worker kodu eksik!",
|
||||||
|
"Use %(brand)s on mobile": "Mobilde %(brand)s kullan"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"Create Account": "Ssenflul amiḍan",
|
"Create Account": "senflul amiḍan",
|
||||||
"Download Completed": "Ittusmed wagam",
|
"Download Completed": "Ittusmed wagam",
|
||||||
"Powered by Matrix": "Ittusker s Matrix",
|
"Powered by Matrix": "Ittusker s Matrix",
|
||||||
"Sign In": "Kcem",
|
"Sign In": "Kcem",
|
||||||
@@ -10,5 +10,7 @@
|
|||||||
"Unknown device": "Allal arussin",
|
"Unknown device": "Allal arussin",
|
||||||
"Open user settings": "Ṛẓem tisɣal n unessemres",
|
"Open user settings": "Ṛẓem tisɣal n unessemres",
|
||||||
"Dismiss": "Nexxel",
|
"Dismiss": "Nexxel",
|
||||||
"Open": "Ṛẓem"
|
"Open": "Ṛẓem",
|
||||||
|
"The message from the parser is: %(message)s": "Tuzint n umeslad: %(message)s",
|
||||||
|
"Use %(brand)s on mobile": "Semres %(brand)s g utilifun"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
"Powered by Matrix": "Працює на Matrix",
|
"Powered by Matrix": "Працює на Matrix",
|
||||||
"Your browser can't run %(brand)s": "Ваш переглядач неспроможний запустити %(brand)s",
|
"Your browser can't run %(brand)s": "Ваш переглядач неспроможний запустити %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s використовує передові властивості, які ваш браузер не підтримує."
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s використовує передові властивості, які ваш браузер не підтримує.",
|
||||||
|
"Use %(brand)s on mobile": "Користуйтеся %(brand)s на мобільному"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"Welcome to Element": "Chào mừng tới Element",
|
"Welcome to Element": "Chào mừng tới Element",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat phân tán, mã hóa & giao tiếp được tài trợ bởi [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat phân tán, mã hóa & giao tiếp được tài trợ bởi [matrix]",
|
||||||
"Unexpected error preparing the app. See console for details.": "Lỗi xảy ra trong lúc chuẩn bị app. Xem console log để biết chi tiết.",
|
"Unexpected error preparing the app. See console for details.": "Lỗi xảy ra trong lúc chuẩn bị app. Xem console log để biết chi tiết.",
|
||||||
"The message from the parser is: %(message)s": "Nội dung tin là: %(message)s",
|
"The message from the parser is: %(message)s": "Thông báo của trình xử lý là: %(message)s",
|
||||||
"Invalid JSON": "JSON không hợp lệ",
|
"Invalid JSON": "JSON không hợp lệ",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Thiết lập không hợp lệ: chỉ có thể điền một trong số default_server_config, default_server_name, hoặc default_hs_url.",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Thiết lập không hợp lệ: chỉ có thể điền một trong số default_server_config, default_server_name, hoặc default_hs_url.",
|
||||||
"Invalid configuration: no default server specified.": "Cấu hình không hợp lệ: máy chủ mặc định không được thiết lập.",
|
"Invalid configuration: no default server specified.": "Cấu hình không hợp lệ: máy chủ mặc định không được thiết lập.",
|
||||||
@@ -23,8 +23,15 @@
|
|||||||
"Unsupported browser": "Trình duyệt không được hỗ trợ",
|
"Unsupported browser": "Trình duyệt không được hỗ trợ",
|
||||||
"Go to your browser to complete Sign In": "Mở trình duyệt web để hoàn thành đăng nhập",
|
"Go to your browser to complete Sign In": "Mở trình duyệt web để hoàn thành đăng nhập",
|
||||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Máy tính để bàn (%(platformName)s)",
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Máy tính để bàn (%(platformName)s)",
|
||||||
"Previous/next recently visited room or community": "Phòng chat hoặc cộng đồng gần đây trước/tiếp theo",
|
"Previous/next recently visited room or community": "Phòng chat hoặc cộng đồng đã đi đến gần đây trước/tiếp theo",
|
||||||
"Open user settings": "Mở cài đặt người dùng",
|
"Open user settings": "Mở cài đặt người dùng",
|
||||||
"Open": "Mở",
|
"Open": "Mở",
|
||||||
"Unable to load config file: please refresh the page to try again.": "Không thể tải tệp cấu hình: hãy làm mới trang để thử lại."
|
"Unable to load config file: please refresh the page to try again.": "Không thể tải tệp cấu hình: hãy làm mới trang để thử lại.",
|
||||||
|
"Failed to start": "Khởi động thất bại",
|
||||||
|
"Use %(brand)s on mobile": "Sử dụng %(brand)s trên di động",
|
||||||
|
"Powered by Matrix": "Được chạy bởi công nghệ Matrix",
|
||||||
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
|
"Missing indexeddb worker script!": "Thiếu tệp lệnh làm việc của indexeddb!",
|
||||||
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Thiết lập Element của bạn chứa JSON không hợp lệ. Vui lòng sửa vấn đề và tải lại trang.",
|
||||||
|
"Your Element is misconfigured": "Element của bạn bị thiết lập sai"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +1,37 @@
|
|||||||
{
|
{
|
||||||
"Dismiss": "标记为已读",
|
"Dismiss": "忽略",
|
||||||
"powered by Matrix": "由 Matrix 驱动",
|
"powered by Matrix": "由 Matrix 驱动",
|
||||||
"Unknown device": "未知设备",
|
"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 Element": "欢迎来到 Element",
|
"Welcome to Element": "欢迎来到 Element",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化、加密聊天&与协作,由 [matrix] 驱动",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化、加密聊天与协作,由 [matrix] 驱动",
|
||||||
"Sign In": "登入",
|
"Sign In": "登录",
|
||||||
"Create Account": "创建账户",
|
"Create Account": "创建账号",
|
||||||
"Explore rooms": "探索聊天室",
|
"Explore rooms": "探索聊天室",
|
||||||
"The message from the parser is: %(message)s": "语法分析器的信息:%(message)s",
|
"The message from the parser is: %(message)s": "语法分析器的信息:%(message)s",
|
||||||
"Invalid JSON": "无效的 JSON",
|
"Invalid JSON": "无效的 JSON",
|
||||||
"Unexpected error preparing the app. See console for details.": "软件准备时出错,详细信息请查看控制台。",
|
"Unexpected error preparing the app. See console for details.": "软件准备时出错,详细信息请查看控制台。",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "无效的配置:只能设置 default_server_config,default_server_name,或 default_hs_url 中的一个。",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "无效的配置:只能设置 default_server_config,default_server_name 或 default_hs_url 中的一个。",
|
||||||
"Invalid configuration: no default server specified.": "无效的配置:没有设置默认服务器。",
|
"Invalid configuration: no default server specified.": "无效的配置:没有设置默认服务器。",
|
||||||
"Missing indexeddb worker script!": "缺少 IndexedDB 辅助脚本!",
|
"Missing indexeddb worker script!": "缺少 IndexedDB 辅助脚本!",
|
||||||
"Unable to load config file: please refresh the page to try again.": "无法加载配置文件:请再次刷新页面。",
|
"Unable to load config file: please refresh the page to try again.": "无法加载配置文件:请再次刷新页面。",
|
||||||
"Open user settings": "打开用户设置",
|
"Open user settings": "打开用户设置",
|
||||||
"Previous/next recently visited room or community": "上一个 / 下一个最近访问的聊天室或社区",
|
"Previous/next recently visited room or community": "上一个 / 下一个最近访问的聊天室或社区",
|
||||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s 桌面版 (%(platformName)s)",
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s 桌面版(%(platformName)s)",
|
||||||
"Go to your browser to complete Sign In": "去您的浏览器完成登录",
|
"Go to your browser to complete Sign In": "转到您的浏览器以完成登录",
|
||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
"Unsupported browser": "不支持的浏览器",
|
"Unsupported browser": "不支持的浏览器",
|
||||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "请安装 <chromeLink>Chrome</chromeLink>、<firefoxLink>Firefox</firefoxLink> 或 <safariLink>Safari</safariLink> 以获得最佳体验。",
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "请安装 <chromeLink>Chrome</chromeLink>、<firefoxLink>Firefox</firefoxLink> 或 <safariLink>Safari</safariLink> 以获得最佳体验。",
|
||||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "您可以继续使用您目前的浏览器,但部分或全部的功能可能无法正常工作,应用程序的外观可能也看起来不正确。",
|
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "您可以继续使用您目前的浏览器,但部分或全部的功能可能无法正常工作,应用程序的外观可能也看起来不正确。",
|
||||||
"I understand the risks and wish to continue": "我了解风险并希望继续",
|
"I understand the risks and wish to continue": "我了解风险并希望继续",
|
||||||
"Go to element.io": "去 element.io",
|
"Go to element.io": "前往 element.io",
|
||||||
"Failed to start": "启动失败",
|
"Failed to start": "启动失败",
|
||||||
"Your Element is misconfigured": "Element 配置错误",
|
"Your Element is misconfigured": "Element 配置错误",
|
||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element 配置文件中包含无效的JSON,请改正错误并重新加载页面。",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element 配置文件中包含无效的 JSON,请改正错误并重新加载页面。",
|
||||||
"Download Completed": "下载成功",
|
"Download Completed": "下载成功",
|
||||||
"Open": "打开",
|
"Open": "打开",
|
||||||
"Your browser can't run %(brand)s": "浏览器无法运行%(brand)s",
|
"Your browser can't run %(brand)s": "浏览器无法运行 %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "当前浏览器不支持%(brand)s调用的高级浏览器特性。",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "当前浏览器不支持 %(brand)s 所需的高级浏览器特性。",
|
||||||
"Powered by Matrix": "由 Matrix 驱动"
|
"Powered by Matrix": "由 Matrix 驱动",
|
||||||
|
"Use %(brand)s on mobile": "在移动设备上使用 %(brand)s"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element 的配置中包含無效JSON,請更正錯誤並重新加載網頁。",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element 的配置中包含無效JSON,請更正錯誤並重新加載網頁。",
|
||||||
"Your browser can't run %(brand)s": "當前瀏覽器無法運行%(brand)s",
|
"Your browser can't run %(brand)s": "當前瀏覽器無法運行%(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "當前瀏覽器不支持%(brand)s使用的高級特性。",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "當前瀏覽器不支持%(brand)s使用的高級特性。",
|
||||||
"Powered by Matrix": "由 Matrix 提供"
|
"Powered by Matrix": "由 Matrix 提供",
|
||||||
|
"Use %(brand)s on mobile": "在行動裝置上使用 %(brand)s"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
|||||||
|
|
||||||
import {parseQs, parseQsFromFragment} from './url_utils';
|
import {parseQs, parseQsFromFragment} from './url_utils';
|
||||||
import VectorBasePlatform from "./platform/VectorBasePlatform";
|
import VectorBasePlatform from "./platform/VectorBasePlatform";
|
||||||
|
import {createClient} from "matrix-js-sdk/src/matrix";
|
||||||
|
|
||||||
let lastLocationHashSet: string = null;
|
let lastLocationHashSet: string = null;
|
||||||
|
|
||||||
@@ -153,6 +154,26 @@ export async function loadApp(fragParams: {}) {
|
|||||||
|
|
||||||
// Don't bother loading the app until the config is verified
|
// Don't bother loading the app until the config is verified
|
||||||
const config = await verifyServerConfig();
|
const config = await verifyServerConfig();
|
||||||
|
|
||||||
|
// Before we continue, let's see if we're supposed to do an SSO redirect
|
||||||
|
const [userId] = await Lifecycle.getStoredSessionOwner();
|
||||||
|
const hasPossibleToken = !!userId;
|
||||||
|
const isReturningFromSso = !!params.loginToken;
|
||||||
|
const autoRedirect = config['sso_immediate_redirect'] === true;
|
||||||
|
if (!hasPossibleToken && !isReturningFromSso && autoRedirect) {
|
||||||
|
console.log("Bypassing app load to redirect to SSO");
|
||||||
|
const tempCli = createClient({
|
||||||
|
baseUrl: config['validated_server_config'].hsUrl,
|
||||||
|
idBaseUrl: config['validated_server_config'].isUrl,
|
||||||
|
});
|
||||||
|
PlatformPeg.get().startSingleSignOn(tempCli, "sso", `/${getScreenFromLocation(window.location).screen}`);
|
||||||
|
|
||||||
|
// We return here because startSingleSignOn() will asynchronously redirect us. We don't
|
||||||
|
// care to wait for it, and don't want to show any UI while we wait (not even half a welcome
|
||||||
|
// page). As such, just don't even bother loading the MatrixChat component.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const MatrixChat = sdk.getComponent('structures.MatrixChat');
|
const MatrixChat = sdk.getComponent('structures.MatrixChat');
|
||||||
return <MatrixChat
|
return <MatrixChat
|
||||||
onNewScreen={onNewScreen}
|
onNewScreen={onNewScreen}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
<meta name="msapplication-TileImage" content="<%= require('../../res/vector-icons/mstile-150.png') %>">
|
<meta name="msapplication-TileImage" content="<%= require('../../res/vector-icons/mstile-150.png') %>">
|
||||||
<meta name="msapplication-config" content="<%= require('../../res/vector-icons/browserconfig.xml') %>">
|
<meta name="msapplication-config" content="<%= require('../../res/vector-icons/browserconfig.xml') %>">
|
||||||
<meta name="theme-color" content="#ffffff">
|
<meta name="theme-color" content="#ffffff">
|
||||||
<meta property="og:image" content="<%= htmlWebpackPlugin.options.vars.og_image_url %>" />
|
<meta property="og:image" content="<%= og_image_url %>" />
|
||||||
<meta http-equiv="Content-Security-Policy" content="
|
<meta http-equiv="Content-Security-Policy" content="
|
||||||
default-src 'none';
|
default-src 'none';
|
||||||
style-src 'self' 'unsafe-inline';
|
style-src 'self' 'unsafe-inline';
|
||||||
@@ -49,11 +49,24 @@
|
|||||||
<link rel="stylesheet" href="<%= file %>">
|
<link rel="stylesheet" href="<%= file %>">
|
||||||
<% }
|
<% }
|
||||||
} %>
|
} %>
|
||||||
|
|
||||||
|
<% for (var i=0; i < htmlWebpackPlugin.tags.headTags.length; i++) {
|
||||||
|
var tag = htmlWebpackPlugin.tags.headTags[i];
|
||||||
|
var path = tag.attributes && tag.attributes.href;
|
||||||
|
if (path.indexOf("Inter") !== -1) { %>
|
||||||
|
<link rel="preload" as="font" href="<%= path %>" crossorigin="anonymous"/>
|
||||||
|
<% }
|
||||||
|
} %>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body style="height: 100%; margin: 0;" data-vector-indexeddb-worker-script="<%= htmlWebpackPlugin.files.chunks['indexeddb-worker'].entry %>">
|
<body
|
||||||
|
style="height: 100%; margin: 0;"
|
||||||
|
data-vector-indexeddb-worker-script="<%= htmlWebpackPlugin.files.js.find(entry => entry.includes("indexeddb-worker.js")) %>"
|
||||||
|
data-vector-recorder-worklet-script="<%= htmlWebpackPlugin.files.js.find(entry => entry.includes("recorder-worklet.js")) %>"
|
||||||
|
>
|
||||||
<noscript>Sorry, Element requires JavaScript to be enabled.</noscript> <!-- TODO: Translate this? -->
|
<noscript>Sorry, Element requires JavaScript to be enabled.</noscript> <!-- TODO: Translate this? -->
|
||||||
<section id="matrixchat" style="height: 100%; overflow: auto;" class="notranslate"></section>
|
<section id="matrixchat" style="height: 100%; overflow: auto;" class="notranslate"></section>
|
||||||
<script src="<%= htmlWebpackPlugin.files.chunks['bundle'].entry %>"></script>
|
<script src="<%= htmlWebpackPlugin.files.js.find(entry => entry.includes("bundle.js")) %>"></script>
|
||||||
|
|
||||||
<!-- Legacy supporting Prefetch images -->
|
<!-- Legacy supporting Prefetch images -->
|
||||||
<img src="<%= require('matrix-react-sdk/res/img/warning.svg') %>" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
|
<img src="<%= require('matrix-react-sdk/res/img/warning.svg') %>" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
|
||||||
|
|||||||
@@ -51,6 +51,9 @@ function checkBrowserFeatures() {
|
|||||||
// ES2018: http://262.ecma-international.org/9.0/#sec-promise.prototype.finally
|
// ES2018: http://262.ecma-international.org/9.0/#sec-promise.prototype.finally
|
||||||
window.Modernizr.addTest("promiseprototypefinally", () =>
|
window.Modernizr.addTest("promiseprototypefinally", () =>
|
||||||
typeof window.Promise?.prototype?.finally === "function");
|
typeof window.Promise?.prototype?.finally === "function");
|
||||||
|
// ES2020: http://262.ecma-international.org/#sec-promise.allsettled
|
||||||
|
window.Modernizr.addTest("promiseallsettled", () =>
|
||||||
|
typeof window.Promise?.allSettled === "function");
|
||||||
// ES2018: https://262.ecma-international.org/9.0/#sec-get-regexp.prototype.dotAll
|
// ES2018: https://262.ecma-international.org/9.0/#sec-get-regexp.prototype.dotAll
|
||||||
window.Modernizr.addTest("regexpdotall", () => (
|
window.Modernizr.addTest("regexpdotall", () => (
|
||||||
window.RegExp?.prototype &&
|
window.RegExp?.prototype &&
|
||||||
@@ -92,6 +95,7 @@ async function start() {
|
|||||||
// load init.ts async so that its code is not executed immediately and we can catch any exceptions
|
// load init.ts async so that its code is not executed immediately and we can catch any exceptions
|
||||||
const {
|
const {
|
||||||
rageshakePromise,
|
rageshakePromise,
|
||||||
|
setupLogStorage,
|
||||||
preparePlatform,
|
preparePlatform,
|
||||||
loadOlm,
|
loadOlm,
|
||||||
loadConfig,
|
loadConfig,
|
||||||
@@ -138,6 +142,9 @@ async function start() {
|
|||||||
await settled(loadConfigPromise); // wait for it to settle
|
await settled(loadConfigPromise); // wait for it to settle
|
||||||
// keep initialising so that we can show any possible error with as many features (theme, i18n) as possible
|
// keep initialising so that we can show any possible error with as many features (theme, i18n) as possible
|
||||||
|
|
||||||
|
// now that the config is ready, try to persist logs
|
||||||
|
const persistLogsPromise = setupLogStorage();
|
||||||
|
|
||||||
// Load language after loading config.json so that settingsDefaults.language can be applied
|
// Load language after loading config.json so that settingsDefaults.language can be applied
|
||||||
const loadLanguagePromise = loadLanguage();
|
const loadLanguagePromise = loadLanguage();
|
||||||
// as quickly as we possibly can, set a default theme...
|
// as quickly as we possibly can, set a default theme...
|
||||||
@@ -197,6 +204,11 @@ async function start() {
|
|||||||
await loadThemePromise;
|
await loadThemePromise;
|
||||||
await loadLanguagePromise;
|
await loadLanguagePromise;
|
||||||
|
|
||||||
|
// We don't care if the log persistence made it through successfully, but we do want to
|
||||||
|
// make sure it had a chance to load before we move on. It's prepared much higher up in
|
||||||
|
// the process, making this the first time we check that it did something.
|
||||||
|
await settled(persistLogsPromise);
|
||||||
|
|
||||||
// Finally, load the app. All of the other react-sdk imports are in this file which causes the skinner to
|
// Finally, load the app. All of the other react-sdk imports are in this file which causes the skinner to
|
||||||
// run on the components.
|
// run on the components.
|
||||||
await loadApp(fragparts.params);
|
await loadApp(fragparts.params);
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ limitations under the License.
|
|||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import olmWasmPath from "olm/olm.wasm";
|
import olmWasmPath from "@matrix-org/olm/olm.wasm";
|
||||||
import Olm from 'olm';
|
import Olm from '@matrix-org/olm';
|
||||||
import * as ReactDOM from "react-dom";
|
import * as ReactDOM from "react-dom";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ import PlatformPeg from "matrix-react-sdk/src/PlatformPeg";
|
|||||||
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
||||||
import {setTheme} from "matrix-react-sdk/src/theme";
|
import {setTheme} from "matrix-react-sdk/src/theme";
|
||||||
|
|
||||||
import { initRageshake } from "./rageshakesetup";
|
import {initRageshake, initRageshakeStore} from "./rageshakesetup";
|
||||||
|
|
||||||
|
|
||||||
export const rageshakePromise = initRageshake();
|
export const rageshakePromise = initRageshake();
|
||||||
@@ -51,6 +51,14 @@ export function preparePlatform() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function setupLogStorage() {
|
||||||
|
if (SdkConfig.get().bug_report_endpoint_url) {
|
||||||
|
return initRageshakeStore();
|
||||||
|
}
|
||||||
|
console.warn("No bug report endpoint set - logs will not be persisted");
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
export async function loadConfig() {
|
export async function loadConfig() {
|
||||||
// XXX: We call this twice, once here and once in MatrixChat as a prop. We call it here to ensure
|
// XXX: We call this twice, once here and once in MatrixChat as a prop. We call it here to ensure
|
||||||
// granular settings are loaded correctly and to avoid duplicating the override logic for the theme.
|
// granular settings are loaded correctly and to avoid duplicating the override logic for the theme.
|
||||||
|
|||||||
@@ -260,6 +260,7 @@ body {
|
|||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
</a>
|
||||||
<a href="https://f-droid.org/repository/browse/?fdid=im.vector.app" target="_blank" class="mx_ClearDecoration">
|
<a href="https://f-droid.org/repository/browse/?fdid=im.vector.app" target="_blank" class="mx_ClearDecoration">
|
||||||
<svg width="164px" height="48px" viewBox="0 0 157 46" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
<svg width="164px" height="48px" viewBox="0 0 157 46" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<desc>Get it on F-Droid.</desc>
|
<desc>Get it on F-Droid.</desc>
|
||||||
|
|||||||
@@ -399,6 +399,18 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
|||||||
return this._ipcCall('setAutoLaunchEnabled', enabled);
|
return this._ipcCall('setAutoLaunchEnabled', enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
supportsWarnBeforeExit(): boolean {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
async shouldWarnBeforeExit(): Promise<boolean> {
|
||||||
|
return this._ipcCall('shouldWarnBeforeExit');
|
||||||
|
}
|
||||||
|
|
||||||
|
async setWarnBeforeExit(enabled: boolean): Promise<void> {
|
||||||
|
return this._ipcCall('setWarnBeforeExit', enabled);
|
||||||
|
}
|
||||||
|
|
||||||
supportsAutoHideMenuBar(): boolean {
|
supportsAutoHideMenuBar(): boolean {
|
||||||
// This is irelevant on Mac as Menu bars don't live in the app window
|
// This is irelevant on Mac as Menu bars don't live in the app window
|
||||||
return !isMac;
|
return !isMac;
|
||||||
@@ -498,6 +510,10 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
|||||||
return this.eventIndexManager;
|
return this.eventIndexManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async setLanguage(preferredLangs: string[]) {
|
||||||
|
return this._ipcCall('setLanguage', preferredLangs);
|
||||||
|
}
|
||||||
|
|
||||||
setSpellCheckLanguages(preferredLangs: string[]) {
|
setSpellCheckLanguages(preferredLangs: string[]) {
|
||||||
this._ipcCall('setSpellCheckLanguages', preferredLangs).catch(error => {
|
this._ipcCall('setSpellCheckLanguages', preferredLangs).catch(error => {
|
||||||
console.log("Failed to send setSpellCheckLanguages IPC to Electron");
|
console.log("Failed to send setSpellCheckLanguages IPC to Electron");
|
||||||
|
|||||||
@@ -31,11 +31,12 @@ import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
|||||||
import sendBugReport from "matrix-react-sdk/src/rageshake/submit-rageshake";
|
import sendBugReport from "matrix-react-sdk/src/rageshake/submit-rageshake";
|
||||||
|
|
||||||
export function initRageshake() {
|
export function initRageshake() {
|
||||||
const prom = rageshake.init();
|
// we manually check persistence for rageshakes ourselves
|
||||||
|
const prom = rageshake.init(/*setUpPersistence=*/false);
|
||||||
prom.then(() => {
|
prom.then(() => {
|
||||||
console.log("Initialised rageshake.");
|
console.log("Initialised rageshake.");
|
||||||
console.log("To fix line numbers in Chrome: " +
|
console.log("To fix line numbers in Chrome: " +
|
||||||
"Meatball menu → Settings → Blackboxing → Add /rageshake\\.js$");
|
"Meatball menu → Settings → Ignore list → Add /rageshake\\.js$");
|
||||||
|
|
||||||
window.addEventListener('beforeunload', (e) => {
|
window.addEventListener('beforeunload', (e) => {
|
||||||
console.log('element-web closing');
|
console.log('element-web closing');
|
||||||
@@ -50,6 +51,10 @@ export function initRageshake() {
|
|||||||
return prom;
|
return prom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function initRageshakeStore() {
|
||||||
|
return rageshake.tryInitStorage();
|
||||||
|
}
|
||||||
|
|
||||||
window.mxSendRageshake = function(text: string, withLogs?: boolean) {
|
window.mxSendRageshake = function(text: string, withLogs?: boolean) {
|
||||||
const url = SdkConfig.get().bug_report_endpoint_url;
|
const url = SdkConfig.get().bug_report_endpoint_url;
|
||||||
if (!url) {
|
if (!url) {
|
||||||
|
|||||||
@@ -4,20 +4,29 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
|||||||
const TerserPlugin = require('terser-webpack-plugin');
|
const TerserPlugin = require('terser-webpack-plugin');
|
||||||
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
|
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
|
||||||
const webpack = require("webpack");
|
const webpack = require("webpack");
|
||||||
|
const HtmlWebpackInjectPreload = require('@principalstudio/html-webpack-inject-preload');
|
||||||
|
|
||||||
let og_image_url = process.env.RIOT_OG_IMAGE_URL;
|
let ogImageUrl = process.env.RIOT_OG_IMAGE_URL;
|
||||||
if (!og_image_url) og_image_url = 'https://app.element.io/themes/element/img/logos/opengraph.png';
|
if (!ogImageUrl) ogImageUrl = 'https://app.element.io/themes/element/img/logos/opengraph.png';
|
||||||
|
|
||||||
const additionalPlugins = [
|
const additionalPlugins = [
|
||||||
// This is where you can put your customisation replacements.
|
// This is where you can put your customisation replacements.
|
||||||
];
|
];
|
||||||
|
|
||||||
module.exports = (env, argv) => {
|
module.exports = (env, argv) => {
|
||||||
|
let nodeEnv = argv.mode;
|
||||||
if (process.env.CI_PACKAGE) {
|
if (process.env.CI_PACKAGE) {
|
||||||
// Don't run minification for CI builds (this is only set for runs on develop)
|
// Don't run minification for CI builds (this is only set for runs on develop)
|
||||||
// We override this via environment variable to avoid duplicating the scripts
|
// We override this via environment variable to avoid duplicating the scripts
|
||||||
// in `package.json` just for a different mode.
|
// in `package.json` just for a different mode.
|
||||||
argv.mode = "development";
|
argv.mode = "development";
|
||||||
|
|
||||||
|
// More and more people are using nightly build as their main client
|
||||||
|
// Libraries like React have a development build that is useful
|
||||||
|
// when working on the app but adds significant runtime overhead
|
||||||
|
// We want to use the React production build but not compile the whole
|
||||||
|
// application to productions standards
|
||||||
|
nodeEnv = "production";
|
||||||
}
|
}
|
||||||
|
|
||||||
const development = {};
|
const development = {};
|
||||||
@@ -38,12 +47,18 @@ module.exports = (env, argv) => {
|
|||||||
return {
|
return {
|
||||||
...development,
|
...development,
|
||||||
|
|
||||||
|
node: {
|
||||||
|
// Mock out the NodeFS module: The opus decoder imports this wrongly.
|
||||||
|
fs: 'empty',
|
||||||
|
},
|
||||||
|
|
||||||
entry: {
|
entry: {
|
||||||
"bundle": "./src/vector/index.ts",
|
"bundle": "./src/vector/index.ts",
|
||||||
"indexeddb-worker": "./src/vector/indexeddb-worker.js",
|
"indexeddb-worker": "./src/vector/indexeddb-worker.js",
|
||||||
"mobileguide": "./src/vector/mobile_guide/index.js",
|
"mobileguide": "./src/vector/mobile_guide/index.js",
|
||||||
"jitsi": "./src/vector/jitsi/index.ts",
|
"jitsi": "./src/vector/jitsi/index.ts",
|
||||||
"usercontent": "./node_modules/matrix-react-sdk/src/usercontent/index.js",
|
"usercontent": "./node_modules/matrix-react-sdk/src/usercontent/index.js",
|
||||||
|
"recorder-worklet": "./node_modules/matrix-react-sdk/src/voice/RecorderWorklet.ts",
|
||||||
|
|
||||||
// CSS themes
|
// CSS themes
|
||||||
"theme-legacy": "./node_modules/matrix-react-sdk/res/themes/legacy-light/css/legacy-light.scss",
|
"theme-legacy": "./node_modules/matrix-react-sdk/res/themes/legacy-light/css/legacy-light.scss",
|
||||||
@@ -80,6 +95,10 @@ module.exports = (env, argv) => {
|
|||||||
// we use a CSS optimizer too and need to manage it ourselves.
|
// we use a CSS optimizer too and need to manage it ourselves.
|
||||||
minimize: argv.mode === 'production',
|
minimize: argv.mode === 'production',
|
||||||
minimizer: argv.mode === 'production' ? [new TerserPlugin({}), new OptimizeCSSAssetsPlugin({})] : [],
|
minimizer: argv.mode === 'production' ? [new TerserPlugin({}), new OptimizeCSSAssetsPlugin({})] : [],
|
||||||
|
|
||||||
|
// Set the value of `process.env.NODE_ENV` for libraries like React
|
||||||
|
// See also https://v4.webpack.js.org/configuration/optimization/#optimizationnodeenv
|
||||||
|
nodeEnv,
|
||||||
},
|
},
|
||||||
|
|
||||||
resolve: {
|
resolve: {
|
||||||
@@ -152,8 +171,8 @@ module.exports = (env, argv) => {
|
|||||||
},
|
},
|
||||||
loader: 'babel-loader',
|
loader: 'babel-loader',
|
||||||
options: {
|
options: {
|
||||||
cacheDirectory: true
|
cacheDirectory: true,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /\.css$/,
|
test: /\.css$/,
|
||||||
@@ -164,7 +183,7 @@ module.exports = (env, argv) => {
|
|||||||
options: {
|
options: {
|
||||||
importLoaders: 1,
|
importLoaders: 1,
|
||||||
sourceMap: true,
|
sourceMap: true,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
loader: 'postcss-loader',
|
loader: 'postcss-loader',
|
||||||
@@ -202,7 +221,7 @@ module.exports = (env, argv) => {
|
|||||||
"local-plugins": true,
|
"local-plugins": true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
]
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /\.scss$/,
|
test: /\.scss$/,
|
||||||
@@ -213,7 +232,7 @@ module.exports = (env, argv) => {
|
|||||||
options: {
|
options: {
|
||||||
importLoaders: 1,
|
importLoaders: 1,
|
||||||
sourceMap: true,
|
sourceMap: true,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
loader: 'postcss-loader',
|
loader: 'postcss-loader',
|
||||||
@@ -231,7 +250,7 @@ module.exports = (env, argv) => {
|
|||||||
require("postcss-easings")(),
|
require("postcss-easings")(),
|
||||||
require("postcss-strip-inline-comments")(),
|
require("postcss-strip-inline-comments")(),
|
||||||
require("postcss-hexrgba")(),
|
require("postcss-hexrgba")(),
|
||||||
require("postcss-calc")({warnWhenCannotResolve: true}),
|
require("postcss-calc")(),
|
||||||
|
|
||||||
// It's important that this plugin is last otherwise we end
|
// It's important that this plugin is last otherwise we end
|
||||||
// up with broken CSS.
|
// up with broken CSS.
|
||||||
@@ -241,7 +260,7 @@ module.exports = (env, argv) => {
|
|||||||
"local-plugins": true,
|
"local-plugins": true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
]
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /\.wasm$/,
|
test: /\.wasm$/,
|
||||||
@@ -252,6 +271,55 @@ module.exports = (env, argv) => {
|
|||||||
outputPath: '.',
|
outputPath: '.',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// Fix up the name of the opus-recorder worker (react-sdk dependency).
|
||||||
|
// We more or less just want it to be clear it's for opus and not something else.
|
||||||
|
test: /encoderWorker\.min\.js$/,
|
||||||
|
loader: "file-loader",
|
||||||
|
type: "javascript/auto", // https://github.com/webpack/webpack/issues/6725
|
||||||
|
options: {
|
||||||
|
// We deliberately override the name so it makes sense in debugging
|
||||||
|
name: 'opus-encoderWorker.min.[hash:7].[ext]',
|
||||||
|
outputPath: '.',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// This is from the same place as the encoderWorker above, but only needed
|
||||||
|
// for Safari support.
|
||||||
|
test: /decoderWorker\.min\.js$/,
|
||||||
|
loader: "file-loader",
|
||||||
|
type: "javascript/auto", // https://github.com/webpack/webpack/issues/6725
|
||||||
|
options: {
|
||||||
|
// We deliberately override the name so it makes sense in debugging
|
||||||
|
name: 'opus-decoderWorker.min.[hash:7].[ext]',
|
||||||
|
outputPath: '.',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// This is from the same place as the encoderWorker above, but only needed
|
||||||
|
// for Safari support.
|
||||||
|
test: /decoderWorker\.min\.wasm$/,
|
||||||
|
loader: "file-loader",
|
||||||
|
type: "javascript/auto", // https://github.com/webpack/webpack/issues/6725
|
||||||
|
options: {
|
||||||
|
// We deliberately don't change the name because the decoderWorker has this
|
||||||
|
// hardcoded. This is here to avoid the default wasm rule from adding a hash.
|
||||||
|
name: 'decoderWorker.min.wasm',
|
||||||
|
outputPath: '.',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// This is from the same place as the encoderWorker above, but only needed
|
||||||
|
// for Safari support.
|
||||||
|
test: /waveWorker\.min\.js$/,
|
||||||
|
loader: "file-loader",
|
||||||
|
type: "javascript/auto", // https://github.com/webpack/webpack/issues/6725
|
||||||
|
options: {
|
||||||
|
// We deliberately override the name so it makes sense in debugging
|
||||||
|
name: 'wave-encoderWorker.min.[hash:7].[ext]',
|
||||||
|
outputPath: '.',
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
// cache-bust languages.json file placed in
|
// cache-bust languages.json file placed in
|
||||||
// element-web/webapp/i18n during build by copy-res.js
|
// element-web/webapp/i18n during build by copy-res.js
|
||||||
@@ -299,7 +367,7 @@ module.exports = (env, argv) => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
]
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
plugins: [
|
plugins: [
|
||||||
@@ -318,9 +386,9 @@ module.exports = (env, argv) => {
|
|||||||
// of the themes and which chunks we actually care about.
|
// of the themes and which chunks we actually care about.
|
||||||
inject: false,
|
inject: false,
|
||||||
excludeChunks: ['mobileguide', 'usercontent', 'jitsi'],
|
excludeChunks: ['mobileguide', 'usercontent', 'jitsi'],
|
||||||
minify: argv.mode === 'production',
|
minify: false,
|
||||||
vars: {
|
templateParameters: {
|
||||||
og_image_url: og_image_url,
|
og_image_url: ogImageUrl,
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
|
||||||
@@ -328,7 +396,7 @@ module.exports = (env, argv) => {
|
|||||||
new HtmlWebpackPlugin({
|
new HtmlWebpackPlugin({
|
||||||
template: './src/vector/jitsi/index.html',
|
template: './src/vector/jitsi/index.html',
|
||||||
filename: 'jitsi.html',
|
filename: 'jitsi.html',
|
||||||
minify: argv.mode === 'production',
|
minify: false,
|
||||||
chunks: ['jitsi'],
|
chunks: ['jitsi'],
|
||||||
}),
|
}),
|
||||||
|
|
||||||
@@ -336,7 +404,7 @@ module.exports = (env, argv) => {
|
|||||||
new HtmlWebpackPlugin({
|
new HtmlWebpackPlugin({
|
||||||
template: './src/vector/mobile_guide/index.html',
|
template: './src/vector/mobile_guide/index.html',
|
||||||
filename: 'mobile_guide/index.html',
|
filename: 'mobile_guide/index.html',
|
||||||
minify: argv.mode === 'production',
|
minify: false,
|
||||||
chunks: ['mobileguide'],
|
chunks: ['mobileguide'],
|
||||||
}),
|
}),
|
||||||
|
|
||||||
@@ -344,13 +412,13 @@ module.exports = (env, argv) => {
|
|||||||
new HtmlWebpackPlugin({
|
new HtmlWebpackPlugin({
|
||||||
template: './src/vector/static/unable-to-load.html',
|
template: './src/vector/static/unable-to-load.html',
|
||||||
filename: 'static/unable-to-load.html',
|
filename: 'static/unable-to-load.html',
|
||||||
minify: argv.mode === 'production',
|
minify: false,
|
||||||
chunks: [],
|
chunks: [],
|
||||||
}),
|
}),
|
||||||
new HtmlWebpackPlugin({
|
new HtmlWebpackPlugin({
|
||||||
template: './src/vector/static/incompatible-browser.html',
|
template: './src/vector/static/incompatible-browser.html',
|
||||||
filename: 'static/incompatible-browser.html',
|
filename: 'static/incompatible-browser.html',
|
||||||
minify: argv.mode === 'production',
|
minify: false,
|
||||||
chunks: [],
|
chunks: [],
|
||||||
}),
|
}),
|
||||||
|
|
||||||
@@ -358,10 +426,14 @@ module.exports = (env, argv) => {
|
|||||||
new HtmlWebpackPlugin({
|
new HtmlWebpackPlugin({
|
||||||
template: './node_modules/matrix-react-sdk/src/usercontent/index.html',
|
template: './node_modules/matrix-react-sdk/src/usercontent/index.html',
|
||||||
filename: 'usercontent/index.html',
|
filename: 'usercontent/index.html',
|
||||||
minify: argv.mode === 'production',
|
minify: false,
|
||||||
chunks: ['usercontent'],
|
chunks: ['usercontent'],
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
new HtmlWebpackInjectPreload({
|
||||||
|
files: [{ match: /.*Inter.*\.woff2?$/ }],
|
||||||
|
}),
|
||||||
|
|
||||||
...additionalPlugins,
|
...additionalPlugins,
|
||||||
],
|
],
|
||||||
|
|
||||||
@@ -426,6 +498,7 @@ function getAssetOutputPath(url, resourcePath) {
|
|||||||
* be placed directly into things like CSS files.
|
* be placed directly into things like CSS files.
|
||||||
*
|
*
|
||||||
* @param {string} path Some path to a file.
|
* @param {string} path Some path to a file.
|
||||||
|
* @returns {string} converted path
|
||||||
*/
|
*/
|
||||||
function toPublicPath(path) {
|
function toPublicPath(path) {
|
||||||
return path.replace(/\\/g, '/');
|
return path.replace(/\\/g, '/');
|
||||||
|
|||||||
Reference in New Issue
Block a user