mirror of
https://github.com/element-hq/element-web.git
synced 2025-12-05 01:10:40 +00:00
Compare commits
361 Commits
v1.7.14
...
travis/inl
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6fd28421b3 | ||
|
|
e13cb66e32 | ||
|
|
ba28c6d57a | ||
|
|
36789fbd65 | ||
|
|
1c7828e7c2 | ||
|
|
597c18932b | ||
|
|
84b21576bd | ||
|
|
0c14e45d65 | ||
|
|
9789f411d0 | ||
|
|
127683e98a | ||
|
|
b7e9da9e40 | ||
|
|
8aba3cf437 | ||
|
|
bb10b7ad48 | ||
|
|
101e0592fe | ||
|
|
c10e8984e7 | ||
|
|
52e54b408f | ||
|
|
779a4912d5 | ||
|
|
cc81cc714c | ||
|
|
e2ce4239bd | ||
|
|
b8b13a6316 | ||
|
|
1c7cf8645e | ||
|
|
d9627cbe67 | ||
|
|
134618f4cd | ||
|
|
c191eb5462 | ||
|
|
dccbb79340 | ||
|
|
a67b2329ba | ||
|
|
4b092d49c6 | ||
|
|
49d103aab6 | ||
|
|
6afd289bcb | ||
|
|
4fc499b9e3 | ||
|
|
0469805eb1 | ||
|
|
df2654f94a | ||
|
|
3da0957859 | ||
|
|
5056e14060 | ||
|
|
655c7a9b29 | ||
|
|
bd60faec1f | ||
|
|
6b40714d80 | ||
|
|
f4e98baf16 | ||
|
|
53e8f5d3ff | ||
|
|
b910fcd38a | ||
|
|
4f0fccfe96 | ||
|
|
86d7652d93 | ||
|
|
c745991a9a | ||
|
|
0f7a42258c | ||
|
|
c7bb6b2272 | ||
|
|
b0bc4b2816 | ||
|
|
3586142d69 | ||
|
|
06798f3030 | ||
|
|
594c07b2d9 | ||
|
|
f94f97d83a | ||
|
|
799f60c0ee | ||
|
|
06af1f056f | ||
|
|
621e09ebbc | ||
|
|
8a0ed198e6 | ||
|
|
322cdb1bec | ||
|
|
8fadfb0a57 | ||
|
|
5417d70340 | ||
|
|
a9850008cf | ||
|
|
83f28d465b | ||
|
|
f0a8f166c9 | ||
|
|
f941169da3 | ||
|
|
4f13b707bb | ||
|
|
aff0c9823e | ||
|
|
c3c1a5da8d | ||
|
|
d35d6f253b | ||
|
|
29fb984062 | ||
|
|
6c3530d249 | ||
|
|
d63f5a2282 | ||
|
|
2b7dbb4fce | ||
|
|
aaecbab4b9 | ||
|
|
220ee62d38 | ||
|
|
8cf2ab436d | ||
|
|
4961037dbe | ||
|
|
5f15ee4ea5 | ||
|
|
9953bc3b22 | ||
|
|
29fd47d611 | ||
|
|
e18bf6be86 | ||
|
|
7562fd3703 | ||
|
|
57f0d5191d | ||
|
|
dd0e2e52f8 | ||
|
|
2e00314dc0 | ||
|
|
afb469ce42 | ||
|
|
31ec953a92 | ||
|
|
94a5cd3f83 | ||
|
|
c67951f254 | ||
|
|
aface37853 | ||
|
|
46af8ba17a | ||
|
|
beb922cbfa | ||
|
|
19a07bc4a2 | ||
|
|
438eef0acd | ||
|
|
e15d1c1501 | ||
|
|
92a5787528 | ||
|
|
af2da9d371 | ||
|
|
68c36ebb49 | ||
|
|
c4c1b728cc | ||
|
|
402f97b430 | ||
|
|
f998f85c3c | ||
|
|
78d6ad8f29 | ||
|
|
72e60efadc | ||
|
|
e91e513224 | ||
|
|
a500240d04 | ||
|
|
3e57378631 | ||
|
|
42e2ea877a | ||
|
|
2332cecb59 | ||
|
|
27a92a5c89 | ||
|
|
4ce13765f7 | ||
|
|
e562c54ddc | ||
|
|
993c2e50b5 | ||
|
|
11cc33c8d2 | ||
|
|
9f4d75f2ed | ||
|
|
52f469d7c9 | ||
|
|
29639bb0e6 | ||
|
|
0d4958319b | ||
|
|
dfd17fedfe | ||
|
|
cfadc616b2 | ||
|
|
816ea3d904 | ||
|
|
cefe8cf379 | ||
|
|
4acdb7c715 | ||
|
|
105d1c8c41 | ||
|
|
4f852f3d69 | ||
|
|
1b276c9e00 | ||
|
|
fb67a14486 | ||
|
|
ab828ac6d9 | ||
|
|
b22484d203 | ||
|
|
ff9df5dd1f | ||
|
|
5523d7e0f5 | ||
|
|
f2bb636373 | ||
|
|
b617cb78e7 | ||
|
|
c6e94c61db | ||
|
|
9a32dd7071 | ||
|
|
8d604ced78 | ||
|
|
56caad3ef2 | ||
|
|
0bce2de538 | ||
|
|
7c8ecaaca3 | ||
|
|
db0897f78e | ||
|
|
a34361fcd7 | ||
|
|
d2c161b451 | ||
|
|
93f1cb6ecb | ||
|
|
1f71eb1b33 | ||
|
|
92d63579af | ||
|
|
59f82eaf0a | ||
|
|
50adc958c3 | ||
|
|
173ca66f29 | ||
|
|
ade9babb80 | ||
|
|
d4627576c8 | ||
|
|
49d3d5dffe | ||
|
|
341c806ac1 | ||
|
|
2f9395e4a4 | ||
|
|
4b25054d92 | ||
|
|
e010e27f9d | ||
|
|
e31051e5ea | ||
|
|
3d47540846 | ||
|
|
d5a824d6dd | ||
|
|
75f6c017c1 | ||
|
|
8f0537f9a3 | ||
|
|
024549cef4 | ||
|
|
5af530c24e | ||
|
|
8cb5e47ee7 | ||
|
|
313e82ac2d | ||
|
|
9133b80f2b | ||
|
|
97925a6ad9 | ||
|
|
e40fa8823a | ||
|
|
bf5a69d3a0 | ||
|
|
4517e6512e | ||
|
|
86310a4de0 | ||
|
|
8140a9618e | ||
|
|
0f3623393f | ||
|
|
c34a36a9e2 | ||
|
|
d03edb91ea | ||
|
|
ab0677530b | ||
|
|
e7c722bb99 | ||
|
|
48613027fc | ||
|
|
d47948fb7b | ||
|
|
a47be2236b | ||
|
|
49b2f37dc8 | ||
|
|
089afaad93 | ||
|
|
86b0f898ec | ||
|
|
e66d500b02 | ||
|
|
9a1b667c27 | ||
|
|
b04f76dc27 | ||
|
|
cd8a9e44b3 | ||
|
|
5052f9bc43 | ||
|
|
c4c51945f0 | ||
|
|
4ab84d3b59 | ||
|
|
851d8e4265 | ||
|
|
151c365fd8 | ||
|
|
f728189445 | ||
|
|
b2a93c3b64 | ||
|
|
adac68ed13 | ||
|
|
342d0474fd | ||
|
|
f8b9958010 | ||
|
|
2a0a9c5f9e | ||
|
|
18c5d9a3a9 | ||
|
|
40f2ba8205 | ||
|
|
ec3b2c99e2 | ||
|
|
065fb13a56 | ||
|
|
5cb323feed | ||
|
|
12e2200b11 | ||
|
|
0aa6fbe3e2 | ||
|
|
51361acb1a | ||
|
|
c0bfc4eeb3 | ||
|
|
953b4675e0 | ||
|
|
a72ab0da04 | ||
|
|
cdc97a220a | ||
|
|
668abba95a | ||
|
|
042ce153ae | ||
|
|
2ff3f2d577 | ||
|
|
c5217b6d6d | ||
|
|
fff8ac231e | ||
|
|
0f126d88ec | ||
|
|
b0fc8572ad | ||
|
|
1da652ede3 | ||
|
|
532caff989 | ||
|
|
238ed786fd | ||
|
|
3275a0d819 | ||
|
|
a9abad3cfd | ||
|
|
4c574d63db | ||
|
|
8c98921842 | ||
|
|
92e55ac1c1 | ||
|
|
8bdbb5c989 | ||
|
|
2040ea2b82 | ||
|
|
0bbcda09af | ||
|
|
e077d9ca5f | ||
|
|
87e67d8168 | ||
|
|
0e14dc06fb | ||
|
|
58eca1aa7d | ||
|
|
f31b3c1c18 | ||
|
|
50fe0d26e5 | ||
|
|
21cadb8a3b | ||
|
|
1fe8f27cf7 | ||
|
|
dd5f9f4978 | ||
|
|
66145fca93 | ||
|
|
3cd5ad910d | ||
|
|
c4531585cb | ||
|
|
ecd8e627f2 | ||
|
|
96e097ebcb | ||
|
|
9bb657ada5 | ||
|
|
32e953a5a6 | ||
|
|
66080b5751 | ||
|
|
a728961631 | ||
|
|
1c51100c6c | ||
|
|
b302e14554 | ||
|
|
77482432c9 | ||
|
|
a5f7d75999 | ||
|
|
35d1c0d980 | ||
|
|
482c1b4db1 | ||
|
|
750082c37d | ||
|
|
852b7d0b89 | ||
|
|
b4c8cd5a4a | ||
|
|
3dc3d4a8d4 | ||
|
|
a7a70c2246 | ||
|
|
c395061a3d | ||
|
|
625e001592 | ||
|
|
2861089193 | ||
|
|
872a7d9699 | ||
|
|
554a9de7c7 | ||
|
|
5a5b820fe5 | ||
|
|
463de7f689 | ||
|
|
8ba51df384 | ||
|
|
e31b8ce85e | ||
|
|
a68306777d | ||
|
|
48884c711b | ||
|
|
799a14ebc6 | ||
|
|
6a84aa9403 | ||
|
|
d5325e203d | ||
|
|
e097a24afb | ||
|
|
567a4a6a1c | ||
|
|
0d6f4794d0 | ||
|
|
e1357879f0 | ||
|
|
b43d6536f5 | ||
|
|
e0e29996e0 | ||
|
|
9b119e3bc3 | ||
|
|
8c02abc88a | ||
|
|
7da72b219b | ||
|
|
2918ee3e1b | ||
|
|
edd85ad9e3 | ||
|
|
bf4df74c69 | ||
|
|
d8408933f1 | ||
|
|
ea498d663e | ||
|
|
b495af97e9 | ||
|
|
c667473258 | ||
|
|
ec781b3ebe | ||
|
|
c2e25fa427 | ||
|
|
02ffbd6f32 | ||
|
|
c41f164c75 | ||
|
|
d0b9b211c9 | ||
|
|
ed255e48f9 | ||
|
|
79303ec387 | ||
|
|
3360f02ed9 | ||
|
|
c4fa2d2585 | ||
|
|
c4545341ea | ||
|
|
ef839c45a7 | ||
|
|
9a8f9307fe | ||
|
|
a991156608 | ||
|
|
1b481c2a13 | ||
|
|
44fefec9ea | ||
|
|
110f4dc907 | ||
|
|
dab75ec0c2 | ||
|
|
c67906c3c6 | ||
|
|
aed9721936 | ||
|
|
344363d29d | ||
|
|
aef2ffb01b | ||
|
|
24cc106d90 | ||
|
|
ccc3038793 | ||
|
|
6844c8f92e | ||
|
|
a63bd875bc | ||
|
|
9084a70e2e | ||
|
|
1c63db6441 | ||
|
|
1a635f6bf0 | ||
|
|
ed05f9deae | ||
|
|
b4167eaeaf | ||
|
|
512212b021 | ||
|
|
d3b3bb42aa | ||
|
|
1c9d25986a | ||
|
|
a8a422105b | ||
|
|
078a1223b2 | ||
|
|
3419140bee | ||
|
|
13a5192995 | ||
|
|
7ae86af7df | ||
|
|
d8e0ea5791 | ||
|
|
11d54e926e | ||
|
|
301ea6a5f3 | ||
|
|
e743a12f30 | ||
|
|
8f409a8277 | ||
|
|
bb370f143c | ||
|
|
2d1d5e5066 | ||
|
|
354898376b | ||
|
|
899bcc067f | ||
|
|
58445efdde | ||
|
|
6e7826f416 | ||
|
|
f1e89bf833 | ||
|
|
d05c022d4f | ||
|
|
06611cb9cb | ||
|
|
64fd07ec73 | ||
|
|
deb40fe172 | ||
|
|
2ab0745063 | ||
|
|
278c81fbc6 | ||
|
|
7bdd2fd204 | ||
|
|
8d93991193 | ||
|
|
8c916721d2 | ||
|
|
40998b799a | ||
|
|
6583064cb4 | ||
|
|
6d251868a9 | ||
|
|
5b86aa3a7a | ||
|
|
4c1752e18c | ||
|
|
80e5c22065 | ||
|
|
9e2648877a | ||
|
|
19cc55f95d | ||
|
|
ab95183e4f | ||
|
|
1e1a14c9a9 | ||
|
|
89ce904ebb | ||
|
|
1dae7df28a | ||
|
|
a40cc4fa3e | ||
|
|
6092bb3ae0 | ||
|
|
65f37665e4 | ||
|
|
02ca5011a3 | ||
|
|
b06de25898 | ||
|
|
62a152b68a | ||
|
|
fe831dc8dd | ||
|
|
7ff2b598af | ||
|
|
1b8fe9e782 |
4
.github/ISSUE_TEMPLATE.md
vendored
4
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,3 +1,5 @@
|
||||
<!-- A picture's worth a thousand words: PLEASE INCLUDE A SCREENSHOT :P -->
|
||||
|
||||
<!-- Please report security issues by email to security@matrix.org -->
|
||||
|
||||
<!-- This is a bug report template. By following the instructions below and
|
||||
@@ -36,7 +38,7 @@ file a bug here too! -->
|
||||
|
||||
For the web app:
|
||||
|
||||
- **Browser**: Chrome, Safari, Firefox? which version?
|
||||
- **Browser**: Chrome, Firefox, Safari, Edge? which version?
|
||||
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
||||
- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web?
|
||||
|
||||
|
||||
6
.github/ISSUE_TEMPLATE/bug_report.md
vendored
6
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -2,11 +2,13 @@
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: bug
|
||||
labels: T-Defect
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!-- A picture's worth a thousand words: PLEASE INCLUDE A SCREENSHOT :P -->
|
||||
|
||||
<!-- Please report security issues by email to security@matrix.org -->
|
||||
|
||||
<!-- This is a bug report template. By following the instructions below and
|
||||
@@ -46,7 +48,7 @@ Logs being sent: yes/no
|
||||
|
||||
For the web app:
|
||||
|
||||
- **Browser**: Chrome, Safari, Firefox? which version?
|
||||
- **Browser**: Chrome, Firefox, Safari, Edge? which version?
|
||||
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
||||
- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web?
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name: Suggestion or Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: suggestion
|
||||
labels: T-Enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
---
|
||||
name: User Interface or Usability Bug report
|
||||
about: Please include screenshots in UI/UX bug reports
|
||||
title: ''
|
||||
labels: bug, ui/ux
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!-- A picture's worth a thousand words: PLEASE INCLUDE A SCREENSHOT :P -->
|
||||
|
||||
<!-- Please report security issues by email to security@matrix.org -->
|
||||
|
||||
<!-- This is a bug report template. By following the instructions below and
|
||||
filling out the sections with your information, you will help the us to get all
|
||||
the necessary data to fix your issue.
|
||||
|
||||
You can also preview your report before submitting it. You may remove sections
|
||||
that aren't relevant to your particular case.
|
||||
|
||||
Text between <!-- and --> marks will be invisible in the report.
|
||||
-->
|
||||
|
||||
### Description
|
||||
|
||||
Describe here the problem that you are experiencing, or the feature you are requesting.
|
||||
|
||||
### Steps to reproduce
|
||||
|
||||
- For bugs, list the steps
|
||||
- that reproduce the bug
|
||||
- using hyphens as bullet points
|
||||
|
||||
Describe how what happens differs from what you expected.
|
||||
|
||||
<!-- Please send us logs for your bug report. They're very important for bugs
|
||||
which are hard to reproduce. To do this, create this issue then go to your
|
||||
account settings and click 'Submit Debug Logs' from the Help & About tab -->
|
||||
Logs being sent: yes/no
|
||||
|
||||
<!-- Include screenshots if possible: you can drag and drop images below. -->
|
||||
|
||||
### Version information
|
||||
|
||||
<!-- IMPORTANT: please answer the following questions, to help us narrow down the problem -->
|
||||
|
||||
- **Platform**: web (in-browser) or desktop?
|
||||
|
||||
For the web app:
|
||||
|
||||
- **Browser**: Chrome, Safari, Firefox? which version?
|
||||
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
||||
- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web?
|
||||
|
||||
For the desktop app:
|
||||
|
||||
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
||||
- **Version**: 1.x.y <!-- check the user settings panel if unsure -->
|
||||
@@ -19,7 +19,7 @@ module.exports = {
|
||||
"at-rule-no-unknown": null,
|
||||
"no-descending-specificity": null,
|
||||
"scss/at-rule-no-unknown": [true, {
|
||||
// https://github.com/vector-im/riot-web/issues/10544
|
||||
// https://github.com/vector-im/element-web/issues/10544
|
||||
"ignoreAtRules": ["define-mixin"],
|
||||
}],
|
||||
}
|
||||
|
||||
@@ -16,3 +16,6 @@ include:
|
||||
|
||||
* Alexandr Korsak (https://github.com/oivoodoo)
|
||||
Improved multiple file uploading
|
||||
|
||||
* Thom Cleary (https://github.com/thomcatdotrocks)
|
||||
Small update for tarball deployment
|
||||
|
||||
232
CHANGELOG.md
232
CHANGELOG.md
@@ -1,3 +1,235 @@
|
||||
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)
|
||||
|
||||
* Upgrade to React SDK 3.16.0 and JS SDK 9.9.0
|
||||
|
||||
Changes in [1.7.23-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.23-rc.1) (2021-03-10)
|
||||
=========================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.22...v1.7.23-rc.1)
|
||||
|
||||
* Upgrade to React SDK 3.16.0-rc.2 and JS SDK 9.9.0-rc.1
|
||||
* Translations update from Weblate
|
||||
[\#16655](https://github.com/vector-im/element-web/pull/16655)
|
||||
* Improve docs for customisations
|
||||
[\#16652](https://github.com/vector-im/element-web/pull/16652)
|
||||
* Update triage guide to match the new label scheme
|
||||
[\#16612](https://github.com/vector-im/element-web/pull/16612)
|
||||
* Remove a couple useless 'use strict' calls
|
||||
[\#16650](https://github.com/vector-im/element-web/pull/16650)
|
||||
* Remove old conferencing doc
|
||||
[\#16648](https://github.com/vector-im/element-web/pull/16648)
|
||||
* Bump elliptic from 6.5.3 to 6.5.4
|
||||
[\#16644](https://github.com/vector-im/element-web/pull/16644)
|
||||
* Add option for audio live streaming
|
||||
[\#16604](https://github.com/vector-im/element-web/pull/16604)
|
||||
* Update velocity-animate dependency
|
||||
[\#16605](https://github.com/vector-im/element-web/pull/16605)
|
||||
* Add Edge to the supported tier
|
||||
[\#16611](https://github.com/vector-im/element-web/pull/16611)
|
||||
* Add multi language spell check
|
||||
[\#15851](https://github.com/vector-im/element-web/pull/15851)
|
||||
* Document feature_spaces
|
||||
[\#16538](https://github.com/vector-im/element-web/pull/16538)
|
||||
|
||||
Changes in [1.7.22](https://github.com/vector-im/element-web/releases/tag/v1.7.22) (2021-03-01)
|
||||
===============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.22-rc.1...v1.7.22)
|
||||
|
||||
## Security notice
|
||||
|
||||
Element Web 1.7.22 fixes (by upgrading to matrix-react-sdk 3.15.0) a low
|
||||
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
|
||||
`blob` origin that cannot access Matrix user data, so messages and secrets are
|
||||
not at risk. Thanks to @keerok for responsibly disclosing this via Matrix's
|
||||
Security Disclosure Policy.
|
||||
|
||||
## All changes
|
||||
|
||||
* Upgrade to React SDK 3.15.0 and JS SDK 9.8.0
|
||||
|
||||
Changes in [1.7.22-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.22-rc.1) (2021-02-24)
|
||||
=========================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.21...v1.7.22-rc.1)
|
||||
|
||||
* Upgrade to React SDK 3.15.0-rc.1 and JS SDK 9.8.0-rc.1
|
||||
* Translations update from Weblate
|
||||
[\#16529](https://github.com/vector-im/element-web/pull/16529)
|
||||
* Add hostSignup config for element.io clients
|
||||
[\#16515](https://github.com/vector-im/element-web/pull/16515)
|
||||
* VoIP virtual rooms, mkII
|
||||
[\#16442](https://github.com/vector-im/element-web/pull/16442)
|
||||
* Jitsi widget: Read room name from query parameters
|
||||
[\#16456](https://github.com/vector-im/element-web/pull/16456)
|
||||
* fix / sso: make sure to delete only loginToken after redirect
|
||||
[\#16415](https://github.com/vector-im/element-web/pull/16415)
|
||||
* Disable Countly
|
||||
[\#16433](https://github.com/vector-im/element-web/pull/16433)
|
||||
|
||||
Changes in [1.7.21](https://github.com/vector-im/element-web/releases/tag/v1.7.21) (2021-02-16)
|
||||
===============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.21-rc.1...v1.7.21)
|
||||
|
||||
* Upgrade to React SDK 3.14.0 and JS SDK 9.7.0
|
||||
|
||||
Changes in [1.7.21-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.21-rc.1) (2021-02-10)
|
||||
=========================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.20...v1.7.21-rc.1)
|
||||
|
||||
* Upgrade to React SDK 3.14.0-rc.1 and JS SDK 9.7.0-rc.1
|
||||
* Translations update from Weblate
|
||||
[\#16427](https://github.com/vector-im/element-web/pull/16427)
|
||||
* Add RegExp dotAll feature test
|
||||
[\#16408](https://github.com/vector-im/element-web/pull/16408)
|
||||
* Fix Electron type merging
|
||||
[\#16405](https://github.com/vector-im/element-web/pull/16405)
|
||||
* README: remove Jenkins reference
|
||||
[\#16381](https://github.com/vector-im/element-web/pull/16381)
|
||||
* Enable PostCSS Calc in webpack builds
|
||||
[\#16307](https://github.com/vector-im/element-web/pull/16307)
|
||||
* Add configuration security best practices to the README.
|
||||
[\#16367](https://github.com/vector-im/element-web/pull/16367)
|
||||
* Upgrade matrix-widget-api
|
||||
[\#16347](https://github.com/vector-im/element-web/pull/16347)
|
||||
|
||||
Changes in [1.7.20](https://github.com/vector-im/element-web/releases/tag/v1.7.20) (2021-02-04)
|
||||
===============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.19...v1.7.20)
|
||||
|
||||
* Upgrade to React SDK 3.13.1
|
||||
|
||||
Changes in [1.7.19](https://github.com/vector-im/element-web/releases/tag/v1.7.19) (2021-02-03)
|
||||
===============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.19-rc.1...v1.7.19)
|
||||
|
||||
* Upgrade to React SDK 3.13.0 and JS SDK 9.6.0
|
||||
* [Release] Upgrade matrix-widget-api
|
||||
[\#16348](https://github.com/vector-im/element-web/pull/16348)
|
||||
|
||||
Changes in [1.7.19-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.19-rc.1) (2021-01-29)
|
||||
=========================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.18...v1.7.19-rc.1)
|
||||
|
||||
* Upgrade to React SDK 3.13.0-rc.1 and JS SDK 9.6.0-rc.1
|
||||
* Translations update from Weblate
|
||||
[\#16314](https://github.com/vector-im/element-web/pull/16314)
|
||||
* Use history replaceState instead of redirect for SSO flow
|
||||
[\#16292](https://github.com/vector-im/element-web/pull/16292)
|
||||
* Document the mobile guide toast option
|
||||
[\#16301](https://github.com/vector-im/element-web/pull/16301)
|
||||
* Update widget-api to beta.12
|
||||
[\#16303](https://github.com/vector-im/element-web/pull/16303)
|
||||
* Upgrade deps 2021-01
|
||||
[\#16294](https://github.com/vector-im/element-web/pull/16294)
|
||||
* Move to newer base image for Docker builds
|
||||
[\#16275](https://github.com/vector-im/element-web/pull/16275)
|
||||
* Docs for the VoIP translate pattern option
|
||||
[\#16236](https://github.com/vector-im/element-web/pull/16236)
|
||||
* Fix Riot->Element in permalinkPrefix docs
|
||||
[\#16227](https://github.com/vector-im/element-web/pull/16227)
|
||||
* Supply server_name for optional federation-capable Jitsi auth
|
||||
[\#16215](https://github.com/vector-im/element-web/pull/16215)
|
||||
* Fix Widget API version confusion
|
||||
[\#16212](https://github.com/vector-im/element-web/pull/16212)
|
||||
* Add Hebrew language
|
||||
[\#16210](https://github.com/vector-im/element-web/pull/16210)
|
||||
* Update widget-api to beta 11
|
||||
[\#16177](https://github.com/vector-im/element-web/pull/16177)
|
||||
* Fix develop Docker builds
|
||||
[\#16192](https://github.com/vector-im/element-web/pull/16192)
|
||||
* Skip the service worker for Electron
|
||||
[\#16157](https://github.com/vector-im/element-web/pull/16157)
|
||||
* Use isolated IPC API
|
||||
[\#16137](https://github.com/vector-im/element-web/pull/16137)
|
||||
|
||||
Changes in [1.7.18](https://github.com/vector-im/element-web/releases/tag/v1.7.18) (2021-01-26)
|
||||
===============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.17...v1.7.18)
|
||||
|
||||
* Upgrade to React SDK 3.12.1 and JS SDK 9.5.1
|
||||
|
||||
Changes in [1.7.17](https://github.com/vector-im/element-web/releases/tag/v1.7.17) (2021-01-18)
|
||||
===============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.17-rc.1...v1.7.17)
|
||||
|
||||
* Upgrade to React SDK 3.12.0 and JS SDK 9.5.0
|
||||
|
||||
Changes in [1.7.17-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.17-rc.1) (2021-01-13)
|
||||
=========================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.16...v1.7.17-rc.1)
|
||||
|
||||
* Upgrade to React SDK 3.12.0-rc.1 and JS SDK 9.5.0-rc.1
|
||||
* Translations update from Weblate
|
||||
[\#16131](https://github.com/vector-im/element-web/pull/16131)
|
||||
* webplatform: Fix notification closing
|
||||
[\#16028](https://github.com/vector-im/element-web/pull/16028)
|
||||
* Stop building code and types for Element layer
|
||||
[\#15999](https://github.com/vector-im/element-web/pull/15999)
|
||||
|
||||
Changes in [1.7.16](https://github.com/vector-im/element-web/releases/tag/v1.7.16) (2020-12-21)
|
||||
===============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.16-rc.1...v1.7.16)
|
||||
|
||||
* Upgrade to React SDK 3.11.1 and JS SDK 9.4.1
|
||||
|
||||
Changes in [1.7.16-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.16-rc.1) (2020-12-16)
|
||||
=========================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.15...v1.7.16-rc.1)
|
||||
|
||||
* Upgrade to React SDK 3.11.0-rc.2 and JS SDK 9.4.0-rc.2
|
||||
* Translations update from Weblate
|
||||
[\#15979](https://github.com/vector-im/element-web/pull/15979)
|
||||
* Bump ini from 1.3.5 to 1.3.7
|
||||
[\#15949](https://github.com/vector-im/element-web/pull/15949)
|
||||
* Document pull request previews
|
||||
[\#15937](https://github.com/vector-im/element-web/pull/15937)
|
||||
* Improve asset path for KaTeX fonts
|
||||
[\#15939](https://github.com/vector-im/element-web/pull/15939)
|
||||
* Fix an important semicolon
|
||||
[\#15912](https://github.com/vector-im/element-web/pull/15912)
|
||||
* Bump highlight.js from 10.1.2 to 10.4.1
|
||||
[\#15898](https://github.com/vector-im/element-web/pull/15898)
|
||||
* Add gitter.im to room directory
|
||||
[\#15894](https://github.com/vector-im/element-web/pull/15894)
|
||||
* Extend Platform to support idpId for SSO flows
|
||||
[\#15771](https://github.com/vector-im/element-web/pull/15771)
|
||||
* Include KaTeX CSS as a dependency
|
||||
[\#15843](https://github.com/vector-im/element-web/pull/15843)
|
||||
|
||||
Changes in [1.7.15](https://github.com/vector-im/element-web/releases/tag/v1.7.15) (2020-12-07)
|
||||
===============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.15-rc.1...v1.7.15)
|
||||
|
||||
* Upgrade to React SDK 3.10.0 and JS SDK 9.3.0
|
||||
|
||||
Changes in [1.7.15-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.15-rc.1) (2020-12-02)
|
||||
=========================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.14...v1.7.15-rc.1)
|
||||
|
||||
* Upgrade to React SDK 3.10.0-rc.1 and JS SDK 9.3.0-rc.1
|
||||
* Include KaTeX CSS as a dependency
|
||||
[\#15843](https://github.com/vector-im/element-web/pull/15843)
|
||||
* Translations update from Weblate
|
||||
[\#15884](https://github.com/vector-im/element-web/pull/15884)
|
||||
* added katex.min.css to webpack for math support (main PR in matrix-react-
|
||||
sdk)
|
||||
[\#15277](https://github.com/vector-im/element-web/pull/15277)
|
||||
* Rebrand package name and other details
|
||||
[\#15828](https://github.com/vector-im/element-web/pull/15828)
|
||||
* Bump highlight.js from 9.18.1 to 10.1.2
|
||||
[\#15819](https://github.com/vector-im/element-web/pull/15819)
|
||||
* Update branding of packaging artifacts
|
||||
[\#15810](https://github.com/vector-im/element-web/pull/15810)
|
||||
* Update the react-sdk reference in the lockfile
|
||||
[\#15814](https://github.com/vector-im/element-web/pull/15814)
|
||||
* Update widget API for good measure in Element Web
|
||||
[\#15812](https://github.com/vector-im/element-web/pull/15812)
|
||||
* Stop publishing Element to NPM
|
||||
[\#15811](https://github.com/vector-im/element-web/pull/15811)
|
||||
* Add inotify instance limit info to README
|
||||
[\#15795](https://github.com/vector-im/element-web/pull/15795)
|
||||
|
||||
Changes in [1.7.14](https://github.com/vector-im/element-web/releases/tag/v1.7.14) (2020-11-23)
|
||||
===============================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.14-rc.1...v1.7.14)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Builder
|
||||
FROM node:12 as builder
|
||||
FROM node:14-buster as builder
|
||||
|
||||
# Support custom branches of the react-sdk and js-sdk. This also helps us build
|
||||
# images of element-web develop.
|
||||
|
||||
179
README.md
179
README.md
@@ -11,7 +11,7 @@ Element has several tiers of support for different environments:
|
||||
|
||||
* Supported
|
||||
* Definition: Issues **actively triaged**, regressions **block** the release
|
||||
* Last 2 major versions of Chrome, Firefox, and Safari on desktop OSes
|
||||
* Last 2 major versions of Chrome, Firefox, Safari, and Edge on desktop OSes
|
||||
* Latest release of official Element Desktop app on desktop OSes
|
||||
* Desktop OSes means macOS, Windows, and Linux versions for desktop devices
|
||||
that are actively supported by the OS vendor and receive security updates
|
||||
@@ -31,7 +31,7 @@ Getting Started
|
||||
===============
|
||||
|
||||
The easiest way to test Element is to just use the hosted copy at https://app.element.io.
|
||||
The `develop` branch is continuously deployed by Jenkins at https://develop.element.io
|
||||
The `develop` branch is continuously deployed to https://develop.element.io
|
||||
for those who like living dangerously.
|
||||
|
||||
To host your own copy of Element, the quickest bet is to use a pre-built
|
||||
@@ -39,14 +39,14 @@ released version of Element:
|
||||
|
||||
1. Download the latest version from https://github.com/vector-im/element-web/releases
|
||||
1. Untar the tarball on your web server
|
||||
1. Move (or symlink) the `riot-x.x.x` directory to an appropriate name
|
||||
1. Move (or symlink) the `element-x.x.x` directory to an appropriate name
|
||||
1. Configure the correct caching headers in your webserver (see below)
|
||||
1. If desired, copy `config.sample.json` to `config.json` and edit it
|
||||
as desired. See the [configuration docs](docs/config.md) for details.
|
||||
1. Enter the URL into your browser and log into Element!
|
||||
|
||||
Releases are signed using gpg and the OpenPGP standard, and can be checked against the public key located
|
||||
at https://packages.riot.im/riot-release-key.asc.
|
||||
at https://packages.riot.im/element-release-key.asc.
|
||||
|
||||
Note that for the security of your chats will need to serve Element
|
||||
over HTTPS. Major browsers also do not allow you to use VoIP/video
|
||||
@@ -58,8 +58,11 @@ and thus allowed.
|
||||
To install Element as a desktop application, see [Running as a desktop
|
||||
app](#running-as-a-desktop-app) below.
|
||||
|
||||
Important Security Note
|
||||
=======================
|
||||
Important Security Notes
|
||||
========================
|
||||
|
||||
Separate domains
|
||||
----------------
|
||||
|
||||
We do not recommend running Element from the same domain name as your Matrix
|
||||
homeserver. The reason is the risk of XSS (cross-site-scripting)
|
||||
@@ -71,6 +74,45 @@ We have put some coarse mitigations into place to try to protect against this
|
||||
situation, but it's still not good practice to do it in the first place. See
|
||||
https://github.com/vector-im/element-web/issues/1977 for more details.
|
||||
|
||||
Configuration best practices
|
||||
----------------------------
|
||||
|
||||
Unless you have special requirements, you will want to add the following to
|
||||
your web server configuration when hosting Element Web:
|
||||
|
||||
- The `X-Frame-Options: SAMEORIGIN` header, to prevent Element Web from being
|
||||
framed and protect from [clickjacking][owasp-clickjacking].
|
||||
- The `frame-ancestors 'none'` directive to your `Content-Security-Policy`
|
||||
header, as the modern replacement for `X-Frame-Options` (though both should be
|
||||
included since not all browsers support it yet, see
|
||||
[this][owasp-clickjacking-csp]).
|
||||
- The `X-Content-Type-Options: nosniff` header, to [disable MIME
|
||||
sniffing][mime-sniffing].
|
||||
- The `X-XSS-Protection: 1; mode=block;` header, for basic XSS protection in
|
||||
legacy browsers.
|
||||
|
||||
[mime-sniffing]:
|
||||
<https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#mime_sniffing>
|
||||
|
||||
[owasp-clickjacking-csp]:
|
||||
<https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html#content-security-policy-frame-ancestors-examples>
|
||||
|
||||
[owasp-clickjacking]:
|
||||
<https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html>
|
||||
|
||||
If you are using nginx, this would look something like the following:
|
||||
|
||||
```
|
||||
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'";
|
||||
```
|
||||
|
||||
Note: In case you are already setting a `Content-Security-Policy` header
|
||||
elsewhere, you should modify it to include the `frame-ancestors` directive
|
||||
instead of adding that last line.
|
||||
|
||||
Building From Source
|
||||
====================
|
||||
|
||||
@@ -99,7 +141,8 @@ guide](https://classic.yarnpkg.com/en/docs/install) if you do not have it alread
|
||||
Note that `yarn dist` is not supported on Windows, so Windows users can run `yarn build`,
|
||||
which will build all the necessary files into the `webapp` directory. The version of Element
|
||||
will not appear in Settings without using the dist script. You can then mount the
|
||||
`webapp` directory on your webserver to actually serve up the app, which is entirely static content.
|
||||
`webapp` directory on your web server to actually serve up the app, which is
|
||||
entirely static content.
|
||||
|
||||
Running as a Desktop app
|
||||
========================
|
||||
@@ -275,22 +318,29 @@ modifying it. See the [configuration docs](docs/config.md) for details.
|
||||
Open http://127.0.0.1:8080/ in your browser to see your newly built Element.
|
||||
|
||||
**Note**: The build script uses inotify by default on Linux to monitor directories
|
||||
for changes. If the inotify watch limit is too low your build will silently fail.
|
||||
To avoid this issue, we recommend a limit of at least 128M.
|
||||
for changes. If the inotify limits are too low your build will fail silently or with
|
||||
`Error: EMFILE: too many open files`. To avoid these issues, we recommend a watch limit
|
||||
of at least `128M` and instance limit around `512`.
|
||||
|
||||
To set a new inotify watch limit, execute:
|
||||
You may be interested in issues [#15750](https://github.com/vector-im/element-web/issues/15750) and
|
||||
[#15774](https://github.com/vector-im/element-web/issues/15774) for further details.
|
||||
|
||||
To set a new inotify watch and instance limit, execute:
|
||||
|
||||
```
|
||||
$ sudo sysctl fs.inotify.max_user_watches=131072
|
||||
$ sudo sysctl -p
|
||||
sudo sysctl fs.inotify.max_user_watches=131072
|
||||
sudo sysctl fs.inotify.max_user_instances=512
|
||||
sudo sysctl -p
|
||||
```
|
||||
|
||||
If you wish, you can make this new limit permanent, by executing:
|
||||
If you wish, you can make the new limits permanent, by executing:
|
||||
|
||||
```
|
||||
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
|
||||
$ sudo sysctl -p
|
||||
echo fs.inotify.max_user_watches=131072 | sudo tee -a /etc/sysctl.conf
|
||||
echo fs.inotify.max_user_instances=512 | sudo tee -a /etc/sysctl.conf
|
||||
sudo sysctl -p
|
||||
```
|
||||
|
||||
___
|
||||
|
||||
When you make changes to `matrix-react-sdk` or `matrix-js-sdk` they should be
|
||||
@@ -338,51 +388,76 @@ For a developer guide, see the [translating dev doc](docs/translating-dev.md).
|
||||
Triaging issues
|
||||
===============
|
||||
|
||||
Issues will be triaged by the core team using the below set of tags.
|
||||
We strive to completely cover all applicable issues with these core labels:
|
||||
|
||||
Tags are meant to be used in combination - e.g.:
|
||||
* P1 critical bug == really urgent stuff that should be next in the bugfixing todo list
|
||||
* "release blocker" == stuff which is blocking us from cutting the next release.
|
||||
* P1 feature type:voip == what VoIP features should we be working on next?
|
||||
1. __Type__ — Every issue is assigned a type:
|
||||
- __[T-Defect](https://github.com/vector-im/element-web/labels/T-Defect):__
|
||||
Bugs, crashes, hangs, vulnerabilities, or other reported problems
|
||||
- __[T-Enhancement](https://github.com/vector-im/element-web/labels/T-Enhancement):__
|
||||
New features, changes in functionality, performance boosts, user-facing
|
||||
improvements
|
||||
- __[T-Task](https://github.com/vector-im/element-web/labels/T-Task):__
|
||||
Refactoring, enabling or disabling functionality, other engineering tasks
|
||||
- __[T-Other](https://github.com/vector-im/element-web/labels/T-Other):__
|
||||
Questions, user support, anything else
|
||||
|
||||
priority: **compulsory**
|
||||
2. __Severity__ — All issues labeled `T-Defect` are also assigned a severity:
|
||||
* __[S-Critical](https://github.com/vector-im/element-web/labels/S-Critical):__
|
||||
Prevents work, causes data loss, affects many users, and/or has no
|
||||
workaround
|
||||
* __[S-Major](https://github.com/vector-im/element-web/labels/S-Major):__
|
||||
Severely degrades major functionality or product features, with no
|
||||
satisfactory workaround
|
||||
* __[S-Minor](https://github.com/vector-im/element-web/labels/S-Minor):__
|
||||
Impairs non-critical functionality, or suitable workarounds exist
|
||||
* __[S-Tolerable](https://github.com/vector-im/element-web/labels/S-Tolerable):__
|
||||
Purely cosmetic or low / no impact to users
|
||||
|
||||
* P1: top priority - i.e. pool of stuff which we should be working on next
|
||||
* P2: still need to fix, but lower than P1
|
||||
* P3: non-urgent
|
||||
* P4: interesting idea - bluesky some day
|
||||
* P5: recorded for posterity/to avoid duplicates. No intention to resolves right now.
|
||||
3. __Priority__ — All issues which are not `T-Other` are assigned a priority:
|
||||
* __[P1](https://github.com/vector-im/element-web/labels/P1):__ Next
|
||||
* __[P2](https://github.com/vector-im/element-web/labels/P2):__ Later
|
||||
* __[P3](https://github.com/vector-im/element-web/labels/P3):__ Eventually
|
||||
* __[P4](https://github.com/vector-im/element-web/labels/P4):__ Interesting —
|
||||
Not yet scheduled, will accept patches
|
||||
* __[P5](https://github.com/vector-im/element-web/labels/P5):__ Dubious —
|
||||
Will not schedule, would consider patches
|
||||
|
||||
bug or feature: **compulsory**
|
||||
4. __Area__ — Most issues are assigned one or several "areas" using one of the
|
||||
many `A-` prefixed labels, e.g. `A-Composer` or `A-Spaces`. Each area label
|
||||
maps to a group of features or portion of the UI surface in the app.
|
||||
|
||||
* bug
|
||||
* feature
|
||||
### Other common labels
|
||||
|
||||
bug severity: **compulsory, if bug**
|
||||
We have a handful of other labels which are added on an as-needed basis, and not expected to be exhaustive:
|
||||
|
||||
* critical - whole app doesn't work
|
||||
* major - entire feature doesn't work
|
||||
* minor - partially broken feature (but still usable)
|
||||
* cosmetic - feature works functionally but UI/UX is broken
|
||||
* __Exceptions__ — Special flags for issues and pull requests:
|
||||
* __[X-Needs-Info](https://github.com/vector-im/element-web/labels/X-Needs-Info):__
|
||||
This issue is blocked pending further information from the reporter
|
||||
* __[X-Regression](https://github.com/vector-im/element-web/labels/X-Regression):__
|
||||
Denotes things breaking which previously worked
|
||||
* __[X-Release-Blocker](https://github.com/vector-im/element-web/labels/X-Release-Blocker):__
|
||||
Issues which must be resolved before making a release
|
||||
|
||||
types
|
||||
* type:* - refers to a particular part of the app; used to filter bugs
|
||||
on a given topic - e.g. VOIP, signup, timeline, etc.
|
||||
* __[Easy](https://github.com/vector-im/element-web/labels/Easy)__ / __[Help
|
||||
Wanted](https://github.com/vector-im/element-web/labels/Help%20Wanted)__ —
|
||||
Well-defined issues which are suitable for folks new to the codebase
|
||||
|
||||
additional categories (self-explanatory):
|
||||
* __[A11y](https://github.com/vector-im/element-web/labels/A11y)__ /
|
||||
__[Meta](https://github.com/vector-im/element-web/labels/Meta)__ /
|
||||
__[I18n](https://github.com/vector-im/element-web/labels/I18n)__ /
|
||||
__[Privacy](https://github.com/vector-im/element-web/labels/Privacy)__ /
|
||||
__[Security](https://github.com/vector-im/element-web/labels/Security)__ —
|
||||
Issues which fall under these conceptual themes (which apply to many software
|
||||
projects and are not specific to Element)
|
||||
|
||||
* release blocker
|
||||
* ui/ux (think of this as cosmetic)
|
||||
* network (specific to network conditions)
|
||||
* platform specific
|
||||
* accessibility
|
||||
* maintenance
|
||||
* performance
|
||||
* i18n
|
||||
* blocked - whether this issue currently can't be progressed due to outside factors
|
||||
* __[Sponsored](https://github.com/vector-im/element-web/labels/Sponsored)__ —
|
||||
Used internally by Element to denote issues with external funding
|
||||
|
||||
community engagement
|
||||
* easy
|
||||
* hacktoberfest
|
||||
* bounty? - proposal to be included in a bounty programme
|
||||
* bounty - included in Status Open Bounty
|
||||
### Ad hoc labels (`Z-`)
|
||||
|
||||
We have reserved the `Z-` prefix for ad hoc labels.
|
||||
|
||||
Any member of the core team is welcome to create labels beginning with `Z-` for
|
||||
any purpose, such as tracking personal areas of interest or providing a common
|
||||
way to label cross-repo initiatives. The prefix avoids interference with the
|
||||
project's main labels.
|
||||
|
||||
@@ -3,12 +3,15 @@ module.exports = {
|
||||
"presets": [
|
||||
["@babel/preset-env", {
|
||||
"targets": [
|
||||
"last 2 Chrome versions", "last 2 Firefox versions", "last 2 Safari versions"
|
||||
"last 2 Chrome versions",
|
||||
"last 2 Firefox versions",
|
||||
"last 2 Safari versions",
|
||||
"last 2 Edge versions",
|
||||
],
|
||||
}],
|
||||
"@babel/preset-typescript",
|
||||
"@babel/preset-flow",
|
||||
"@babel/preset-react"
|
||||
"@babel/preset-react",
|
||||
],
|
||||
"plugins": [
|
||||
["@babel/plugin-proposal-decorators", {legacy: true}],
|
||||
@@ -16,8 +19,10 @@ module.exports = {
|
||||
"@babel/plugin-proposal-numeric-separator",
|
||||
"@babel/plugin-proposal-class-properties",
|
||||
"@babel/plugin-proposal-object-rest-spread",
|
||||
"@babel/plugin-proposal-optional-chaining",
|
||||
"@babel/plugin-proposal-nullish-coalescing-operator",
|
||||
"@babel/plugin-transform-flow-comments",
|
||||
"@babel/plugin-syntax-dynamic-import",
|
||||
"@babel/plugin-transform-runtime"
|
||||
]
|
||||
"@babel/plugin-transform-runtime",
|
||||
],
|
||||
};
|
||||
|
||||
@@ -74,7 +74,7 @@ Key:
|
||||
|
||||
Notes:
|
||||
+ A task begins when all its dependencies (arrows going into it) are fulfilled.
|
||||
+ The success of setting up rageshake is never asserted, riot-web has a fallback path for running without IDB (and thus rageshake).
|
||||
+ The success of setting up rageshake is never asserted, element-web has a fallback path for running without IDB (and thus rageshake).
|
||||
+ Everything is awaited to be settled before the Modernizr check, to allow it to make use of things like i18n if they are successful.
|
||||
|
||||
Underlying dependencies:
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
# VoIP Conferencing
|
||||
|
||||
This is a draft proposal for a naive voice/video conferencing implementation for
|
||||
Matrix clients. There are many possible conferencing architectures possible for
|
||||
Matrix (Multipoint Conferencing Unit (MCU); Stream Forwarding Unit (SFU); Peer-
|
||||
to-Peer mesh (P2P), etc; events shared in the group room; events shared 1:1;
|
||||
possibly even out-of-band signalling).
|
||||
|
||||
This is a starting point for a naive MCU implementation which could provide one
|
||||
possible Matrix-wide solution in future, which retains backwards compatibility
|
||||
with standard 1:1 calling.
|
||||
|
||||
* A client chooses to initiate a conference for a given room by starting a
|
||||
voice or video call with a 'conference focus' user. This is a virtual user
|
||||
(typically Application Service) which implements a conferencing bridge. It
|
||||
isn't defined how the client discovers or selects this user.
|
||||
|
||||
* The conference focus user MUST join the room in which the client has
|
||||
initiated the conference - this may require the client to invite the
|
||||
conference focus user to the room, depending on the room's `join_rules`. The
|
||||
conference focus user needs to be in the room to let the bridge eject users
|
||||
from the conference who have left the room in which it was initiated, and aid
|
||||
discovery of the conference by other users in the room. The bridge
|
||||
identifies the room to join based on the user ID by which it was invited.
|
||||
The format of this identifier is implementation dependent for now.
|
||||
|
||||
* If a client leaves the group chat room, they MUST be ejected from the
|
||||
conference. If a client leaves the 1:1 room with the conference focus user,
|
||||
they SHOULD be ejected from the conference.
|
||||
|
||||
* For now, rooms can contain multiple conference focus users - it's left to
|
||||
user or client implementation to select which to converge on. In future this
|
||||
could be mediated using a state event (e.g. `im.vector.call.mcu`), but we
|
||||
can't do that right now as by default normal users can't set arbitrary state
|
||||
events on a room.
|
||||
|
||||
* To participate in the conference, other clients initiates a standard 1:1
|
||||
voice or video call to the conference focus user.
|
||||
|
||||
* For best UX, clients SHOULD show the ongoing voice/video call in the UI
|
||||
context of the group room rather than 1:1 with the focus user. If a client
|
||||
recognises a conference user present in the room, it MAY chose to highlight
|
||||
this in the UI (e.g. with a "conference ongoing" notification, to aid
|
||||
discovery). Clients MAY hide the 1:1 room with the focus user (although in
|
||||
future this room could be used for floor control or other direct
|
||||
communication with the conference focus)
|
||||
|
||||
* When all users have left the conference, the 'conference focus' user SHOULD
|
||||
leave the room.
|
||||
|
||||
* If a conference focus user joins a room but does not receive a 1:1 voice or
|
||||
video call, it SHOULD time out after a period of time and leave the room.
|
||||
@@ -82,8 +82,8 @@ For a good example, see https://develop.element.io/config.json.
|
||||
default homeserver when signing up or logging in.
|
||||
1. `permalinkPrefix`: Used to change the URL that Element generates permalinks with.
|
||||
By default, this is "https://matrix.to" to generate matrix.to (spec) permalinks.
|
||||
Set this to your Riot instance URL if you run an unfederated server (eg:
|
||||
"https://riot.example.org").
|
||||
Set this to your Element instance URL if you run an unfederated server (eg:
|
||||
"https://element.example.org").
|
||||
1. `jitsi`: Used to change the default conference options. Learn more about the
|
||||
Jitsi options at [jitsi.md](./jitsi.md).
|
||||
1. `preferredDomain`: The domain name of the preferred Jitsi instance. Defaults
|
||||
@@ -110,6 +110,12 @@ 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
|
||||
an SVG.
|
||||
1. `url`: An HTTP URL for where to send the user to download the desktop build.
|
||||
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
|
||||
mobile guide if they accept. Defaults to false.
|
||||
1. `audioStreamUrl`: If supplied, show an option on Jitsi widgets to stream
|
||||
audio using Jitsi's live streaming feature. This option is experimental and
|
||||
may be removed at any time without notice.
|
||||
|
||||
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
|
||||
@@ -152,7 +158,7 @@ decentralised.
|
||||
Desktop app configuration
|
||||
=========================
|
||||
|
||||
See https://github.com/vector-im/riot-desktop#user-specified-configjson
|
||||
See https://github.com/vector-im/element-desktop#user-specified-configjson
|
||||
|
||||
UI Features
|
||||
===========
|
||||
|
||||
@@ -17,11 +17,11 @@ the React SDK, you can still override it from the Element Web layer:
|
||||
2. Edit customisations points and make sure export the ones you actually want to
|
||||
activate
|
||||
3. Tweak the Element build process to use the customised module instead of the
|
||||
default by adding this to end of the `plugins` array in `webpack.config.js`:
|
||||
default by adding this to the `additionalPlugins` array in `webpack.config.js`:
|
||||
|
||||
```js
|
||||
new webpack.NormalModuleReplacementPlugin(
|
||||
/src\/customisations\/Security.ts/,
|
||||
/src[\/\\]customisations[\/\\]Security\.ts/,
|
||||
path.resolve(__dirname, 'src/customisations/YourNameSecurity.ts'),
|
||||
),
|
||||
```
|
||||
|
||||
BIN
docs/img/pr-checks.png
Normal file
BIN
docs/img/pr-checks.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 155 KiB |
@@ -40,7 +40,7 @@ should start a new conference on your Jitsi server.
|
||||
domain will appear later in the URL as a configuration parameter.
|
||||
|
||||
**Hint**: If you want everyone on your homeserver to use the same Jitsi server by
|
||||
default, and you are using riot-web 1.6 or newer, set the following on your homeserver's
|
||||
default, and you are using element-web 1.6 or newer, set the following on your homeserver's
|
||||
`/.well-known/matrix/client` config:
|
||||
```json
|
||||
{
|
||||
|
||||
19
docs/labs.md
19
docs/labs.md
@@ -7,6 +7,18 @@ to `Settings->Labs`. This list is non-exhaustive and subject to change, chat in
|
||||
**Be warned! Labs features are not finalised, they may be fragile, they may change, they may be
|
||||
dropped. Ask in the room if you are unclear about any details here.**
|
||||
|
||||
## Matrix Spaces [MSC1772](https://github.com/matrix-org/matrix-doc/pull/1772) support (`feature_spaces`)
|
||||
|
||||
Enables showing, using, creating, and managing spaces. Create Spaces from the all new Space Panel (to left of Room List).
|
||||
|
||||
Incompatible with (will disable) `feature_custom_tags`, `feature_communities_v2_prototypes` and stable Communities/Groups support.
|
||||
|
||||
Still in heavy development.
|
||||
|
||||
## Render LaTeX maths in messages (`feature_latex_maths`)
|
||||
|
||||
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.
|
||||
@@ -65,6 +77,13 @@ Ban lists are rooms within Matrix, proposed as [MSC2313](https://github.com/matr
|
||||
[Mjolnir](https://github.com/matrix-org/mjolnir) is a set of moderation tools which support
|
||||
ban lists.
|
||||
|
||||
## Inline widgets
|
||||
|
||||
`feature_inline_widgets` allows rendering and sending of inline widgets. Inline
|
||||
widgets are typically polls or rich embedded content in rooms.
|
||||
|
||||
[#riot-web:matrix.org]: https://matrix.to/#/#riot-web:matrix.org
|
||||
|
||||
## Verifications in DMs (`feature_dm_verification`)
|
||||
|
||||
An implementation of [MSC2241](https://github.com/matrix-org/matrix-doc/pull/2241). When enabled, verification might not work with devices which don't support MSC2241.
|
||||
|
||||
33
docs/pr-previews.md
Normal file
33
docs/pr-previews.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# Pull Request Previews
|
||||
|
||||
Pull requests to the React SDK layer (and in the future other layers as well)
|
||||
automatically set up a preview site with a full deployment of Element with the
|
||||
changes from the pull request added in so that anyone can easily test and review
|
||||
them. This is especially useful for checking visual and interactive changes.
|
||||
|
||||
To access the preview site, scroll down to the bottom of the PR where the
|
||||
various CI results are displayed:
|
||||
|
||||

|
||||
|
||||
The checks section could be collapsed at first, so you may need to click "Show
|
||||
all checks" to reveal them. Look for an entry that mentions `deploy-preview`. It
|
||||
may be at the end of the list, so you may need scroll a bit to see it. To access
|
||||
the preview site, click the "Details" link in the deploy preview row.
|
||||
|
||||
**Important:** Please always use test accounts when logging into preview sites,
|
||||
as they may contain unreviewed and potentially dangerous code that could damage
|
||||
your account, exfiltrate encryption keys, etc.
|
||||
|
||||
## FAQs
|
||||
|
||||
### Are preview sites created for pull requests from contributors?
|
||||
|
||||
Yes, they are created for all PRs from any author.
|
||||
|
||||
### Do preview sites expire after some time period?
|
||||
|
||||
No, there is no expiry date, so they should remain accessible indefinitely, but
|
||||
of course they obviously aren't meant to live beyond the development workflow,
|
||||
so please don't rely on them for anything important. They may disappear at any
|
||||
time without notice.
|
||||
@@ -43,7 +43,7 @@ When reviewing code, here are some things we look for and also things we avoid:
|
||||
|
||||
### Workflow
|
||||
|
||||
* Authors should request review from the riot-web team by default (if someone on
|
||||
* Authors should request review from the element-web team by default (if someone on
|
||||
the team is clearly the expert in an area, a direct review request to them may
|
||||
be more appropriate)
|
||||
* Reviewers should remove the team review request and request review from
|
||||
@@ -73,10 +73,9 @@ functionality is:
|
||||
required (though may still be useful) since we can continue tweaking
|
||||
|
||||
As it can be difficult to review design work from looking at just the changed
|
||||
files in a PR, authors should be prepared for Design and / or Product teams to
|
||||
request a link to an ad-hoc build of Element (hosted anywhere) that can be used for
|
||||
the review. In the future, we [hope to automate
|
||||
this](https://github.com/vector-im/element-web/issues/12624) for every PR.
|
||||
files in a PR, a [preview site](./pr-previews.md) that includes your changes
|
||||
will be added automatically so that anyone who's interested can try them out
|
||||
easily.
|
||||
|
||||
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
|
||||
|
||||
@@ -52,7 +52,7 @@ other changes:
|
||||
- skins/vector/themes/foo/css
|
||||
- skins/vector/themes/foo/img
|
||||
- skins/vector/themes/foo/fonts
|
||||
- ideally riot-web would contain almost nothing but skins/vector directory.
|
||||
- ideally element-web would contain almost nothing but skins/vector directory.
|
||||
- ability to entirely replace CSS rather than override it for a given theme
|
||||
- e.g. if we replace `Login.js` with `StatusLogin.js`, then we should similarly be able to replace `_Login.scss` with `_StatusLogin.scss`.
|
||||
|
||||
|
||||
@@ -20,7 +20,8 @@
|
||||
},
|
||||
"roomDirectory": {
|
||||
"servers": [
|
||||
"matrix.org"
|
||||
"matrix.org",
|
||||
"gitter.im"
|
||||
]
|
||||
},
|
||||
"enable_presence_by_hs_url": {
|
||||
@@ -36,5 +37,15 @@
|
||||
"url": "https://element.io/cookie-policy",
|
||||
"text": "Cookie Policy"
|
||||
}
|
||||
]
|
||||
],
|
||||
"hostSignup": {
|
||||
"brand": "Element Home",
|
||||
"cookiePolicyUrl": "https://element.io/cookie-policy",
|
||||
"domains": [
|
||||
"matrix.org"
|
||||
],
|
||||
"privacyPolicyUrl": "https://element.io/privacy",
|
||||
"termsOfServiceUrl": "https://element.io/terms-of-service",
|
||||
"url": "https://ems.element.io/element-home/in-app-loader"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# download and unpack a riot-web tarball.
|
||||
# download and unpack a element-web tarball.
|
||||
#
|
||||
# Allows `bundles` to be extracted to a common directory, and a link to
|
||||
# config.json to be added.
|
||||
|
||||
@@ -18,13 +18,10 @@
|
||||
"siteId": 1,
|
||||
"policyUrl": "https://element.io/cookie-policy"
|
||||
},
|
||||
"countly": {
|
||||
"url": "https://try.count.ly",
|
||||
"appKey": "8abf1ee15646bc884556b82e5053857904264b66"
|
||||
},
|
||||
"roomDirectory": {
|
||||
"servers": [
|
||||
"matrix.org"
|
||||
"matrix.org",
|
||||
"gitter.im"
|
||||
]
|
||||
},
|
||||
"enable_presence_by_hs_url": {
|
||||
@@ -40,5 +37,15 @@
|
||||
"url": "https://element.io/cookie-policy",
|
||||
"text": "Cookie Policy"
|
||||
}
|
||||
]
|
||||
],
|
||||
"hostSignup": {
|
||||
"brand": "Element Home",
|
||||
"cookiePolicyUrl": "https://element.io/cookie-policy",
|
||||
"domains": [
|
||||
"matrix.org"
|
||||
],
|
||||
"privacyPolicyUrl": "https://element.io/privacy",
|
||||
"termsOfServiceUrl": "https://element.io/terms-of-service",
|
||||
"url": "https://ems.element.io/element-home/in-app-loader"
|
||||
}
|
||||
}
|
||||
|
||||
147
package.json
147
package.json
@@ -1,12 +1,11 @@
|
||||
{
|
||||
"name": "riot-web",
|
||||
"productName": "Riot",
|
||||
"version": "1.7.14",
|
||||
"name": "element-web",
|
||||
"version": "1.7.23",
|
||||
"description": "A feature-rich client for Matrix.org",
|
||||
"author": "New Vector Ltd.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/vector-im/riot-web"
|
||||
"url": "https://github.com/vector-im/element-web"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"files": [
|
||||
@@ -35,16 +34,14 @@
|
||||
"reskindex:watch": "reskindex -h src/header -w",
|
||||
"reskindex:watch-react": "node scripts/yarn-sub.js matrix-react-sdk reskindex:watch",
|
||||
"clean": "rimraf lib webapp",
|
||||
"build": "yarn clean && yarn build:genfiles && yarn build:compile && yarn build:types && yarn build:bundle",
|
||||
"build-stats": "yarn clean && yarn build:genfiles && yarn build:compile && yarn build:types && yarn build:bundle-stats",
|
||||
"build": "yarn clean && yarn build:genfiles && yarn build:bundle",
|
||||
"build-stats": "yarn clean && yarn build:genfiles && yarn build:bundle-stats",
|
||||
"build:jitsi": "node scripts/build-jitsi.js",
|
||||
"build:res": "node scripts/copy-res.js",
|
||||
"build:genfiles": "yarn reskindex && yarn build:res && yarn build:jitsi",
|
||||
"build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js",
|
||||
"build:compile": "babel -d lib --verbose --extensions \".ts,.js,.tsx\" src",
|
||||
"build:bundle": "webpack --progress --bail --mode production",
|
||||
"build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json",
|
||||
"build:types": "tsc --emitDeclarationOnly --jsx react",
|
||||
"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:res": "yarn build:jitsi && node scripts/copy-res.js -w",
|
||||
@@ -58,94 +55,100 @@
|
||||
"dependencies": {
|
||||
"browser-request": "^0.3.3",
|
||||
"gfm.css": "^1.1.2",
|
||||
"highlight.js": "^9.13.1",
|
||||
"jsrsasign": "^9.1.5",
|
||||
"matrix-js-sdk": "9.2.0",
|
||||
"matrix-react-sdk": "3.9.0",
|
||||
"matrix-widget-api": "^0.1.0-beta.8",
|
||||
"highlight.js": "^10.5.0",
|
||||
"jsrsasign": "^10.1.5",
|
||||
"katex": "^0.12.0",
|
||||
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
|
||||
"matrix-react-sdk": "github:matrix-org/matrix-react-sdk#develop",
|
||||
"matrix-widget-api": "^0.1.0-beta.13",
|
||||
"olm": "https://packages.matrix.org/npm/olm/olm-3.2.1.tgz",
|
||||
"prop-types": "^15.7.2",
|
||||
"react": "^16.9.0",
|
||||
"react-dom": "^16.9.0",
|
||||
"random-string": "^0.2.0",
|
||||
"react": "^16.14.0",
|
||||
"react-dom": "^16.14.0",
|
||||
"sanitize-html": "github:apostrophecms/sanitize-html#3c7f93f2058f696f5359e3e58d464161647226db",
|
||||
"ua-parser-js": "^0.7.19",
|
||||
"url": "^0.11.0"
|
||||
"ua-parser-js": "^0.7.23"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/cli": "^7.7.5",
|
||||
"@babel/core": "^7.7.5",
|
||||
"@babel/plugin-proposal-class-properties": "^7.7.4",
|
||||
"@babel/plugin-proposal-decorators": "^7.7.4",
|
||||
"@babel/plugin-proposal-export-default-from": "^7.7.4",
|
||||
"@babel/plugin-proposal-numeric-separator": "^7.7.4",
|
||||
"@babel/plugin-proposal-object-rest-spread": "^7.7.4",
|
||||
"@babel/plugin-syntax-dynamic-import": "^7.7.4",
|
||||
"@babel/plugin-transform-flow-comments": "^7.7.4",
|
||||
"@babel/plugin-transform-runtime": "^7.7.6",
|
||||
"@babel/preset-env": "^7.7.6",
|
||||
"@babel/preset-flow": "^7.7.4",
|
||||
"@babel/preset-react": "^7.7.4",
|
||||
"@babel/preset-typescript": "^7.7.4",
|
||||
"@babel/register": "^7.7.4",
|
||||
"@babel/runtime": "^7.7.6",
|
||||
"@babel/core": "^7.12.10",
|
||||
"@babel/plugin-proposal-class-properties": "^7.12.1",
|
||||
"@babel/plugin-proposal-decorators": "^7.12.12",
|
||||
"@babel/plugin-proposal-export-default-from": "^7.12.1",
|
||||
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
|
||||
"@babel/plugin-proposal-numeric-separator": "^7.12.7",
|
||||
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
|
||||
"@babel/plugin-proposal-optional-chaining": "^7.12.7",
|
||||
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
||||
"@babel/plugin-transform-flow-comments": "^7.12.1",
|
||||
"@babel/plugin-transform-runtime": "^7.12.10",
|
||||
"@babel/preset-env": "^7.12.11",
|
||||
"@babel/preset-flow": "^7.12.1",
|
||||
"@babel/preset-react": "^7.12.10",
|
||||
"@babel/preset-typescript": "^7.12.7",
|
||||
"@babel/register": "^7.12.10",
|
||||
"@babel/runtime": "^7.12.5",
|
||||
"@types/flux": "^3.1.9",
|
||||
"@types/modernizr": "^3.5.3",
|
||||
"@types/node": "^12.12.41",
|
||||
"@types/react": "16.9",
|
||||
"@types/react-dom": "^16.9.4",
|
||||
"@types/sanitize-html": "^1.23.3",
|
||||
"autoprefixer": "^9.7.3",
|
||||
"babel-eslint": "^10.0.3",
|
||||
"babel-jest": "^24.9.0",
|
||||
"babel-loader": "^8.0.6",
|
||||
"@types/node": "^14.14.22",
|
||||
"@types/react": "^16.9",
|
||||
"@types/react-dom": "^16.9.10",
|
||||
"@types/sanitize-html": "^1.27.1",
|
||||
"autoprefixer": "^9.8.6",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"babel-jest": "^26.6.3",
|
||||
"babel-loader": "^8.2.2",
|
||||
"canvas": "^2.6.1",
|
||||
"chokidar": "^3.3.1",
|
||||
"concurrently": "^4.0.1",
|
||||
"cpx": "^1.3.2",
|
||||
"css-loader": "^3.3.2",
|
||||
"eslint": "7.3.1",
|
||||
"eslint-config-matrix-org": "^0.1.2",
|
||||
"eslint-plugin-babel": "^4.1.2",
|
||||
"eslint-plugin-flowtype": "^2.50.3",
|
||||
"eslint-plugin-react": "^7.11.1",
|
||||
"eslint-plugin-react-hooks": "^2.2.0",
|
||||
"chokidar": "^3.5.1",
|
||||
"concurrently": "^5.3.0",
|
||||
"cpx": "^1.5.0",
|
||||
"css-loader": "^3.6.0",
|
||||
"eslint": "7.18.0",
|
||||
"eslint-config-matrix-org": "^0.2.0",
|
||||
"eslint-plugin-babel": "^5.3.1",
|
||||
"eslint-plugin-flowtype": "^5.2.0",
|
||||
"eslint-plugin-react": "^7.22.0",
|
||||
"eslint-plugin-react-hooks": "^4.2.0",
|
||||
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
||||
"fake-indexeddb": "^3.0.0",
|
||||
"file-loader": "^5.0.2",
|
||||
"fake-indexeddb": "^3.1.2",
|
||||
"file-loader": "^5.1.0",
|
||||
"fs-extra": "^0.30.0",
|
||||
"html-webpack-plugin": "^3.2.0",
|
||||
"jest": "^26.5.2",
|
||||
"jest": "^26.6.3",
|
||||
"jest-environment-jsdom-sixteen": "^1.0.3",
|
||||
"json-loader": "^0.5.3",
|
||||
"loader-utils": "^1.2.3",
|
||||
"json-loader": "^0.5.7",
|
||||
"loader-utils": "^1.4.0",
|
||||
"matrix-mock-request": "^1.2.3",
|
||||
"matrix-react-test-utils": "^0.2.2",
|
||||
"mini-css-extract-plugin": "^0.8.0",
|
||||
"minimist": "^1.2.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"modernizr": "^3.6.0",
|
||||
"node-fetch": "^2.6.0",
|
||||
"optimize-css-assets-webpack-plugin": "^5.0.3",
|
||||
"mini-css-extract-plugin": "^0.12.0",
|
||||
"minimist": "^1.2.5",
|
||||
"mkdirp": "^1.0.4",
|
||||
"modernizr": "^3.11.4",
|
||||
"node-fetch": "^2.6.1",
|
||||
"optimize-css-assets-webpack-plugin": "^5.0.4",
|
||||
"postcss-calc": "^7.0.5",
|
||||
"postcss-easings": "^2.0.0",
|
||||
"postcss-extend": "^1.0.5",
|
||||
"postcss-hexrgba": "^2.0.0",
|
||||
"postcss-hexrgba": "^2.0.1",
|
||||
"postcss-import": "^12.0.1",
|
||||
"postcss-loader": "^3.0.0",
|
||||
"postcss-mixins": "^6.2.3",
|
||||
"postcss-nested": "^4.2.1",
|
||||
"postcss-nested": "^4.2.3",
|
||||
"postcss-preset-env": "^6.7.0",
|
||||
"postcss-scss": "^2.0.0",
|
||||
"postcss-scss": "^2.1.1",
|
||||
"postcss-simple-vars": "^5.0.2",
|
||||
"postcss-strip-inline-comments": "^0.1.5",
|
||||
"rimraf": "^2.4.3",
|
||||
"rimraf": "^3.0.2",
|
||||
"shell-escape": "^0.2.0",
|
||||
"simple-proxy-agent": "^1.1.0",
|
||||
"stylelint": "^12.0.1",
|
||||
"terser-webpack-plugin": "^2.3.0",
|
||||
"typescript": "^3.7.3",
|
||||
"webpack": "^4.41.2",
|
||||
"webpack-cli": "^3.3.10",
|
||||
"webpack-dev-server": "^3.9.0"
|
||||
"stylelint": "^13.9.0",
|
||||
"terser-webpack-plugin": "^2.3.8",
|
||||
"typescript": "^4.1.3",
|
||||
"webpack": "^4.46.0",
|
||||
"webpack-cli": "^3.3.12",
|
||||
"webpack-dev-server": "^3.11.2"
|
||||
},
|
||||
"resolutions": {
|
||||
"**/@types/react": "^16.14"
|
||||
},
|
||||
"jest": {
|
||||
"testEnvironment": "jest-environment-jsdom-sixteen",
|
||||
|
||||
@@ -43,7 +43,7 @@ do
|
||||
fi
|
||||
done
|
||||
|
||||
./node_modules/matrix-js-sdk/release.sh -u vector-im -z "$orig_args"
|
||||
./node_modules/matrix-js-sdk/release.sh -n -z "$orig_args"
|
||||
|
||||
release="${1#v}"
|
||||
tag="v${release}"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
set -ex
|
||||
|
||||
rm dist/riot-*.tar.gz || true # rm previous artifacts without failing if it doesn't exist
|
||||
rm dist/element-*.tar.gz || true # rm previous artifacts without failing if it doesn't exist
|
||||
|
||||
# Since the deps are fetched from git, we can rev-parse
|
||||
REACT_SHA=$(cd node_modules/matrix-react-sdk; git rev-parse --short=12 HEAD)
|
||||
|
||||
@@ -26,6 +26,7 @@ const INCLUDE_LANGS = [
|
||||
{'value': 'fi', 'label': 'Suomi'},
|
||||
{'value': 'fr', 'label': 'Français'},
|
||||
{'value': 'gl', 'label': 'Galego'},
|
||||
{'value': 'he', 'label': 'עברית'},
|
||||
{'value': 'hi', 'label': 'हिन्दी'},
|
||||
{'value': 'hu', 'label': 'Magyar'},
|
||||
{'value': 'is', 'label': 'íslenska'},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# download and unpack a riot-web tarball.
|
||||
# download and unpack a element-web tarball.
|
||||
#
|
||||
# Allows `bundles` to be extracted to a common directory, and a link to
|
||||
# config.json to be added.
|
||||
|
||||
@@ -32,6 +32,7 @@ cd react-sdk
|
||||
yarn link
|
||||
yarn link matrix-js-sdk
|
||||
yarn --network-timeout=100000 install
|
||||
yarn reskindex
|
||||
cd ../
|
||||
|
||||
echo "Setting up element-web with react-sdk and js-sdk packages"
|
||||
|
||||
@@ -77,7 +77,6 @@ dodep matrix-org matrix-js-sdk
|
||||
pushd matrix-js-sdk
|
||||
yarn link
|
||||
yarn install
|
||||
yarn build
|
||||
popd
|
||||
|
||||
yarn link matrix-js-sdk
|
||||
@@ -92,7 +91,7 @@ pushd matrix-react-sdk
|
||||
yarn link
|
||||
yarn link matrix-js-sdk
|
||||
yarn install
|
||||
yarn build
|
||||
yarn reskindex
|
||||
popd
|
||||
|
||||
yarn link matrix-react-sdk
|
||||
|
||||
@@ -18,7 +18,7 @@ my $gh = Net::GitHub->new(
|
||||
login => 'ara4n', pass => read_password("github password: "),
|
||||
);
|
||||
|
||||
$gh->set_default_user_repo('vector-im', 'riot-web');
|
||||
$gh->set_default_user_repo('vector-im', 'element-web');
|
||||
|
||||
#my @issues = $gh->issue->repos_issues({ state => 'all', milestone => 3 });
|
||||
my @issues = $gh->issue->repos_issues({ state => 'all' });
|
||||
|
||||
@@ -16,20 +16,20 @@ yarn build
|
||||
cp config.sample.json webapp/
|
||||
|
||||
mkdir -p dist
|
||||
cp -r webapp riot-$version
|
||||
cp -r webapp element-$version
|
||||
|
||||
# Just in case you have a local config, remove it before packaging
|
||||
rm riot-$version/config.json || true
|
||||
rm element-$version/config.json || true
|
||||
|
||||
# if $version looks like semver with leading v, strip it before writing to file
|
||||
if [[ ${version} =~ ^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+(-.+)?$ ]]; then
|
||||
echo ${version:1} > riot-$version/version
|
||||
echo ${version:1} > element-$version/version
|
||||
else
|
||||
echo ${version} > riot-$version/version
|
||||
echo ${version} > element-$version/version
|
||||
fi
|
||||
|
||||
tar chvzf dist/riot-$version.tar.gz riot-$version
|
||||
rm -r riot-$version
|
||||
tar chvzf dist/element-$version.tar.gz element-$version
|
||||
rm -r element-$version
|
||||
|
||||
echo
|
||||
echo "Packaged dist/riot-$version.tar.gz"
|
||||
echo "Packaged dist/element-$version.tar.gz"
|
||||
|
||||
27
src/@types/global.d.ts
vendored
27
src/@types/global.d.ts
vendored
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2020 New Vector Ltd
|
||||
Copyright 2020, 2021 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -17,21 +17,42 @@ limitations under the License.
|
||||
import "matrix-react-sdk/src/@types/global"; // load matrix-react-sdk's type extensions first
|
||||
import type {Renderer} from "react-dom";
|
||||
|
||||
type ElectronChannel =
|
||||
"app_onAction" |
|
||||
"before-quit" |
|
||||
"check_updates" |
|
||||
"install_update" |
|
||||
"ipcCall" |
|
||||
"ipcReply" |
|
||||
"loudNotification" |
|
||||
"preferences" |
|
||||
"seshat" |
|
||||
"seshatReply" |
|
||||
"setBadgeCount" |
|
||||
"update-downloaded" |
|
||||
"userDownloadCompleted" |
|
||||
"userDownloadOpen";
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
mxSendRageshake: (text: string, withLogs?: boolean) => void;
|
||||
matrixChat: ReturnType<Renderer>;
|
||||
|
||||
// electron-only
|
||||
ipcRenderer: any;
|
||||
electron?: Electron;
|
||||
|
||||
// opera-only
|
||||
opera: any;
|
||||
opera?: any;
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/InstallTrigger
|
||||
InstallTrigger: any;
|
||||
}
|
||||
|
||||
interface Electron {
|
||||
on(channel: ElectronChannel, listener: (event: Event, ...args: any[]) => void): void;
|
||||
send(channel: ElectronChannel, ...args: any[]): void;
|
||||
}
|
||||
|
||||
interface Navigator {
|
||||
// PWA badging extensions https://w3c.github.io/badging/
|
||||
setAppBadge?(count: number): Promise<void>;
|
||||
|
||||
@@ -16,8 +16,6 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import EmbeddedPage from 'matrix-react-sdk/src/components/structures/EmbeddedPage';
|
||||
import sanitizeHtml from 'sanitize-html';
|
||||
import { _t } from 'matrix-react-sdk/src/languageHandler';
|
||||
|
||||
@@ -15,8 +15,6 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import SdkConfig from 'matrix-react-sdk/src/SdkConfig';
|
||||
|
||||
@@ -2,22 +2,22 @@
|
||||
"Dismiss": "Omet",
|
||||
"Unknown device": "Dispositiu desconegut",
|
||||
"Welcome to Element": "Benvingut/da a Element",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Necessites utilitzar HTTPS per poder fer una trucada amb pantalla compartida.",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Has d'utilitzar HTTPS per poder fer una trucada amb pantalla compartida.",
|
||||
"powered by Matrix": "amb tecnologia de Matrix",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Xat descentralitzat, encriptat & col·laboratiu amb tecnologia de [matrix]",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Xat descentralitzat, xifrat i col·laboratiu amb tecnologia de [matrix]",
|
||||
"Create Account": "Crea un compte",
|
||||
"Explore rooms": "Explora sales",
|
||||
"Sign In": "Inicia la sessió",
|
||||
"Sign In": "Inicia sessió",
|
||||
"Invalid configuration: no default server specified.": "Configuració invàlida: no s'ha especificat cap servidor predeterminat.",
|
||||
"Invalid JSON": "JSON invàlid",
|
||||
"Go to your browser to complete Sign In": "Ves al teu navegador per completar l'inici de sessió",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuració invàlida: només pots especificar una sol de default_server_config, default_server_name, o default_hs_url.",
|
||||
"Go to your browser to complete Sign In": "Vés al navegador per completar l'inici de sessió",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuració invàlida: només pots especificar una únic default_server_config, default_server_name, o default_hs_url.",
|
||||
"Your Element is misconfigured": "Element està mal configurat",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configuració d'Element conté un JSON invàlid. Arregla el problema i actualitza la pàgina.",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "La configuració d'Element conté un JSON invàlid. Soluciona el problema i actualitza la pàgina.",
|
||||
"The message from the parser is: %(message)s": "El missatge de l'analitzador és: %(message)s",
|
||||
"Unable to load config file: please refresh the page to try again.": "No s'ha pogut carregar el fitxer de configuració: actualitza la pàgina per tornar-ho a provar.",
|
||||
"Unexpected error preparing the app. See console for details.": "Error inesperat preparant l'app. Consulta la consola pels a més detalls.",
|
||||
"Download Completed": "Descàrrega completada",
|
||||
"Unexpected error preparing the app. See console for details.": "Error inesperat durant la preparació de l'aplicació. Consulta la consola pels a més detalls.",
|
||||
"Download Completed": "Baixada completada",
|
||||
"Open": "Obre",
|
||||
"Open user settings": "Obre la configuració d'usuari",
|
||||
"Previous/next recently visited room or community": "Anterior/següent sala o comunitat visitada recentment",
|
||||
|
||||
@@ -28,5 +28,9 @@
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Pro nejlepší zážitek si prosím nainstalujte prohlížeč <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, nebo <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.": "Můžete pokračovat v užívání vašeho současného prohlížeče, ale některé (nebo dokonce všechny) funkce nemusí fungovat a vzhled a chování aplikace nemusí být správné.",
|
||||
"I understand the risks and wish to continue": "Rozumím a přesto chci pokračovat",
|
||||
"Go to element.io": "Přejít na element.io"
|
||||
"Go to element.io": "Přejít na element.io",
|
||||
"Failed to start": "Nepovedlo se nastartovat",
|
||||
"Powered by Matrix": "Běží na Matrixu",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s pro desktopový počítač (%(platformName)s)",
|
||||
"Missing indexeddb worker script!": "Nenačetl se skript spravující indexdb!"
|
||||
}
|
||||
|
||||
@@ -9,20 +9,28 @@
|
||||
"Invalid JSON": "Ugyldig JSON",
|
||||
"Unexpected error preparing the app. See console for details.": "Uventet fejl ved forberedelse af appen. Se konsollen for detaljer.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig konfiguration: kan kun angive en af default_server_config, default_server_name eller default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Ugyldig konfiguration: ingen standardserver angivet.",
|
||||
"Invalid configuration: no default server specified.": "Ugyldig konfiguration: Ingen standardserver er angivet.",
|
||||
"Sign In": "Log ind",
|
||||
"Create Account": "Opret brugerkonto",
|
||||
"Explore rooms": "Udforsk rum",
|
||||
"Missing indexeddb worker script!": "Manglende indexeddb worker script!",
|
||||
"Unable to load config file: please refresh the page to try again.": "Ikke i stand til at loade config fil: genopfrisk venligst siden for at prøve igen.",
|
||||
"Unable to load config file: please refresh the page to try again.": "Ikke i stand til at indlæse konfigurationsfil: Genopfrisk venligst siden for at prøve igen.",
|
||||
"Open user settings": "Åbn brugerindstillinger",
|
||||
"Previous/next recently visited room or community": "Forrige/næste besøgte rum eller fællesskab",
|
||||
"Go to your browser to complete Sign In": "Gå til din browser for at færdiggøre Log ind",
|
||||
"Go to element.io": "Gå til element.io",
|
||||
"I understand the risks and wish to continue": "Jeg forstår risikoen og ønsker at fortsætte",
|
||||
"Unsupported browser": "Usupporteret browser",
|
||||
"Unsupported browser": "Browser ikke understøttet",
|
||||
"Open": "Åbn",
|
||||
"Download Completed": "Hentning færdig",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Din Element konfiguration indeholder ugyldig JSON. Løs venligst problemet og genindlæs siden.",
|
||||
"Your Element is misconfigured": "Din Element er konfigureret forkert"
|
||||
"Your Element is misconfigured": "Din Element er konfigureret forkert",
|
||||
"Your browser can't run %(brand)s": "Din browser kan ikke køre %(brand)s",
|
||||
"Powered by Matrix": "Drevet af Matrix",
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||
"Failed to start": "Opstart mislykkedes",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop %(platformName)s",
|
||||
"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 kan fortsætte med at bruge din nuværende browser, men du kan opleve at visse eller alle funktioner ikke vil fungere korrekt.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Venligst installer <chromeLink>Chrome</chromeLink>,<firefoxLink>Firefox</firefoxLink> eller <safariLink>Safari</safariLink> for den bedste oplevelse.",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s bruger avanceret browser funktioner som ikke er understøttet af din nuværende browser."
|
||||
}
|
||||
|
||||
@@ -4,16 +4,16 @@
|
||||
"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.",
|
||||
"Welcome to Element": "Willkommen bei Element",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung unterstützt von [matrix]",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung mittels [matrix]",
|
||||
"Sign In": "Anmelden",
|
||||
"Create Account": "Account erstellen",
|
||||
"Explore rooms": "Erkunde Räume",
|
||||
"Unexpected error preparing the app. See console for details.": "Unerwarteter Fehler bei der Vorbereitung der App. Siehe Konsole für Details.",
|
||||
"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.",
|
||||
"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.",
|
||||
"The message from the parser is: %(message)s": "Die Nachricht des Parsers ist: %(message)s",
|
||||
"Invalid JSON": "Ungültiges JSON",
|
||||
"Go to your browser to complete Sign In": "Gehe zu deinem Browser, um die Anmeldung abzuschließen",
|
||||
"Go to your browser to complete Sign In": "Gehe in deinen Browser, um die Anmeldung abzuschließen",
|
||||
"Open user settings": "Öffne Nutzer-Einstellungen",
|
||||
"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!",
|
||||
@@ -24,9 +24,9 @@
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)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.",
|
||||
"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 mit diesem Browser weitermachen, aber einiges könnte nicht funktionieren und die Darstellung könnte fehlerhaft sein.",
|
||||
"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.",
|
||||
"I understand the risks and wish to continue": "Ich verstehe die Risiken und möchte fortfahren",
|
||||
"Your Element is misconfigured": "Dein Element ist fehlkonfiguriert",
|
||||
"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.",
|
||||
"Download Completed": "Download fertiggestellt",
|
||||
"Open": "Öffnen",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Απαιτείται η χρήση HTTPS για την πραγματοποίηση κλήσης διαμοιρασμού επιφάνειας εργασίας.",
|
||||
"powered by Matrix": "λειτουργεί με το Matrix",
|
||||
"Welcome to Element": "Καλώς ήλθατε στο Element",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία και συνεργασία χρησιμοποιώντας το [matrix]",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Αποκεντρωμένη, κρυπτογραφημένη συνεργασία συνομιλίας χρησιμοποιώντας το [matrix]",
|
||||
"Sign In": "Σύνδεση",
|
||||
"Create Account": "Δημιουργία Λογαριασμού",
|
||||
"The message from the parser is: %(message)s": "Το μήνυμα από τον αναλυτή είναι: %(message)s",
|
||||
|
||||
@@ -12,5 +12,25 @@
|
||||
"Invalid JSON": "Invalid 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.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Invalid configuration: no default server specified."
|
||||
"Invalid configuration: no default server specified.": "Invalid configuration: no default server specified.",
|
||||
"Failed to start": "Failed to start",
|
||||
"Go to element.io": "Go to element.io",
|
||||
"I understand the risks and wish to continue": "I understand the risks and wish to continue",
|
||||
"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.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.",
|
||||
"%(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.",
|
||||
"Your browser can't run %(brand)s": "Your browser can't run %(brand)s",
|
||||
"Unsupported browser": "Unsupported browser",
|
||||
"Powered by Matrix": "Powered by Matrix",
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||
"Go to your browser to complete Sign In": "Go to your browser to complete Sign In",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
|
||||
"Previous/next recently visited room or community": "Previous/next recently visited room or community",
|
||||
"Open user settings": "Open user settings",
|
||||
"Open": "Open",
|
||||
"Download Completed": "Download Completed",
|
||||
"Unable to load config file: please refresh the page to try again.": "Unable to load config file: please refresh the page to try again.",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.",
|
||||
"Your Element is misconfigured": "Your Element is misconfigured",
|
||||
"Missing indexeddb worker script!": "Missing indexeddb worker script!"
|
||||
}
|
||||
|
||||
@@ -3,34 +3,34 @@
|
||||
"Dismiss": "Omitir",
|
||||
"powered by Matrix": "con el poder de Matrix",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Debes usar HTTPS para hacer una llamada con pantalla compartida.",
|
||||
"Welcome to Element": "Bienvenido a Element",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones cifradas y descentralizadas & colaboración impulsada por [matrix]",
|
||||
"Welcome to Element": "Te damos la bienvenida a Element",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones cifradas y descentralizadas. Funciona con [matrix]",
|
||||
"Sign In": "Iniciar sesión",
|
||||
"Create Account": "Crear cuenta",
|
||||
"Explore rooms": "Explorar salas",
|
||||
"Unexpected error preparing the app. See console for details.": "Error inesperado preparando la aplicación. Vea la consola para más detalles.",
|
||||
"Unexpected error preparing the app. See console for details.": "Error inesperado preparando la aplicación. Ver la consola para más detalles.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuración errónea: sólo puede especificar uno de default_server_config, default_server_name, o default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Configuración errónea: no se ha especificado servidor.",
|
||||
"The message from the parser is: %(message)s": "El mensaje del parser es: %(message)s",
|
||||
"Invalid JSON": "JSON inválido",
|
||||
"Open user settings": "Abrir opciones de usuario",
|
||||
"Go to your browser to complete Sign In": "Abre tu navegador web para completar el registro",
|
||||
"Missing indexeddb worker script!": "Falta el script de trabajo indexeddb!",
|
||||
"Unable to load config file: please refresh the page to try again.": "No se ha podido cargar el archivo de configuración. Recarga la página para intentar nuevamente.",
|
||||
"Missing indexeddb worker script!": "¡Falta el Worker script “indexeddb”!",
|
||||
"Unable to load config file: please refresh the page to try again.": "No se ha podido cargar el archivo de configuración. Recarga la página para intentarlo otra vez.",
|
||||
"Previous/next recently visited room or community": "Anterior/siguiente sala o comunidad visitada recientemente",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Escritorio (%(platformName)s)",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s de escritorio (%(platformName)s)",
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||
"Unsupported browser": "Navegador no soportado",
|
||||
"Unsupported browser": "Navegador no compatible",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Por favor, instale <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, o <safariLink>Safari</safariLink> para la mejor experiencia.",
|
||||
"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.": "Puedes seguir utilizando tu navegador actual, pero puede que algunas funcionalidades no estén disponibles o que algunas partes de la aplicación se muestren de forma incorrecta.",
|
||||
"I understand the risks and wish to continue": "Entiendo los riesgos y deseo continuar",
|
||||
"I understand the risks and wish to continue": "Entiendo los riesgos y quiero continuar",
|
||||
"Go to element.io": "Ir a element.io",
|
||||
"Failed to start": "Fallo al iniciar",
|
||||
"Your Element is misconfigured": "Tu elemento está mal configurado",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Su configuración de Element contiene JSON inválido. Por favor corríjalo e inténtelo de nuevo.",
|
||||
"Your Element is misconfigured": "Tu aplicación Element está mal configurada",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Tu configuración de Element contiene JSON inválido. Por favor corrígelo e inténtelo de nuevo.",
|
||||
"Download Completed": "Descarga completada",
|
||||
"Open": "Abrir",
|
||||
"Your browser can't run %(brand)s": "Su navegador es incompatible 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.",
|
||||
"Powered by Matrix": "Desarrollado por Matrix"
|
||||
"Powered by Matrix": "Funciona con Matrix"
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"Invalid JSON": "Vigane JSON",
|
||||
"Unknown device": "Tundmatu seade",
|
||||
"Invalid configuration: no default server specified.": "Vigane seadistus: vaikimisi server on määramata.",
|
||||
"Unable to load config file: please refresh the page to try again.": "Seadistuste faili laadimine ei õnnestunud: uuesti proovimiseks palun lae leht uuesti.",
|
||||
"Unable to load config file: please refresh the page to try again.": "Seadistuste faili laadimine ei õnnestunud: uuesti proovimiseks palun laadi leht uuesti.",
|
||||
"Unexpected error preparing the app. See console for details.": "Rakenduse ettevalmistamisel tekkis ootamatu viga. Täpsema teabe leiad konsoolist.",
|
||||
"Open user settings": "Ava kasutaja seadistused",
|
||||
"Go to your browser to complete Sign In": "Sisselogimiseks ava oma brauser",
|
||||
@@ -15,7 +15,7 @@
|
||||
"Previous/next recently visited room or community": "Eelmine/järgmine hiljuti kasutatud jututuba või kogukond",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Ekraani jagava kõne jaoks pead kasutama HTTPS-ühendust.",
|
||||
"powered by Matrix": "põhineb Matrix'il",
|
||||
"Welcome to Element": "Tere tulemast Element kasutajaks",
|
||||
"Welcome to Element": "Tere tulemast kasutama suhtlusrakendust Element",
|
||||
"Sign In": "Logi sisse",
|
||||
"Create Account": "Loo konto",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s'i töölauaversioon (%(platformName)s)",
|
||||
@@ -29,7 +29,7 @@
|
||||
"Download Completed": "Allalaadimine on lõpetatud",
|
||||
"Open": "Ava",
|
||||
"Your Element is misconfigured": "Sinu Element on valesti seadistatud",
|
||||
"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 lae 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",
|
||||
"%(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"
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"Unknown device": "Appareil inconnu",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Vous devez utiliser HTTPS pour effectuer un appel avec partage d’écran.",
|
||||
"Welcome to Element": "Bienvenue sur Element",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Discussion & 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",
|
||||
"Create Account": "Créer un compte",
|
||||
"Explore rooms": "Explorer 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.",
|
||||
"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 entre 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é.",
|
||||
"The message from the parser is: %(message)s": "Le message de l’analyseur est : %(message)s",
|
||||
"Invalid JSON": "JSON non valide",
|
||||
@@ -21,7 +21,7 @@
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||
"Unsupported browser": "Navigateur non pris en charge",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Veuillez installer <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> ou <safariLink>Safari</safariLink> pour une expérience optimale.",
|
||||
"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.": "Vous pouvez continuer à utiliser votre navigateur actuel, mais vous risquez de trouver que certaines fonctionnalités et/ou l'apparence de l'application sont incorrectes.",
|
||||
"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.": "Vous pouvez continuer à utiliser votre navigateur actuel, mais vous risquez de trouver que certaines fonctionnalités et/ou l’apparence de l’application sont incorrectes.",
|
||||
"I understand the risks and wish to continue": "Je comprends les risques et souhaite continuer",
|
||||
"Go to element.io": "Aller vers element.io",
|
||||
"Failed to start": "Échec au démarrage",
|
||||
@@ -31,6 +31,6 @@
|
||||
"Your Element is misconfigured": "Votre Element est mal configuré",
|
||||
"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",
|
||||
"%(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 supporte pas.",
|
||||
"%(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"
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"Invalid JSON": "JSON non válido",
|
||||
"Unexpected error preparing the app. See console for details.": "Fallo non agardado ao preparar a app. Detalles na consola.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuración non válida: só se pode indicar un de default_server_config, default_server_name, ou default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Configuración non válida: non se indicou servidor por omisión.",
|
||||
"Invalid configuration: no default server specified.": "Configuración non válida: non se indicou servidor por defecto.",
|
||||
"Missing indexeddb worker script!": "Falta o script indexeddb!",
|
||||
"Unable to load config file: please refresh the page to try again.": "Non se cargou o ficheiro de configuración: actualiza a páxina para reintentalo.",
|
||||
"Open user settings": "Abrir axustes da usuaria",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"Dismiss": "שחרר",
|
||||
"Dismiss": "התעלם",
|
||||
"powered by Matrix": "מופעל ע\"י Matrix",
|
||||
"Unknown device": "מכשיר לא ידוע",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "עליך להשתמש ב HTTPS בכדי לבצע שיחת ווידאו משותפת.",
|
||||
@@ -8,6 +8,29 @@
|
||||
"Invalid JSON": "JSON לא חוקי",
|
||||
"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.": "תצורה שגויה: לא צוין שרת ברירת מחדל.",
|
||||
"Open user settings": "פתיחת הגדרות משתמש",
|
||||
"Go to your browser to complete Sign In": "עבור לדפדפן להמשך ההתחברות"
|
||||
"Open user settings": "פתח הגדרות משתמש",
|
||||
"Go to your browser to complete Sign In": "עבור לדפדפן להמשך ההתחברות",
|
||||
"Explore rooms": "שיטוט בחדרים",
|
||||
"Create Account": "יצירת חשבון",
|
||||
"Sign In": "כניסה",
|
||||
"Previous/next recently visited room or community": "הבא\\קודם חדרים וקהילות שביקרתם לאחרונה",
|
||||
"Open": "פתח",
|
||||
"Download Completed": "ההורדה הושלמה",
|
||||
"Unexpected error preparing the app. See console for details.": "שגיאה לא צפויה במהלך הכנת האפליקציה. ראו קונסול לפרטים נוספים.",
|
||||
"Unable to load config file: please refresh the page to try again.": "לא יכול לקרוא את קובץ ההגדרות: אנא אתחלו את הדף לנסות שנית.",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "האלמנט מכיל הגדרת JSON שגויה, אנא תקנו את הבעיה ואתחלו את הדף.",
|
||||
"Your Element is misconfigured": "האלמנט מוגדר באופן שגוי",
|
||||
"Go to element.io": "חזור לאתר הראשי: element.io",
|
||||
"I understand the risks and wish to continue": "הסיכונים מובנים לי ואני מעוניינ/ת להמשיך",
|
||||
"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.": "ניתן להמשיך ולהשתמש בדפדפן זה, אך ייתכן שחלק מן התכונות והמאפיינים לא יעבדו כשורה או ייראו כשגויים.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "נא התקן את דפדפן <chromeLink>כרום</chromeLink>, <firefoxLink>פיירפוקס</firefoxLink> או <safariLink>סאפרי</safariLink> בשביל החוויה הטובה ביותר.",
|
||||
"Failed to start": "כשל בהעלאת התוכנה",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s משתמש בתכונות דפדפן מתקדמות שאינן נתמכות בדפדפן הנוכחי שלך.",
|
||||
"Your browser can't run %(brand)s": "הדפדפן שלך לא יכול להריץ %(brand)s",
|
||||
"Unsupported browser": "דפדפן לא נתמך",
|
||||
"Powered by Matrix": "מופעל על ידי מטריקס",
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s שולחן עבודה %(platformName)s",
|
||||
"The message from the parser is: %(message)s": "ההודעה מהניתוח היא: %(message)s",
|
||||
"Missing indexeddb worker script!": "סקריפט indexeddb worker חסר!"
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"powered by Matrix": "keyrt með Matrix",
|
||||
"Welcome to Element": "Velkomin í Element",
|
||||
"Unknown device": "Óþekkt tæki",
|
||||
"Dismiss": "Hafna",
|
||||
"Dismiss": "Hunsa",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Þú verður að nota HTTPS til að hringja samtal með deilingu á skjá.",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dulritað dreifvinnsluspjall & samstarfstól keyrt með [matrix]",
|
||||
"Open": "Opna",
|
||||
@@ -18,5 +18,19 @@
|
||||
"%(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.": "vinsamlegast setja upp <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, eða <safariLink>Safari</safariLink> fyrir besta reynsluna.",
|
||||
"I understand the risks and wish to continue": "Ég skil áhættuna og óska að halda áfram",
|
||||
"Go to element.io": "farðu í element.io"
|
||||
"Go to element.io": "farðu í element.io",
|
||||
"Unexpected error preparing the app. See console for details.": "Óvænt villa við undirbúning appsins. Sjá nánar í textaskrá vafra.",
|
||||
"Failed to start": "Mistókst að ræsa",
|
||||
"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.": "Þú getur haldið áfram að nota núverandi vafra, en sumar eða allir eiginleikar virka ekki og útlit og tilfinning forritsins geta verið röng.",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s notar háþróaða vafraeiginleika sem eru ekki studdir af núverandi vafra þínum.",
|
||||
"Powered by Matrix": "Keyrt af Matrix",
|
||||
"Go to your browser to complete Sign In": "Farðu í vafrann þinn til að ljúka innskráningu",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Borðtölva (%(platformName)s)",
|
||||
"Previous/next recently visited room or community": "Fyrra/næsta nýlega heimsótt herbergi eða samfélag",
|
||||
"Open user settings": "Opna notandastillingar",
|
||||
"Unable to load config file: please refresh the page to try again.": "Ekki er hægt að hlaða stillingaskrána: endurnýjaðu síðuna til að reyna aftur.",
|
||||
"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",
|
||||
"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."
|
||||
}
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
"Unexpected error preparing the app. See console for details.": "アプリケーションの準備中に予期しないエラーが発生しました。詳細はコンソールを参照してください。",
|
||||
"Invalid configuration: no default server specified.": "不正な設定です:デフォルトのサーバーが設定されていません。",
|
||||
"Sign In": "サインイン",
|
||||
"Create Account": "アカウント作成",
|
||||
"Explore rooms": "部屋を探索する",
|
||||
"Create Account": "アカウントの作成",
|
||||
"Explore rooms": "部屋を探す",
|
||||
"The message from the parser is: %(message)s": "パーザーのメッセージ: %(message)s",
|
||||
"Invalid JSON": "妥当でないJSON",
|
||||
"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のいずれか一つのみが指定できます。",
|
||||
@@ -31,5 +31,6 @@
|
||||
"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が動きません",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)sはブラウザの高度な機能を使う必要がありますが、このブラウザではその機能がサポートされていないようです。",
|
||||
"Powered by Matrix": "Powered by Matrix"
|
||||
"Powered by Matrix": "Powered by Matrix",
|
||||
"Previous/next recently visited room or community": "最近利用したルームまたはコミュニティ"
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"Missing indexeddb worker script!": "Trūksta indexeddb worker skripto!",
|
||||
"Unable to load config file: please refresh the page to try again.": "Nepavyko įkelti konfigūracijos failo: atnaujinkite puslapį, kad pabandytumėte dar kartą.",
|
||||
"Previous/next recently visited room or community": "Ankstesnis/sekantis neseniai lankytas kambarys ar bendruomenė",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Kompiuteriui (%(platformName)s)",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Kompiuteryje (%(platformName)s)",
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||
"Unsupported browser": "Nepalaikoma naršyklė",
|
||||
"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.": "Jūs galite toliau naudotis savo dabartine naršykle, bet kai kurios arba visos funkcijos gali neveikti ir programos išvaizda bei sąsaja gali būti neteisingai rodoma.",
|
||||
|
||||
@@ -1,25 +1,36 @@
|
||||
{
|
||||
"Dismiss": "Atteikt",
|
||||
"Dismiss": "Aizvērt",
|
||||
"powered by Matrix": "Tiek darbināta ar Matrix",
|
||||
"Unknown device": "Nezināma ierīce",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Lai izmantotu ekrāna kopīgošanas zvanu, nepieciešams izmantot HTTPS savienojumu.",
|
||||
"Welcome to Element": "Esiet gaidīti Element",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Lai veiktu ekrāna kopīgošanas zvanu, nepieciešams izmantot HTTPS savienojumu.",
|
||||
"Welcome to Element": "Esiet laipni gaidīti Element",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizēta, šifrēta čata & kopdarbošanās sistēma uz [matrix] bāzes",
|
||||
"Sign In": "Ienākt",
|
||||
"Sign In": "Pierakstīties",
|
||||
"Create Account": "Izveidot kontu",
|
||||
"Explore rooms": "Atklāt istabas",
|
||||
"Explore rooms": "Pārlūkot istabas",
|
||||
"Unexpected error preparing the app. See console for details.": "Negaidīta kļūda, sagatavojot lietotni. Sīkāku informāciju skatiet konsolē.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Nederīga konfigurācija: var norādīt tikai vienu no default_server_config, default_server_name, vai default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Nekorekta konfigurācija: nav norādīts noklusējuma serveris.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Kļūdaina konfigurācija: var norādīt tikai vienu no parametriem default_server_config, default_server_name, vai default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Kļūdaina konfigurācija: nav norādīts noklusējuma serveris.",
|
||||
"The message from the parser is: %(message)s": "Ziņojums no parsētāja ir: %(message)s",
|
||||
"Invalid JSON": "Nederīgs JSON",
|
||||
"Unable to load config file: please refresh the page to try again.": "Neizdevās ielādēt config datni: lūdzu pārlādē lapu lai mēģinātu vēlreiz.",
|
||||
"Open user settings": "Atver lietotāja iestatījumus",
|
||||
"Go to your browser to complete Sign In": "Aizej uz savu pārlūku lai pabeigtu Piekļuvi",
|
||||
"Invalid JSON": "Kļūdains JSON",
|
||||
"Unable to load config file: please refresh the page to try again.": "Neizdevās ielādēt konfigurācijas datni. Lūdzu, pārlādējiet lapu, lai mēģinātu vēlreiz.",
|
||||
"Open user settings": "Atvērt lietotāja iestatījumus",
|
||||
"Go to your browser to complete Sign In": "Pārejiet uz pārlūku, lai pabeigtu pierakstīšanos",
|
||||
"Unsupported browser": "Neatbalstīts pārlūks",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Lūdzu instalē <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, vai <safariLink>Safari</safariLink> priekš labākās pieredzes.",
|
||||
"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.": "Tu vari turpināt izmantot savu pašreizējo pārlūku, bet dažas vai visas funkcijas nestrādās, un lietotnes izskats var būt nepareizs.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Labākajai izmantošanas pieredzei, lūdzu, instalējiet <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> vai <safariLink>Safari</safariLink> pārlūku.",
|
||||
"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.": "Jūs varat turpināt lietot savu pašreizējo pārlūku, bet dažas vai visas funkcijas nestrādās, un lietotnes izskats var būt nepareizs.",
|
||||
"I understand the risks and wish to continue": "Es pieņemu riskus un vēlos turpināt",
|
||||
"Go to element.io": "Ej uz element.io",
|
||||
"Failed to start": "Neizdevās palaist"
|
||||
"Failed to start": "Neizdevās palaist",
|
||||
"Powered by Matrix": "Darbojas uz Matrix",
|
||||
"Previous/next recently visited room or community": "Iepriekšējā/nākošā nesen apmeklētā istaba vai kopiena",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s izmanto pārlūku papildus funkcijas, kas netiek atbalstītas šajā pārlūkā.",
|
||||
"Your browser can't run %(brand)s": "Jūsu pārlūks nevar palaist %(brand)s",
|
||||
"Missing indexeddb worker script!": "Trūkst indexeddb worker skripta!",
|
||||
"Open": "Atvērt",
|
||||
"Download Completed": "Lejupielāde pabeigta",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Jūsu Element konfigurācija satur kļūdainu JSON. Lūdzu, salabojiet problēmu un pārlādējiet lapu.",
|
||||
"Your Element is misconfigured": "Jūsu Element ir nokonfigurēts kļūdaini",
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)"
|
||||
}
|
||||
|
||||
@@ -3,5 +3,21 @@
|
||||
"powered by Matrix": "മാട്രിക്സില് പ്രവര്ത്തിക്കുന്നു",
|
||||
"Unknown device": "അപരിചിത ഡിവൈസ്",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "സ്ക്രീന് ഷെയറിങ്ങ് കോള് നടത്തണമെങ്കില് https ഉപയോഗിക്കണം.",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "വികേന്ദ്രീകൃത , എന്ക്രിപ്റ്റഡ് ചാറ്റ് & മാട്രിക്സ് നല്കുന്ന കൊളാബൊറേഷന്"
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "വികേന്ദ്രീകൃത , എന്ക്രിപ്റ്റഡ് ചാറ്റ് & മാട്രിക്സ് നല്കുന്ന കൊളാബൊറേഷന്",
|
||||
"%(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.": "ദയവായി <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, അല്ലെങ്കിൽ <safariLink>Safari</safariLink> ഇൻസ്റ്റാൾ ചെയ്യുക.",
|
||||
"Your Element is misconfigured": "നിങ്ങളുടെ Element തെറ്റായിട്ടാണ് കോൺഫിഗർ ചെയ്തിരിക്കുന്നത്",
|
||||
"Invalid configuration: no default server specified.": "അസാധുവായ കോൺഫിഗറേഷൻ: സ്ഥിര സെർവർ ഒന്നും വ്യക്തമാക്കിയില്ല.",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "അസാധുവായ കോൺഫിഗറേഷൻ: default_server_config, default_server_name, or default_hs_url-ൽ ഒരെണ്ണം മാത്രമേ വ്യക്തമാക്കാൻ കഴിയൂ.",
|
||||
"Missing indexeddb worker script!": "indexeddb worker സ്ക്രിപ്റ്റ് കണ്ടെത്താനായില്ല!",
|
||||
"Open user settings": "യൂസർ ക്രമീകരങ്ങൾ തുറക്കുക",
|
||||
"Download Completed": "ഡൗൺലോഡ് പൂർത്തിയായി",
|
||||
"Unsupported browser": "പിന്തുണയ്ക്കാത്ത ബ്രൗസർ",
|
||||
"I understand the risks and wish to continue": "ഞാൻ അപകടസാധ്യതകൾ മനസിലാക്കുകയും തുടരാൻ ആഗ്രഹിക്കുകയും ചെയ്യുന്നു",
|
||||
"Go to element.io": "element.io-ലേക്ക് പോവുക",
|
||||
"Failed to start": "ആരംഭിക്കാൻ പരാജയപെട്ടു",
|
||||
"Welcome to Element": "Element-ലേക്ക് സ്വാഗതം",
|
||||
"Sign In": "പ്രവേശിക്കുക",
|
||||
"Create Account": "അക്കൗണ്ട് സൃഷ്ടിക്കുക",
|
||||
"Explore rooms": "മുറികൾ കണ്ടെത്തുക"
|
||||
}
|
||||
|
||||
@@ -27,5 +27,10 @@
|
||||
"Unable to load config file: please refresh the page to try again.": "Kan ikke laste inn konfigurasjonsfil: oppdater siden for å prøve igjen.",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Ditt Element konfigurasjonen inneholder ugyldig JSON. Løs problemet og last siden på nytt.",
|
||||
"Your Element is misconfigured": "Ditt Element er feilkonfigurert",
|
||||
"Missing indexeddb worker script!": "Mangler indexeddb arbeiderskript!"
|
||||
"Missing indexeddb worker script!": "Mangler indexeddb arbeiderskript!",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Vennligst installer <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, eller <safariLink>Safari</safariLink> for den beste opplevelsen.",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s bruker avanserte nettleserfunksjoner som ikke støttes av din nåværende nettleser.",
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Skrivebord (%(platformName)s)",
|
||||
"Open": "Åpne"
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Gedecentraliseerd en versleuteld chatten & samenwerken dankzij [matrix]",
|
||||
"Sign In": "Aanmelden",
|
||||
"Create Account": "Account aanmaken",
|
||||
"Explore rooms": "Kamers verkennen",
|
||||
"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.",
|
||||
"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: no default server specified.": "Configuratie ongeldig: geen standaardserver opgegeven.",
|
||||
@@ -22,13 +22,15 @@
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||
"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.",
|
||||
"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 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.": "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.",
|
||||
"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",
|
||||
"Failed to start": "Opstarten mislukt",
|
||||
"Open": "Open",
|
||||
"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.",
|
||||
"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.",
|
||||
"Download Completed": "Download voltooid",
|
||||
"Your Element is misconfigured": "Uw Element is verkeerd geconfigureerd",
|
||||
"Your browser can't run %(brand)s": "Uw browser kan %(brand)s niet draaien."
|
||||
"Your Element is misconfigured": "Je Element is verkeerd geconfigureerd",
|
||||
"Your browser can't run %(brand)s": "Je browser kan %(brand)s niet draaien",
|
||||
"%(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.",
|
||||
"Powered by Matrix": "Gebruikt Matrix technologie"
|
||||
}
|
||||
|
||||
@@ -31,5 +31,6 @@
|
||||
"Your browser can't run %(brand)s": "Twoja przeglądarka nie obsługuje %(brand)s",
|
||||
"%(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 is misconfigured": "Element jest nieprawidłowo skonfigurowany"
|
||||
"Your Element is misconfigured": "Element jest nieprawidłowo skonfigurowany",
|
||||
"Powered by Matrix": "Zasilane przez Matrix"
|
||||
}
|
||||
|
||||
@@ -18,5 +18,14 @@
|
||||
"Download Completed": "Transferência concluída",
|
||||
"Unable to load config file: please refresh the page to try again.": "Não foi possível carregar o ficheiro de configuração: atualize a página para tentar novamente.",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "A configuração do Element contém um JSON inválido. Corrija o problema e recarregue a página.",
|
||||
"Your Element is misconfigured": "O Element está configurado incorretamente"
|
||||
"Your Element is misconfigured": "O Element está configurado incorretamente",
|
||||
"Powered by Matrix": "Desenvolvido por Matrix",
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (2%(browserName)s, 3%(osName)s)",
|
||||
"Go to element.io": "Visite element.io",
|
||||
"I understand the risks and wish to continue": "Compreendo os riscos e pretendo continuar",
|
||||
"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.": "Podes continuar a utilizar teu browser atual, mas algumas funcionalidades podem não funcionar ou aparecerem de forma incorrecta.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Por favor, instala <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, ou <safariLink>Safari</safariLink> para uma melhor experiência.",
|
||||
"Unsupported browser": "Browser não suportado",
|
||||
"Previous/next recently visited room or community": "Anterior/seguinte comunidade ou sala recentemente visitado",
|
||||
"Open user settings": "Abrir definições do utilizador"
|
||||
}
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
{
|
||||
"Unknown device": "නොදන්නා උපකරණය",
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)"
|
||||
"Unknown device": "නොදන්නා උපාංගයකි",
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||
"Welcome to Element": "ඉලමන්ට් වෙත සාදරයෙන් පිළිගනිමු",
|
||||
"Open": "විවෘත කරන්න",
|
||||
"Powered by Matrix": "මැට්රික්ස් මඟින් බලගන්වා ඇත",
|
||||
"Sign In": "පිවිසෙන්න"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"Sign In": "Prijava",
|
||||
"Create Account": "Registracija",
|
||||
"Explore rooms": "Raziščite sobe",
|
||||
"Missing indexeddb worker script!": "Manjka skript za IndexDB!",
|
||||
"Missing indexeddb worker script!": "Manjka skripta za IndexDB!",
|
||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neveljavna konfiguracija: lahko izberete samo eno izmed default_server_config, default_server_name ali default_hs_url.",
|
||||
"Invalid configuration: no default server specified.": "Neveljavna konfiguracija: privzeti strežnik ni nastavljen.",
|
||||
"Your Element is misconfigured": "Vaš Element je napačno nastavljen",
|
||||
|
||||
@@ -3,23 +3,23 @@
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Морате користити HTTPS да бисте започели позив са дељењем екрана.",
|
||||
"Dismiss": "Одбаци",
|
||||
"powered by Matrix": "покреће Матрикс",
|
||||
"Welcome to Element": "Добродошли у Element",
|
||||
"Welcome to Element": "Добродошли у Елемент",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализовано, шифровано ћаскање и сарадња коју покреће [matrix]",
|
||||
"Sign In": "Пријава",
|
||||
"Sign In": "Пријави се",
|
||||
"Create Account": "Направи налог",
|
||||
"Explore rooms": "Истражи собе",
|
||||
"Invalid configuration: no default server specified.": "Погрешно подешавање: подразумевани сервер није наведен.",
|
||||
"The message from the parser is: %(message)s": "Порука из парсера: %(message)s",
|
||||
"Invalid JSON": "Погрешан JSON",
|
||||
"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, or 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.",
|
||||
"Missing indexeddb worker script!": "Недостаје скрипта indexeddb радника!",
|
||||
"Your Element is misconfigured": "Ваша Елемент апликација је лоше подешена",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Подешавање ваше Елемент апликације садржи неисправни JSON. Поправите проблем па поново учитајте ову страницу.",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Подешавање ваше Елемент апликације садржи неисправни „JSON“. Поправите проблем па поново учитајте ову страницу.",
|
||||
"Unable to load config file: please refresh the page to try again.": "Не могу да учитам датотеку подешавања: освежите страницу и покушајте поново.",
|
||||
"Download Completed": "Преузимање завршено",
|
||||
"Open": "Отвори",
|
||||
"Open user settings": "Отвори корисничка подешавања",
|
||||
"Open user settings": "Отвори корисничке поставке",
|
||||
"Previous/next recently visited room or community": "Претходно/следеће недавно посећене собе или заједнице",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s радна површ (%(platformName)s)",
|
||||
"Go to your browser to complete Sign In": "Отворите ваш прегледач за довршавање пријаве",
|
||||
@@ -29,7 +29,8 @@
|
||||
"%(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> за најбољи доживљај.",
|
||||
"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",
|
||||
"Failed to start": "Неуспех при покретању"
|
||||
"Failed to start": "Неуспех при покретању",
|
||||
"Powered by Matrix": "Оснажен од стране Матрикса"
|
||||
}
|
||||
|
||||
1
src/i18n/strings/szl.json
Normal file
1
src/i18n/strings/szl.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
1
src/i18n/strings/tlh.json
Normal file
1
src/i18n/strings/tlh.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -20,11 +20,17 @@
|
||||
"Unable to load config file: please refresh the page to try again.": "Yapılandırma (config) dosyası yüklenemedi: lütfen yeniden denemek için sayfayı yenileyin.",
|
||||
"Download Completed": "İndirme Tamamlandı",
|
||||
"Unsupported browser": "Desteklenmeyen tarayıcı",
|
||||
"Your browser can't run %(brand)s": "",
|
||||
"Your browser can't run %(brand)s": "Tarayıcınız %(brand)s uygulamasını çalıştıramıyor",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s, kullandığınız tarayıcı tarafından desteklenmeyen, gelişmiş tarayıcı özellikleri kullanıyor.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Daha iyi bir deneyim için lütfen <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> ya da <safariLink>Safari</safariLink> tarayıcılarından birini yükleyin.",
|
||||
"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 anda kullanmış olduğunuz tarayıcınızı kullanmaya devam edebilirsiniz ancak uygulamanın sunduğu bazı ya da bütün özellikler çalışmayabilir ve deneyiminizi kötü yönde etkileyebilir.",
|
||||
"I understand the risks and wish to continue": "Riskleri anlıyorum ve devam etmek istiyorum",
|
||||
"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",
|
||||
"Powered by Matrix": "Matrix tarafından güçlendirildi",
|
||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Masaüstü (%(platformName)s)",
|
||||
"Open": "Aç",
|
||||
"Missing indexeddb worker script!": "Indexeddb worker kodu eksik!"
|
||||
}
|
||||
|
||||
@@ -2,35 +2,35 @@
|
||||
"Dismiss": "Відхилити",
|
||||
"powered by Matrix": "працює на Matrix",
|
||||
"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",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентралізована, зашифрована балачка та засіб для співробітництва, що працює на [matrix]",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентралізований, зашифрований чат та засіб для співпраці, заснований на [matrix]",
|
||||
"Sign In": "Увійти",
|
||||
"Create Account": "Створити обліковий запис",
|
||||
"Explore rooms": "Шукати кімнати",
|
||||
"Unexpected error preparing the app. See console for details.": "Неочікувана помилка при готуванні програми. Дивіться деталі у виводі консолі.",
|
||||
"Explore rooms": "Каталог кімнат",
|
||||
"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: no default server specified.": "Невірна конфігурація: не вказано усталений сервер.",
|
||||
"The message from the parser is: %(message)s": "Аналізатор повідомляє: %(message)s",
|
||||
"Invalid configuration: no default server specified.": "Невірна конфігурація: не вказано сервер за замовчуванням.",
|
||||
"The message from the parser is: %(message)s": "Повідомлення від аналізатора : %(message)s",
|
||||
"Invalid JSON": "Хибний JSON",
|
||||
"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>.",
|
||||
"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": "Я усвідомлюю ризик і бажаю продовжити",
|
||||
"Go to element.io": "Перейти на element.io",
|
||||
"Failed to start": "Запуск не вдався",
|
||||
"Download Completed": "Завантаження завершено",
|
||||
"Missing indexeddb worker script!": "Відсутній скрипт воркеру для IndexedDB!",
|
||||
"Your Element is misconfigured": "Ваш Element налаштовано неправильно",
|
||||
"Missing indexeddb worker script!": "Відсутній робочий сценарій IndexedDB!",
|
||||
"Your Element is misconfigured": "Ваш Element налаштовано невірно",
|
||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Ваша конфігурація Element містить хибний JSON. Виправте проблему та оновіть сторінку.",
|
||||
"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": "Відкрити",
|
||||
"Open user settings": "Відкрити користувацькі налаштування",
|
||||
"Open user settings": "Відкрити налаштування користувача",
|
||||
"Previous/next recently visited room or community": "Попередня/наступна нещодавно відвідана кімната чи спільнота",
|
||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(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)",
|
||||
"Powered by Matrix": "Працює на Matrix",
|
||||
"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 використовує передові властивості, які ваш браузер не підтримує."
|
||||
}
|
||||
|
||||
@@ -12,5 +12,19 @@
|
||||
"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.",
|
||||
"Sign In": "Đăng nhập",
|
||||
"Create Account": "Tạo tài khoản",
|
||||
"Explore rooms": "Khám phá phòng chat"
|
||||
"Explore rooms": "Khám phá phòng chat",
|
||||
"Download Completed": "Đã hoàn thành tải xuống",
|
||||
"Go to element.io": "Đi đến element.io",
|
||||
"I understand the risks and wish to continue": "Tôi hiểu các rủi ro và muốn tiếp tục",
|
||||
"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.": "Bạn có thể tiếp tục sử dụng trình duyệt hiện tại của bạn, nhưng một số tính năng có thể không hoạt động và trải nghiệm ứng dụng sẽ không được chính xác.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Vui lòng cài đặt <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, hoặc <safariLink>Safari</safariLink> để có trải nghiệm tốt nhất.",
|
||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s dùng tính năng cao cấp của trình duyệt không được hỗ trợ bởi trình duyệt của bạn.",
|
||||
"Your browser can't run %(brand)s": "Trình duyệt của bạn không thể chạy %(brand)s",
|
||||
"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",
|
||||
"%(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",
|
||||
"Open user settings": "Mở cài đặt người dùng",
|
||||
"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."
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"Welcome to Element": "欢迎来到 Element",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化、加密聊天&与协作,由 [matrix] 驱动",
|
||||
"Sign In": "登入",
|
||||
"Create Account": "创建帐号",
|
||||
"Create Account": "创建账户",
|
||||
"Explore rooms": "探索聊天室",
|
||||
"The message from the parser is: %(message)s": "语法分析器的信息:%(message)s",
|
||||
"Invalid JSON": "无效的 JSON",
|
||||
|
||||
@@ -23,7 +23,6 @@ import React from 'react';
|
||||
// this incidentally means we can forget our React imports in JSX files without penalty.
|
||||
window.React = React;
|
||||
|
||||
import url from 'url';
|
||||
import * as sdk from 'matrix-react-sdk';
|
||||
import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg';
|
||||
import {_td, newTranslatableError} from 'matrix-react-sdk/src/languageHandler';
|
||||
@@ -120,11 +119,12 @@ function onTokenLoginCompleted() {
|
||||
// if we did a token login, we're now left with the token, hs and is
|
||||
// url as query params in the url; a little nasty but let's redirect to
|
||||
// clear them.
|
||||
const parsedUrl = url.parse(window.location.href);
|
||||
parsedUrl.search = "";
|
||||
const formatted = url.format(parsedUrl);
|
||||
console.log(`Redirecting to ${formatted} to drop loginToken from queryparams`);
|
||||
window.location.href = formatted;
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
url.searchParams.delete("loginToken");
|
||||
|
||||
console.log(`Redirecting to ${url.href} to drop loginToken from queryparams`);
|
||||
window.history.replaceState(null, "", url.href);
|
||||
}
|
||||
|
||||
export async function loadApp(fragParams: {}) {
|
||||
@@ -236,7 +236,7 @@ async function verifyServerConfig() {
|
||||
|
||||
validatedConfig = AutoDiscoveryUtils.buildValidatedConfigFromDiscovery(serverName, discoveryResult, true);
|
||||
} catch (e) {
|
||||
const {hsUrl, isUrl, userId} = Lifecycle.getLocalStorageSessionVars();
|
||||
const {hsUrl, isUrl, userId} = await Lifecycle.getStoredSessionVars();
|
||||
if (hsUrl && userId) {
|
||||
console.error(e);
|
||||
console.warn("A session was found - suppressing config error and using the session's homeserver");
|
||||
|
||||
@@ -23,16 +23,12 @@ limitations under the License.
|
||||
// in webpack.config.js
|
||||
require('gfm.css/gfm.css');
|
||||
require('highlight.js/styles/github.css');
|
||||
require('katex/dist/katex.css');
|
||||
|
||||
// These are things that can run before the skin loads - be careful not to reference the react-sdk though.
|
||||
import {parseQsFromFragment} from "./url_utils";
|
||||
import './modernizr';
|
||||
|
||||
// load service worker if available on this platform
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.register('sw.js');
|
||||
}
|
||||
|
||||
async function settled(...promises: Array<Promise<any>>) {
|
||||
for (const prom of promises) {
|
||||
try {
|
||||
@@ -49,14 +45,20 @@ function checkBrowserFeatures() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// custom checks atop Modernizr because it doesn't have ES2018/ES2019 checks in it for some features we depend on,
|
||||
// Modernizr requires rules to be lowercase with no punctuation:
|
||||
// ES2018: http://www.ecma-international.org/ecma-262/9.0/#sec-promise.prototype.finally
|
||||
// Custom checks atop Modernizr because it doesn't have ES2018/ES2019 checks
|
||||
// in it for some features we depend on.
|
||||
// Modernizr requires rules to be lowercase with no punctuation.
|
||||
// ES2018: http://262.ecma-international.org/9.0/#sec-promise.prototype.finally
|
||||
window.Modernizr.addTest("promiseprototypefinally", () =>
|
||||
window.Promise && window.Promise.prototype && typeof window.Promise.prototype.finally === "function");
|
||||
// ES2019: http://www.ecma-international.org/ecma-262/10.0/#sec-object.fromentries
|
||||
typeof window.Promise?.prototype?.finally === "function");
|
||||
// ES2018: https://262.ecma-international.org/9.0/#sec-get-regexp.prototype.dotAll
|
||||
window.Modernizr.addTest("regexpdotall", () => (
|
||||
window.RegExp?.prototype &&
|
||||
!!Object.getOwnPropertyDescriptor(window.RegExp.prototype, "dotAll")?.get
|
||||
));
|
||||
// ES2019: http://262.ecma-international.org/10.0/#sec-object.fromentries
|
||||
window.Modernizr.addTest("objectfromentries", () =>
|
||||
window.Object && typeof window.Object.fromEntries === "function");
|
||||
typeof window.Object?.fromEntries === "function");
|
||||
|
||||
const featureList = Object.keys(window.Modernizr);
|
||||
|
||||
@@ -154,7 +156,7 @@ async function start() {
|
||||
// error handling begins here
|
||||
// ##########################
|
||||
if (!acceptBrowser) {
|
||||
await new Promise(resolve => {
|
||||
await new Promise<void>(resolve => {
|
||||
console.error("Browser is missing required features.");
|
||||
// take to a different landing page to AWOOOOOGA at the user
|
||||
showIncompatibleBrowser(() => {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2018, 2019, 2020 New Vector Ltd
|
||||
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
|
||||
Copyright 2018 - 2021 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -39,7 +39,7 @@ import { initRageshake } from "./rageshakesetup";
|
||||
export const rageshakePromise = initRageshake();
|
||||
|
||||
export function preparePlatform() {
|
||||
if (window.ipcRenderer) {
|
||||
if (window.electron) {
|
||||
console.log("Using Electron platform");
|
||||
PlatformPeg.set(new ElectronPlatform());
|
||||
} else if (window.matchMedia('(display-mode: standalone)').matches) {
|
||||
@@ -126,7 +126,7 @@ export async function loadSkin() {
|
||||
/* webpackPreload: true */
|
||||
"matrix-react-sdk"),
|
||||
import(
|
||||
/* webpackChunkName: "riot-web-component-index" */
|
||||
/* webpackChunkName: "element-web-component-index" */
|
||||
/* webpackPreload: true */
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore - this module is generated so may fail lint
|
||||
@@ -143,7 +143,7 @@ export async function loadTheme() {
|
||||
export async function loadApp(fragParams: {}) {
|
||||
// load app.js async so that its code is not executed immediately and we can catch any exceptions
|
||||
const module = await import(
|
||||
/* webpackChunkName: "riot-web-app" */
|
||||
/* webpackChunkName: "element-web-app" */
|
||||
/* webpackPreload: true */
|
||||
"./app");
|
||||
window.matrixChat = ReactDOM.render(await module.loadApp(fragParams),
|
||||
|
||||
105
src/vector/inline_widget_wrapper/WidgetApi.js
Normal file
105
src/vector/inline_widget_wrapper/WidgetApi.js
Normal file
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
Copyright 2019 New Vector Ltd.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import randomString from "random-string";
|
||||
|
||||
// Dev note: This is largely inspired by Dimension. Used with permission.
|
||||
// https://github.com/turt2live/matrix-dimension/blob/4f92d560266635e5a3c824606215b84e8c0b19f5/web/app/shared/services/scalar/scalar-widget.api.ts#L1
|
||||
export default class WidgetApi {
|
||||
|
||||
_origin;
|
||||
_widgetId;
|
||||
_capabilities;
|
||||
_inFlightRequests = {}; // { reqId => replyFn(payload) }
|
||||
|
||||
constructor(origin, widgetId, capabilities) {
|
||||
this._origin = new URL(origin).origin;
|
||||
this._widgetId = widgetId;
|
||||
this._capabilities = capabilities;
|
||||
|
||||
const toWidgetActions = {
|
||||
"capabilities": this._onCapabilitiesRequest.bind(this),
|
||||
};
|
||||
|
||||
window.addEventListener("message", event => {
|
||||
if (event.origin !== this._origin) return; // ignore due to invalid origin
|
||||
if (!event.data) return;
|
||||
if (event.data.widgetId !== this._widgetId) return;
|
||||
|
||||
const payload = event.data;
|
||||
if (payload.api === "toWidget" && payload.action) {
|
||||
console.log("[Inline Widget] Got toWidget: " + JSON.stringify(payload));
|
||||
const handler = toWidgetActions[payload.action];
|
||||
if (handler) handler(payload);
|
||||
}
|
||||
if (payload.api === "fromWidget" && this._inFlightRequests[payload.requestId]) {
|
||||
console.log("[Inline Widget] Got fromWidget reply: " + JSON.stringify(payload));
|
||||
const handler = this._inFlightRequests[payload.requestId];
|
||||
delete this._inFlightRequests[payload.requestId];
|
||||
handler(payload);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
sendText(text) {
|
||||
this.sendEvent("m.room.message", {msgtype: "m.text", body: text});
|
||||
}
|
||||
|
||||
sendNotice(text) {
|
||||
this.sendEvent("m.room.message", {msgtype: "m.notice", body: text});
|
||||
}
|
||||
|
||||
sendEvent(eventType, content) {
|
||||
this._callAction("send_event", {
|
||||
type: eventType,
|
||||
content: content,
|
||||
});
|
||||
}
|
||||
|
||||
_callAction(action, payload) {
|
||||
if (!window.parent) {
|
||||
return;
|
||||
}
|
||||
|
||||
const request = {
|
||||
api: "fromWidget",
|
||||
widgetId: this._widgetId,
|
||||
action: action,
|
||||
requestId: randomString({length: 16}),
|
||||
data: payload,
|
||||
};
|
||||
|
||||
this._inFlightRequests[request.requestId] = () => {};
|
||||
|
||||
console.log("[Inline Widget] Sending fromWidget: ", request);
|
||||
window.parent.postMessage(request, this._origin);
|
||||
}
|
||||
|
||||
_replyPayload(incPayload, payload) {
|
||||
if (!window.parent) {
|
||||
return;
|
||||
}
|
||||
|
||||
let request = JSON.parse(JSON.stringify(incPayload));
|
||||
request["response"] = payload;
|
||||
|
||||
window.parent.postMessage(request, this._origin);
|
||||
}
|
||||
|
||||
_onCapabilitiesRequest(payload) {
|
||||
this._replyPayload(payload, {capabilities: this._capabilities});
|
||||
}
|
||||
}
|
||||
5
src/vector/inline_widget_wrapper/index.html
Normal file
5
src/vector/inline_widget_wrapper/index.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<body>
|
||||
<div id="widgetHtml"></div>
|
||||
</body>
|
||||
|
||||
71
src/vector/inline_widget_wrapper/index.js
Normal file
71
src/vector/inline_widget_wrapper/index.js
Normal file
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
Copyright 2019 New Vector Ltd.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
import queryString from "querystring";
|
||||
import WidgetApi from "./WidgetApi";
|
||||
|
||||
let widgetApi;
|
||||
try {
|
||||
const qs = queryString.parse(window.location.search.substring(1));
|
||||
if (!qs["widgetId"]) {
|
||||
// noinspection ExceptionCaughtLocallyJS
|
||||
throw new Error("Missing widgetId in query string");
|
||||
}
|
||||
if (!qs["parentUrl"]) {
|
||||
// noinspection ExceptionCaughtLocallyJS
|
||||
throw new Error("Missing parentUrl in query string");
|
||||
}
|
||||
|
||||
const widgetOpts = JSON.parse(atob(window.location.hash
|
||||
.substring(1)
|
||||
.replace(/-/g, '+')
|
||||
.replace(/_/g, '/')));
|
||||
|
||||
// This widget wrapper is always on the same origin as the client itself
|
||||
widgetApi = new WidgetApi(qs["parentUrl"], qs["widgetId"], widgetOpts["capabilities"]);
|
||||
|
||||
document.getElementById("widgetHtml").innerHTML = widgetOpts['html'];
|
||||
bindButtons();
|
||||
} catch (e) {
|
||||
console.error("[Inline Widget Wrapper] Error loading widget from URL: ", e);
|
||||
document.getElementById("widgetHtml").innerText = "Failed to load widget";
|
||||
}
|
||||
|
||||
function bindButtons() {
|
||||
const buttons = document.getElementsByTagName("button");
|
||||
if (!buttons) return;
|
||||
for (const button of buttons) {
|
||||
button.addEventListener("click", onClick);
|
||||
}
|
||||
}
|
||||
|
||||
function onClick(event) {
|
||||
if (!event.target) return;
|
||||
|
||||
const action = event.target.getAttribute("data-mx-action");
|
||||
if (!action) return; // TODO: Submit form or something?
|
||||
|
||||
const value = event.target.getAttribute("data-mx-value");
|
||||
if (!value) return; // ignore - no value
|
||||
|
||||
if (action === "m.send_text") {
|
||||
widgetApi.sendText(value);
|
||||
} else if (action === "m.send_notice") {
|
||||
widgetApi.sendNotice(value);
|
||||
} else if (action === "m.send_hidden") {
|
||||
widgetApi.sendEvent("m.room.hidden", {body: value});
|
||||
} // else ignore
|
||||
}
|
||||
// TODO: Binding of forms, etc
|
||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
// TODO: Match the user's theme: https://github.com/vector-im/riot-web/issues/12794
|
||||
// TODO: Match the user's theme: https://github.com/vector-im/element-web/issues/12794
|
||||
|
||||
@font-face {
|
||||
font-family: 'Nunito';
|
||||
|
||||
@@ -45,6 +45,7 @@ let userId: string;
|
||||
let jitsiAuth: string;
|
||||
let roomId: string;
|
||||
let openIdToken: IOpenIDCredentials;
|
||||
let roomName: string;
|
||||
|
||||
let widgetApi: WidgetApi;
|
||||
let meetApi: any; // JitsiMeetExternalAPI
|
||||
@@ -104,6 +105,7 @@ let meetApi: any; // JitsiMeetExternalAPI
|
||||
userId = qsParam('userId');
|
||||
jitsiAuth = qsParam('auth', true);
|
||||
roomId = qsParam('roomId', true);
|
||||
roomName = qsParam('roomName', true);
|
||||
|
||||
if (widgetApi) {
|
||||
await readyPromise;
|
||||
@@ -116,7 +118,7 @@ let meetApi: any; // JitsiMeetExternalAPI
|
||||
console.log("Got OpenID Connect token");
|
||||
}
|
||||
|
||||
// TODO: register widgetApi listeners for PTT controls (https://github.com/vector-im/riot-web/issues/12795)
|
||||
// TODO: register widgetApi listeners for PTT controls (https://github.com/vector-im/element-web/issues/12795)
|
||||
|
||||
widgetApi.on(`action:${ElementWidgetActions.HangupCall}`,
|
||||
(ev: CustomEvent<IWidgetApiRequest>) => {
|
||||
@@ -124,6 +126,22 @@ let meetApi: any; // JitsiMeetExternalAPI
|
||||
widgetApi.transport.reply(ev.detail, {}); // ack
|
||||
},
|
||||
);
|
||||
widgetApi.on(`action:${ElementWidgetActions.StartLiveStream}`,
|
||||
(ev: CustomEvent<IWidgetApiRequest>) => {
|
||||
if (meetApi) {
|
||||
meetApi.executeCommand('startRecording', {
|
||||
mode: 'stream',
|
||||
// this looks like it should be rtmpStreamKey but we may be on too old
|
||||
// a version of jitsi meet
|
||||
//rtmpStreamKey: ev.detail.data.rtmpStreamKey,
|
||||
youtubeStreamKey: ev.detail.data.rtmpStreamKey,
|
||||
});
|
||||
widgetApi.transport.reply(ev.detail, {}); // ack
|
||||
} else {
|
||||
widgetApi.transport.reply(ev.detail, {error: {message: "Conference not joined"}});
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
enableJoinButton(); // always enable the button
|
||||
@@ -164,6 +182,7 @@ function createJWTToken() {
|
||||
matrix: {
|
||||
token: openIdToken.access_token,
|
||||
room_id: roomId,
|
||||
server_name: openIdToken.matrix_server_name,
|
||||
},
|
||||
user: {
|
||||
avatar: avatarUrl,
|
||||
@@ -225,6 +244,7 @@ function joinConference() { // event handler bound in HTML
|
||||
if (displayName) meetApi.executeCommand("displayName", displayName);
|
||||
if (avatarUrl) meetApi.executeCommand("avatarUrl", avatarUrl);
|
||||
if (userId) meetApi.executeCommand("email", userId);
|
||||
if (roomName) meetApi.executeCommand("subject", roomName);
|
||||
|
||||
meetApi.on("readyToClose", () => {
|
||||
switchVisibleContainers();
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
/*
|
||||
Copyright 2016 Aviral Dasgupta
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
Copyright 2018 New Vector Ltd
|
||||
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
|
||||
Copyright 2020 The Matrix.org Foundation C.I.C.
|
||||
Copyright 2018 - 2021 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -49,7 +48,7 @@ import {CheckUpdatesPayload} from "matrix-react-sdk/src/dispatcher/payloads/Chec
|
||||
import ToastStore from "matrix-react-sdk/src/stores/ToastStore";
|
||||
import GenericExpiringToast from "matrix-react-sdk/src/components/views/toasts/GenericExpiringToast";
|
||||
|
||||
const ipcRenderer = window.ipcRenderer;
|
||||
const electron = window.electron;
|
||||
const isMac = navigator.platform.toUpperCase().includes('MAC');
|
||||
|
||||
function platformFriendlyName(): string {
|
||||
@@ -74,7 +73,7 @@ function platformFriendlyName(): string {
|
||||
function _onAction(payload: ActionPayload) {
|
||||
// Whitelist payload actions, no point sending most across
|
||||
if (['call_state'].includes(payload.action)) {
|
||||
ipcRenderer.send('app_onAction', payload);
|
||||
electron.send('app_onAction', payload);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,7 +103,7 @@ class SeshatIndexManager extends BaseEventIndexManager {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
ipcRenderer.on('seshatReply', this._onIpcReply);
|
||||
electron.on('seshatReply', this._onIpcReply);
|
||||
}
|
||||
|
||||
async _ipcCall(name: string, ...args: any[]): Promise<any> {
|
||||
@@ -112,7 +111,7 @@ class SeshatIndexManager extends BaseEventIndexManager {
|
||||
const ipcCallId = ++this.nextIpcCallId;
|
||||
return new Promise((resolve, reject) => {
|
||||
this.pendingIpcCalls[ipcCallId] = {resolve, reject};
|
||||
window.ipcRenderer.send('seshat', {id: ipcCallId, name, args});
|
||||
window.electron.send('seshat', {id: ipcCallId, name, args});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -230,7 +229,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
false if there is not
|
||||
or the error if one is encountered
|
||||
*/
|
||||
ipcRenderer.on('check_updates', (event, status) => {
|
||||
electron.on('check_updates', (event, status) => {
|
||||
dis.dispatch<CheckUpdatesPayload>({
|
||||
action: Action.CheckUpdates,
|
||||
...getUpdateCheckStatus(status),
|
||||
@@ -238,21 +237,21 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
});
|
||||
|
||||
// try to flush the rageshake logs to indexeddb before quit.
|
||||
ipcRenderer.on('before-quit', function() {
|
||||
console.log('riot-desktop closing');
|
||||
electron.on('before-quit', function() {
|
||||
console.log('element-desktop closing');
|
||||
rageshake.flush();
|
||||
});
|
||||
|
||||
ipcRenderer.on('ipcReply', this._onIpcReply);
|
||||
ipcRenderer.on('update-downloaded', this.onUpdateDownloaded);
|
||||
electron.on('ipcReply', this._onIpcReply);
|
||||
electron.on('update-downloaded', this.onUpdateDownloaded);
|
||||
|
||||
ipcRenderer.on('preferences', () => {
|
||||
electron.on('preferences', () => {
|
||||
dis.fire(Action.ViewUserSettings);
|
||||
});
|
||||
|
||||
ipcRenderer.on('userDownloadCompleted', (ev, {path, name}) => {
|
||||
electron.on('userDownloadCompleted', (ev, {path, name}) => {
|
||||
const onAccept = () => {
|
||||
ipcRenderer.send('userDownloadOpen', {path});
|
||||
electron.send('userDownloadOpen', {path});
|
||||
};
|
||||
|
||||
ToastStore.sharedInstance().addOrReplaceToast({
|
||||
@@ -324,11 +323,21 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
return 'Electron Platform'; // no translation required: only used for analytics
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if platform supports multi-language
|
||||
* spell-checking, otherwise false.
|
||||
*/
|
||||
supportsMultiLanguageSpellCheck(): boolean {
|
||||
// Electron uses OS spell checking on macOS, so no need for in-app options
|
||||
if (isMac) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
setNotificationCount(count: number) {
|
||||
if (this.notificationCount === count) return;
|
||||
super.setNotificationCount(count);
|
||||
|
||||
ipcRenderer.send('setBadgeCount', count);
|
||||
electron.send('setBadgeCount', count);
|
||||
}
|
||||
|
||||
supportsNotifications(): boolean {
|
||||
@@ -371,7 +380,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
}
|
||||
|
||||
loudNotification(ev: Event, room: Object) {
|
||||
ipcRenderer.send('loudNotification');
|
||||
electron.send('loudNotification');
|
||||
}
|
||||
|
||||
async getAppVersion(): Promise<string> {
|
||||
@@ -423,14 +432,14 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
|
||||
startUpdateCheck() {
|
||||
super.startUpdateCheck();
|
||||
ipcRenderer.send('check_updates');
|
||||
electron.send('check_updates');
|
||||
}
|
||||
|
||||
installUpdate() {
|
||||
// IPC to the main process to install the update, since quitAndInstall
|
||||
// doesn't fire the before-quit event so the main process needs to know
|
||||
// it should exit.
|
||||
ipcRenderer.send('install_update');
|
||||
electron.send('install_update');
|
||||
}
|
||||
|
||||
getDefaultDeviceDisplayName(): string {
|
||||
@@ -460,7 +469,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
const ipcCallId = ++this.nextIpcCallId;
|
||||
return new Promise((resolve, reject) => {
|
||||
this.pendingIpcCalls[ipcCallId] = {resolve, reject};
|
||||
window.ipcRenderer.send('ipcCall', {id: ipcCallId, name, args});
|
||||
window.electron.send('ipcCall', {id: ipcCallId, name, args});
|
||||
// Maybe add a timeout to these? Probably not necessary.
|
||||
});
|
||||
}
|
||||
@@ -489,13 +498,21 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
return this.eventIndexManager;
|
||||
}
|
||||
|
||||
setLanguage(preferredLangs: string[]) {
|
||||
this._ipcCall('setLanguage', preferredLangs).catch(error => {
|
||||
console.log("Failed to send setLanguage IPC to Electron");
|
||||
setSpellCheckLanguages(preferredLangs: string[]) {
|
||||
this._ipcCall('setSpellCheckLanguages', preferredLangs).catch(error => {
|
||||
console.log("Failed to send setSpellCheckLanguages IPC to Electron");
|
||||
console.error(error);
|
||||
});
|
||||
}
|
||||
|
||||
async getSpellCheckLanguages(): Promise<string[]> {
|
||||
return this._ipcCall('getSpellCheckLanguages');
|
||||
}
|
||||
|
||||
async getAvailableSpellCheckLanguages(): Promise<string[]> {
|
||||
return this._ipcCall('getAvailableSpellCheckLanguages');
|
||||
}
|
||||
|
||||
getSSOCallbackUrl(fragmentAfterLogin: string): URL {
|
||||
const url = super.getSSOCallbackUrl(fragmentAfterLogin);
|
||||
url.protocol = "element";
|
||||
@@ -503,9 +520,9 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
return url;
|
||||
}
|
||||
|
||||
startSingleSignOn(mxClient: MatrixClient, loginType: "sso" | "cas", fragmentAfterLogin: string) {
|
||||
startSingleSignOn(mxClient: MatrixClient, loginType: "sso" | "cas", fragmentAfterLogin: string, idpId?: string) {
|
||||
// this will get intercepted by electron-main will-navigate
|
||||
super.startSingleSignOn(mxClient, loginType, fragmentAfterLogin);
|
||||
super.startSingleSignOn(mxClient, loginType, fragmentAfterLogin, idpId);
|
||||
Modal.createTrackedDialog('Electron', 'SSO', InfoDialog, {
|
||||
title: _t("Go to your browser to complete Sign In"),
|
||||
description: <Spinner />,
|
||||
|
||||
@@ -40,7 +40,7 @@ export default abstract class VectorBasePlatform extends BasePlatform {
|
||||
/**
|
||||
* Delay creating the `Favicon` instance until first use (on the first notification) as
|
||||
* it uses canvas, which can trigger a permission prompt in Firefox's resist fingerprinting mode.
|
||||
* See https://github.com/vector-im/riot-web/issues/9605.
|
||||
* See https://github.com/vector-im/element-web/issues/9605.
|
||||
*/
|
||||
get favicon() {
|
||||
if (this._favicon) {
|
||||
|
||||
@@ -26,7 +26,6 @@ import {hideToast as hideUpdateToast, showToast as showUpdateToast} from "matrix
|
||||
import {Action} from "matrix-react-sdk/src/dispatcher/actions";
|
||||
import { CheckUpdatesPayload } from 'matrix-react-sdk/src/dispatcher/payloads/CheckUpdatesPayload';
|
||||
|
||||
import url from 'url';
|
||||
import UAParser from 'ua-parser-js';
|
||||
|
||||
const POKE_RATE_MS = 10 * 60 * 1000; // 10 min
|
||||
@@ -34,6 +33,14 @@ const POKE_RATE_MS = 10 * 60 * 1000; // 10 min
|
||||
export default class WebPlatform extends VectorBasePlatform {
|
||||
private runningVersion: string = null;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
// Register service worker if available on this platform
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.register('sw.js');
|
||||
}
|
||||
}
|
||||
|
||||
getHumanReadableName(): string {
|
||||
return 'Web Platform'; // no translation required: only used for analytics
|
||||
}
|
||||
@@ -89,6 +96,8 @@ export default class WebPlatform extends VectorBasePlatform {
|
||||
window.focus();
|
||||
notification.close();
|
||||
};
|
||||
|
||||
return notification;
|
||||
}
|
||||
|
||||
_getVersion(): Promise<string> {
|
||||
@@ -174,17 +183,13 @@ export default class WebPlatform extends VectorBasePlatform {
|
||||
|
||||
getDefaultDeviceDisplayName(): string {
|
||||
// strip query-string and fragment from uri
|
||||
const u = url.parse(window.location.href);
|
||||
u.protocol = "";
|
||||
u.search = "";
|
||||
u.hash = "";
|
||||
// Remove trailing slash if present
|
||||
u.pathname = u.pathname.replace(/\/$/, "");
|
||||
const url = new URL(window.location.href);
|
||||
|
||||
let appName = u.format();
|
||||
// Remove leading slashes if present
|
||||
appName = appName.replace(/^\/\//, "");
|
||||
// `appName` is now in the format `develop.element.io`.
|
||||
// `appName` in the format `develop.element.io/abc/xyz`
|
||||
const appName = [
|
||||
url.host,
|
||||
url.pathname.replace(/\/$/, ""), // Remove trailing slash if present
|
||||
].join("");
|
||||
|
||||
const ua = new UAParser();
|
||||
const browserName = ua.getBrowser().name || "unknown browser";
|
||||
|
||||
@@ -38,7 +38,7 @@ export function initRageshake() {
|
||||
"Meatball menu → Settings → Blackboxing → Add /rageshake\\.js$");
|
||||
|
||||
window.addEventListener('beforeunload', (e) => {
|
||||
console.log('riot-web closing');
|
||||
console.log('element-web closing');
|
||||
// try to flush the logs to indexeddb
|
||||
rageshake.flush();
|
||||
});
|
||||
|
||||
@@ -8,6 +8,10 @@ const webpack = require("webpack");
|
||||
let og_image_url = process.env.RIOT_OG_IMAGE_URL;
|
||||
if (!og_image_url) og_image_url = 'https://app.element.io/themes/element/img/logos/opengraph.png';
|
||||
|
||||
const additionalPlugins = [
|
||||
// This is where you can put your customisation replacements.
|
||||
];
|
||||
|
||||
module.exports = (env, argv) => {
|
||||
if (process.env.CI_PACKAGE) {
|
||||
// Don't run minification for CI builds (this is only set for runs on develop)
|
||||
@@ -40,6 +44,7 @@ module.exports = (env, argv) => {
|
||||
"mobileguide": "./src/vector/mobile_guide/index.js",
|
||||
"jitsi": "./src/vector/jitsi/index.ts",
|
||||
"usercontent": "./node_modules/matrix-react-sdk/src/usercontent/index.js",
|
||||
"inline-widget-wrapper": "./src/vector/inline_widget_wrapper/index.js",
|
||||
|
||||
// CSS themes
|
||||
"theme-legacy": "./node_modules/matrix-react-sdk/res/themes/legacy-light/css/legacy-light.scss",
|
||||
@@ -227,6 +232,7 @@ module.exports = (env, argv) => {
|
||||
require("postcss-easings")(),
|
||||
require("postcss-strip-inline-comments")(),
|
||||
require("postcss-hexrgba")(),
|
||||
require("postcss-calc")({warnWhenCannotResolve: true}),
|
||||
|
||||
// It's important that this plugin is last otherwise we end
|
||||
// up with broken CSS.
|
||||
@@ -249,7 +255,7 @@ module.exports = (env, argv) => {
|
||||
},
|
||||
{
|
||||
// cache-bust languages.json file placed in
|
||||
// riot-web/webapp/i18n during build by copy-res.js
|
||||
// element-web/webapp/i18n during build by copy-res.js
|
||||
test: /\.*languages.json$/,
|
||||
type: "javascript/auto",
|
||||
loader: 'file-loader',
|
||||
@@ -269,12 +275,12 @@ module.exports = (env, argv) => {
|
||||
options: {
|
||||
esModule: false,
|
||||
name: '[name].[hash:7].[ext]',
|
||||
outputPath: getImgOutputPath,
|
||||
outputPath: getAssetOutputPath,
|
||||
publicPath: function(url, resourcePath) {
|
||||
// CSS image usages end up in the `bundles/[hash]` output
|
||||
// directory, so we adjust the final path to navigate up
|
||||
// twice.
|
||||
const outputPath = getImgOutputPath(url, resourcePath);
|
||||
const outputPath = getAssetOutputPath(url, resourcePath);
|
||||
return toPublicPath(path.join("../..", outputPath));
|
||||
},
|
||||
},
|
||||
@@ -285,9 +291,9 @@ module.exports = (env, argv) => {
|
||||
options: {
|
||||
esModule: false,
|
||||
name: '[name].[hash:7].[ext]',
|
||||
outputPath: getImgOutputPath,
|
||||
outputPath: getAssetOutputPath,
|
||||
publicPath: function(url, resourcePath) {
|
||||
const outputPath = getImgOutputPath(url, resourcePath);
|
||||
const outputPath = getAssetOutputPath(url, resourcePath);
|
||||
return toPublicPath(outputPath);
|
||||
},
|
||||
},
|
||||
@@ -312,7 +318,7 @@ module.exports = (env, argv) => {
|
||||
// HtmlWebpackPlugin will screw up our formatting like the names
|
||||
// of the themes and which chunks we actually care about.
|
||||
inject: false,
|
||||
excludeChunks: ['mobileguide', 'usercontent', 'jitsi'],
|
||||
excludeChunks: ['mobileguide', 'usercontent', 'inline-widget-wrapper', 'jitsi'],
|
||||
minify: argv.mode === 'production',
|
||||
vars: {
|
||||
og_image_url: og_image_url,
|
||||
@@ -349,6 +355,13 @@ module.exports = (env, argv) => {
|
||||
chunks: [],
|
||||
}),
|
||||
|
||||
// This is an inline widget wrapper, similar to usercontent
|
||||
new HtmlWebpackPlugin({
|
||||
template: './src/vector/inline_widget_wrapper/index.html',
|
||||
filename: 'inline_widget_wrapper/index.html',
|
||||
chunks: ['inline-widget-wrapper'],
|
||||
}),
|
||||
|
||||
// This is the usercontent sandbox's entry point (separate for iframing)
|
||||
new HtmlWebpackPlugin({
|
||||
template: './node_modules/matrix-react-sdk/src/usercontent/index.html',
|
||||
@@ -356,6 +369,8 @@ module.exports = (env, argv) => {
|
||||
minify: argv.mode === 'production',
|
||||
chunks: ['usercontent'],
|
||||
}),
|
||||
|
||||
...additionalPlugins,
|
||||
],
|
||||
|
||||
output: {
|
||||
@@ -392,15 +407,25 @@ module.exports = (env, argv) => {
|
||||
|
||||
/**
|
||||
* Merge assets found via CSS and imports into a single tree, while also preserving
|
||||
* directories under `res`.
|
||||
* directories under e.g. `res` or similar.
|
||||
*
|
||||
* @param {string} url The adjusted name of the file, such as `warning.1234567.svg`.
|
||||
* @param {string} resourcePath The absolute path to the source file with unmodified name.
|
||||
* @return {string} The returned paths will look like `img/warning.1234567.svg`.
|
||||
*/
|
||||
function getImgOutputPath(url, resourcePath) {
|
||||
const prefix = /^.*[/\\]res[/\\]/;
|
||||
const outputDir = path.dirname(resourcePath).replace(prefix, "");
|
||||
function getAssetOutputPath(url, resourcePath) {
|
||||
// `res` is the parent dir for our own assets in various layers
|
||||
// `dist` is the parent dir for KaTeX assets
|
||||
const prefix = /^.*[/\\](dist|res)[/\\]/;
|
||||
if (!resourcePath.match(prefix)) {
|
||||
throw new Error(`Unexpected asset path: ${resourcePath}`);
|
||||
}
|
||||
let outputDir = path.dirname(resourcePath).replace(prefix, "");
|
||||
if (resourcePath.includes("KaTeX")) {
|
||||
// Add a clearly named directory segment, rather than leaving the KaTeX
|
||||
// assets loose in each asset type directory.
|
||||
outputDir = path.join(outputDir, "KaTeX");
|
||||
}
|
||||
return path.join(outputDir, path.basename(url));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user