Compare commits

..

267 Commits

Author SHA1 Message Date
RiotRobot
fd9016b5f1 v1.10.2 2022-02-14 15:47:15 +00:00
RiotRobot
f41f03a5b2 Prepare changelog for v1.10.2 2022-02-14 15:47:15 +00:00
RiotRobot
b723889dc2 Upgrade matrix-react-sdk to 3.40.0 2022-02-14 15:44:14 +00:00
RiotRobot
dd8855cffc Upgrade matrix-js-sdk to 15.5.1 2022-02-14 15:43:19 +00:00
RiotRobot
c4b75669ed v1.10.2-rc.2 2022-02-09 10:37:16 +00:00
RiotRobot
954cb35903 Prepare changelog for v1.10.2-rc.2 2022-02-09 10:37:15 +00:00
RiotRobot
74f117f7e6 Upgrade matrix-react-sdk to 3.40.0-rc.2 2022-02-09 10:32:51 +00:00
RiotRobot
37c81f39f6 v1.10.2-rc.1 2022-02-08 15:51:57 +00:00
RiotRobot
b5735578b8 Prepare changelog for v1.10.2-rc.1 2022-02-08 15:51:56 +00:00
RiotRobot
041447e57d Upgrade matrix-react-sdk to 3.40.0-rc.1 2022-02-08 15:49:29 +00:00
RiotRobot
35a434df40 Upgrade matrix-js-sdk to 15.5.1-rc.1 2022-02-08 15:46:47 +00:00
Element Translate Bot
74e0510dc3 Translations update from Weblate (#20980)
* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Vietnamese)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/vi/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/tr/

* Translated using Weblate (Frisian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/fy/

* Translated using Weblate (Polish)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/pl/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nl/

* Translated using Weblate (Slovak)

Currently translated at 97.0% (33 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sk/

* Translated using Weblate (Hebrew)

Currently translated at 97.0% (33 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Hebrew)

Currently translated at 97.0% (33 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Hebrew)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nl/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sk/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Added translation using Weblate (Uzbek)

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/uk/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sk/

* Translated using Weblate (Norwegian Nynorsk)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nn/

* Translated using Weblate (Norwegian Nynorsk)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nn/

* Translated using Weblate (Greek)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/el/

* Translated using Weblate (Vietnamese)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/vi/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nl/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nl/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/uk/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Italian)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/it/

* Translated using Weblate (Czech)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/cs/

* Translated using Weblate (Albanian)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sq/

* Translated using Weblate (Polish)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/pl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/pl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/pl/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/hu/

* Translated using Weblate (Polish)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/pl/

* Translated using Weblate (Swedish)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sv/

* Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/zh_Hant/

* Translated using Weblate (Estonian)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/et/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/pt_BR/

* Translated using Weblate (Danish)

Currently translated at 94.2% (33 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/da/

* Translated using Weblate (Danish)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/da/

* Translated using Weblate (German)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/de/

* Translated using Weblate (German)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/de/

* Translated using Weblate (French)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/fr/

* Translated using Weblate (Portuguese)

Currently translated at 88.5% (31 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/pt/

* Translated using Weblate (Portuguese)

Currently translated at 88.5% (31 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/pt/

* Translated using Weblate (Hebrew)

Currently translated at 94.2% (33 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sk/

* Translated using Weblate (Finnish)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/fi/

* Translated using Weblate (Turkish)

Currently translated at 97.1% (34 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/tr/

* Translated using Weblate (Galician)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/gl/

* Added translation using Weblate (Sorani)

* Translated using Weblate (Russian)

Currently translated at 100.0% (35 of 35 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/ru/

Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Weblate <translate@riot.im>
Co-authored-by: Dinh Quang Tuyen <tuyen.dinh@aarenet.com>
Co-authored-by: Ege <alikemal@riseup.net>
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
Co-authored-by: Adrian Środoń <adrian.srodon@gmail.com>
Co-authored-by: jelv <post@jelv.nl>
Co-authored-by: Marek Ľach <graweeld@googlemail.com>
Co-authored-by: a5r0n <h98aaron@gmail.com>
Co-authored-by: Vulcan <element@zbug.anonaddy.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Yorqinbek <yyoriqulov@mail.ru>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Bjørn I.Svindseth <bjorni.svindseth@yahoo.com>
Co-authored-by: pkst-ellak <pkst@eellak.gr>
Co-authored-by: Bui Minh Duc <m.nhduc.bui1@gmail.com>
Co-authored-by: Johan Smits <johan@smitsmail.net>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Besnik Bleta <besnik@programeshqip.org>
Co-authored-by: Hexandcube <hexandcube@hexandcube.tk>
Co-authored-by: Skibbi <skibbi@gmail.com>
Co-authored-by: Norbert <norbertrom01@gmail.com>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: TR_SLimey <tr_slimey@protonmail.com>
Co-authored-by: LinAGKar <linus.kardell@gmail.com>
Co-authored-by: Jeff Huang <s8321414@gmail.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Alfred Makne Poulsen <Alfredmakne@gmail.com>
Co-authored-by: libexus <libexus@gmail.com>
Co-authored-by: Paragoumba <paragoumba@gmail.com>
Co-authored-by: Helder Ferreira <woounn@gmail.com>
Co-authored-by: Eduardo Ervideira <ejcept@gmail.com>
Co-authored-by: SPiRiT <such.a.lost.spirit@gmail.com>
Co-authored-by: Shi-nobi <mika.lehtonen@mttl.xyz>
Co-authored-by: Mahmut Tuncer <asimbesir4242+elementtranslations@gmail.com>
Co-authored-by: Xose M <xosem@disroot.org>
Co-authored-by: ENIGMA <N0NVAL@protonmail.com>
Co-authored-by: Nikita Epifanov <NikGreens@protonmail.com>
2022-02-08 14:52:43 +00:00
Michael Telatynski
55b383f78a Enable new search experience by default on Develop & Nightly (#20895) 2022-02-08 14:03:04 +00:00
Faye Duxovni
64242a004e Document uisi_autorageshake_app config option (#20845) 2022-02-03 10:50:18 -05:00
Robin
ba20134d1f Update labs issue labels (#20883) 2022-02-03 08:33:11 +00:00
Andy Balaam
6bc7036dc8 Remove the Location Sharing labs feature (#20863) 2022-02-02 11:51:32 +00:00
RiotRobot
0041ad7230 Merge branch 'master' into develop 2022-02-01 16:05:19 +00:00
RiotRobot
e70c52eaec v1.10.1 2022-02-01 15:59:50 +00:00
RiotRobot
53a937eb6c Prepare changelog for v1.10.1 2022-02-01 15:59:49 +00:00
RiotRobot
b41c899a91 Upgrade matrix-react-sdk to 3.39.1 2022-02-01 15:56:35 +00:00
Eric Eastwood
d731a25619 Document jump to date labs feature (MSC3030) (#20825)
Feature added in:

 - https://github.com/matrix-org/matrix-react-sdk/pull/7339
 - https://github.com/matrix-org/matrix-react-sdk/pull/7372
 - MSC3030: https://github.com/matrix-org/matrix-doc/pull/303
2022-01-31 17:32:44 -06:00
David Baker
60e23d9383 Yarn upgrade (#20819) 2022-01-31 16:58:30 +00:00
RiotRobot
e6488e7e16 Reset matrix-react-sdk back to develop branch 2022-01-31 15:08:16 +00:00
RiotRobot
22ace3c597 Reset matrix-js-sdk back to develop branch 2022-01-31 15:08:03 +00:00
RiotRobot
d98ff93872 Merge branch 'master' into develop 2022-01-31 15:07:49 +00:00
RiotRobot
6113812307 v1.10.0 2022-01-31 15:03:52 +00:00
RiotRobot
d72d1ba2c5 Prepare changelog for v1.10.0 2022-01-31 15:03:51 +00:00
RiotRobot
84b47f20b9 Upgrade matrix-react-sdk to 3.39.0 2022-01-31 15:02:10 +00:00
RiotRobot
147b2ab377 Upgrade matrix-js-sdk to 15.5.0 2022-01-31 15:00:11 +00:00
Michael Kaye
58eec3db2c Serve "Cache-Control: no-cache" for non-bundled files. (#20489)
Most of the application is built into bundles with unique prefixes and
can be ignored, but these files should be checked each load.
2022-01-31 14:18:45 +00:00
Travis Ralston
7078373fbb Support a config option to change the default device name (#20790) 2022-01-28 08:52:43 -07:00
Andy Balaam
cfa97212f7 Document use of .well-known for tile server and jitsi (#20734) 2022-01-27 09:44:59 +00:00
RiotRobot
e1e6a2a7a6 v1.9.10-rc.2 2022-01-26 18:19:20 +00:00
RiotRobot
df1db45a39 Prepare changelog for v1.9.10-rc.2 2022-01-26 18:19:19 +00:00
RiotRobot
031f517073 Upgrade matrix-react-sdk to 3.39.0-rc.2 2022-01-26 18:11:34 +00:00
RiotRobot
3644ad1324 v1.9.10-rc.1 2022-01-26 17:14:26 +00:00
RiotRobot
ab94531776 Prepare changelog for v1.9.10-rc.1 2022-01-26 17:14:26 +00:00
RiotRobot
e4ae926f6e Upgrade matrix-react-sdk to 3.39.0-rc.1 2022-01-26 17:09:48 +00:00
RiotRobot
286c770d7c Upgrade matrix-js-sdk to 15.5.0-rc.1 2022-01-26 17:08:46 +00:00
Kat Gerasimova
c6c1238cef Update new issue page on GitHub (#20736)
Move security vulnerability link into the config
Add questions/support link
Remove link to open a blank issue
2022-01-25 17:16:27 +00:00
Faye Duxovni
e0c11e1dff Set app name for UISI autorageshakes in sample config and element.io configs (#20740) 2022-01-25 11:53:42 -05:00
David Baker
433542010b Update jitsi doc to specify minimum version (#20737)
and also rephrase a bit I was failing to understand
2022-01-25 14:42:02 +00:00
Michael Telatynski
397e2b53d1 De-labs Metaspaces (#20706) 2022-01-25 12:42:09 +00:00
Kat Gerasimova
c6c0da5b97 Fix validation error in issue templates (#20735) 2022-01-25 12:13:01 +00:00
Benoit Marty
db1cfa9588 Add case for local or non public homeserver. (#20730)
* Add case for local or non public homeserver.

Co-authored-by: Kat Gerasimova <ekaterinag@element.io>
2022-01-25 10:26:45 +00:00
Kat Gerasimova
ab31ea3719 Fix validation error in issue template (#20732) 2022-01-25 10:22:50 +00:00
Benoit Marty
956f0a4ca6 Add case for local or non public homeserver. (#20731)
See vector-im/element-android#4963
2022-01-25 10:15:42 +00:00
Michael Telatynski
e0353b217c De-labs Message Bubbles layout (#20705) 2022-01-25 10:12:02 +00:00
dependabot[bot]
c778aa8244 Bump node-fetch from 2.6.6 to 2.6.7 (#20726)
Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 2.6.6 to 2.6.7.
- [Release notes](https://github.com/node-fetch/node-fetch/releases)
- [Commits](https://github.com/node-fetch/node-fetch/compare/v2.6.6...v2.6.7)

---
updated-dependencies:
- dependency-name: node-fetch
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-24 21:51:33 +00:00
J. Ryan Stinnett
6adaa417f0 Add labs docs for right panel default open (#20722) 2022-01-24 17:53:46 +00:00
Šimon Brandner
03e776d9c4 Improve the look of the keyboard settings tab (#20595)
* First cut of new keyboard shortcuts

Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>

* i18n

Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
2022-01-24 11:33:37 +00:00
Andy Balaam
06fa4f4440 New config for maps (#20668) 2022-01-21 14:34:47 +00:00
Andy Balaam
68f5826013 Quieten webpack-dev-server output so yarn start is less noisy (#20667) 2022-01-21 12:53:09 +00:00
Andy Balaam
c40dbf1580 Remove the documentation of the Polls labs feature (#20639) 2022-01-20 09:41:00 +00:00
Kerry
85012b287f Persist jitsi only after meeting is joined (#20638)
* persist jitsi only after meeting is joined

Signed-off-by: Kerry Archibald <kerrya@element.io>

* lint + comment
2022-01-20 09:51:14 +01:00
Kat Gerasimova
840867bc02 Update issue and PR automation (#20583)
* Add X-Needs-Product issues to product board
* Add product PRs to product board
* Add UISI issues to crypto team board
* Rename labelled and unlabelled triage files because they don't always
  move issues
2022-01-18 13:12:27 +00:00
Michael Telatynski
9115fb7509 Expect /capabilities after startClient in app tests (#20599) 2022-01-18 09:55:56 +00:00
David Baker
a43b141a43 Reset back to develop branch 2022-01-18 09:23:05 +00:00
RiotRobot
aed3467fdf Merge branch 'master' into develop 2022-01-17 14:35:26 +00:00
RiotRobot
869b271f72 v1.9.9 2022-01-17 14:30:03 +00:00
RiotRobot
3033aa1d1a Prepare changelog for v1.9.9 2022-01-17 14:30:02 +00:00
RiotRobot
36d3a5fdeb Upgrade matrix-react-sdk to 3.38.0 2022-01-17 14:28:24 +00:00
RiotRobot
392d9d1121 Upgrade matrix-js-sdk to 15.4.0 2022-01-17 14:27:59 +00:00
James Salter
85f6c3b21f Enable posthog on app.element.io (#20539) 2022-01-13 17:00:21 +00:00
Travis Ralston
9c4d57e91c Documentation for extensible events labs flag (#20405)
* Documentation for extensible events labs flag

* Fix git protocol usage

Prevents this:
```
+ git clone git://github.com/matrix-org/matrix-js-sdk.git matrix-js-sdk --branch develop --depth 1
Cloning into 'matrix-js-sdk'...
fatal: remote error:
  The unauthenticated git protocol on port 9418 is no longer supported.
Please see https://github.blog/2021-09-01-improving-git-protocol-security-github/ for more information.
```
2022-01-13 09:56:38 -07:00
Kat Gerasimova
d3e2af58e9 Fix logic for removing Z-Labs tag with issue automation (#20515) 2022-01-13 14:11:12 +00:00
J. Ryan Stinnett
315f95e390 Use published matrix-web-i18n (#20517) 2022-01-13 10:30:15 +00:00
Timo
ef9335697e remove Z-Maximised-Widgets label from issue automation. (#20483) 2022-01-11 18:18:28 +01:00
David Baker
bcb5910d43 Yarn upgrade (#20490) 2022-01-11 17:17:18 +00:00
Michael Telatynski
d7813c09d9 Update default Jitsi URLs to meet.element.io (#20487) 2022-01-11 16:15:17 +00:00
RiotRobot
1f73249d19 v1.9.9-rc.1 2022-01-11 15:11:25 +00:00
RiotRobot
6d8f0db82f Prepare changelog for v1.9.9-rc.1 2022-01-11 15:11:25 +00:00
RiotRobot
7036600fa7 Upgrade matrix-react-sdk to 3.38.0-rc.1 2022-01-11 15:09:18 +00:00
RiotRobot
20bd175588 Upgrade matrix-js-sdk to 15.4.0-rc.1 2022-01-11 15:07:24 +00:00
Andy Balaam
da8476e426 Remove extraneous dollar from review-requests action (#20480) 2022-01-11 13:38:19 +00:00
Element Translate Bot
d40f432132 Translations update from Weblate (#20479)
* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Vietnamese)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/vi/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/tr/

* Translated using Weblate (Frisian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/fy/

* Translated using Weblate (Polish)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/pl/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nl/

* Translated using Weblate (Slovak)

Currently translated at 97.0% (33 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sk/

* Translated using Weblate (Hebrew)

Currently translated at 97.0% (33 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Hebrew)

Currently translated at 97.0% (33 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Hebrew)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nl/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sk/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Added translation using Weblate (Uzbek)

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/uk/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sk/

* Translated using Weblate (Norwegian Nynorsk)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nn/

* Translated using Weblate (Norwegian Nynorsk)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nn/

* Translated using Weblate (Greek)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/el/

Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Weblate <translate@riot.im>
Co-authored-by: Dinh Quang Tuyen <tuyen.dinh@aarenet.com>
Co-authored-by: Ege <alikemal@riseup.net>
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
Co-authored-by: Adrian Środoń <adrian.srodon@gmail.com>
Co-authored-by: jelv <post@jelv.nl>
Co-authored-by: Marek Ľach <graweeld@googlemail.com>
Co-authored-by: a5r0n <h98aaron@gmail.com>
Co-authored-by: Vulcan <element@zbug.anonaddy.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Yorqinbek <yyoriqulov@mail.ru>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Bjørn I.Svindseth <bjorni.svindseth@yahoo.com>
Co-authored-by: pkst-ellak <pkst@eellak.gr>
2022-01-11 13:02:28 +00:00
Germain
8a9f677a76 Fix app tests for new startClient method (#20482) 2022-01-11 12:58:55 +00:00
J. Ryan Stinnett
6c1fc8e903 Disable Git interactive auth when fetching deps (#20484)
This is important for branch testing, especially via HTTPS.
2022-01-11 12:48:49 +00:00
Timo
27ad1ebda0 Remove maximised widget feature docs (#20481) 2022-01-11 12:23:32 +00:00
Andy Balaam
f434bb9f20 Supply team name to review-request action (#20477) 2022-01-11 11:38:19 +00:00
Ankur
672ca16428 Added a workflow to remove Z-Labs label. (#20465)
Signed-off-by: ankur12-1610 <anknerd.12@gmail.com>
2022-01-11 11:23:14 +00:00
Andy Balaam
c27cdcf849 In review-request action, treat requested_teams as an array (#20474) 2022-01-11 11:16:52 +00:00
Andy Balaam
2d548d1179 Print out requested teams in review-request workflow (#20471) 2022-01-11 10:49:07 +00:00
Travis Ralston
2617b424ce Fix git protocol usage (#20464)
Prevents this:
```
+ git clone git://github.com/matrix-org/matrix-js-sdk.git matrix-js-sdk --branch develop --depth 1
Cloning into 'matrix-js-sdk'...
fatal: remote error:
  The unauthenticated git protocol on port 9418 is no longer supported.
Please see https://github.blog/2021-09-01-improving-git-protocol-security-github/ for more information.
```
2022-01-11 09:06:18 +00:00
J. Ryan Stinnett
10d7bdf9a1 Fix spacing errors (#20437) 2022-01-10 12:57:27 +00:00
Michael Telatynski
211f480027 Abstract electron download path behind an opaque ID (#20271) 2021-12-21 15:34:57 +00:00
Kerry
30cb0ae96d add docs for UIFeature.TimelineEnableRelativeDates (#20251)
Signed-off-by: Kerry Archibald <kerrya@element.io>
2021-12-21 10:08:35 +01:00
RiotRobot
dafdc1d642 Reset matrix-react-sdk back to develop branch 2021-12-20 14:41:09 +00:00
RiotRobot
10729e307e Reset matrix-js-sdk back to develop branch 2021-12-20 14:40:56 +00:00
RiotRobot
7fc0bab410 Merge branch 'master' into develop 2021-12-20 14:40:41 +00:00
RiotRobot
0f15ba34cd v1.9.8 2021-12-20 14:35:26 +00:00
RiotRobot
9b87566477 Prepare changelog for v1.9.8 2021-12-20 14:35:26 +00:00
RiotRobot
bce599a1fb Upgrade matrix-react-sdk to 3.37.0 2021-12-20 14:33:21 +00:00
RiotRobot
111b3b9de7 Upgrade matrix-js-sdk to 15.3.0 2021-12-20 14:32:22 +00:00
James Salter
9e1f393224 Ensure group audio-only calls don't switch on the webcam on join (#20234)
Pass isAudioOnly flag to jitsi SDK
2021-12-17 19:54:57 +11:00
Ankur
b7f48479f3 Added a workflow to triage Labs issues better. (#20228)
Signed-off-by: ankur12-1610 <anknerd.12@gmail.com>
2021-12-16 19:25:13 +00:00
Germain
23b21c940c Open thread on native notification click (#20176) 2021-12-15 08:34:54 +00:00
RiotRobot
33d6899345 v1.9.8-rc.1 2021-12-14 14:49:25 +00:00
RiotRobot
a58a74b39d Prepare changelog for v1.9.8-rc.1 2021-12-14 14:49:24 +00:00
RiotRobot
7b1a6f0146 Upgrade matrix-react-sdk to 3.37.0-rc.1 2021-12-14 14:47:52 +00:00
RiotRobot
3305fdb08b Upgrade matrix-js-sdk to 15.3.0-rc.1 2021-12-14 14:46:14 +00:00
Element Translate Bot
705366ab8c Translations update from Weblate (#20183)
* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Vietnamese)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/vi/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/tr/

* Translated using Weblate (Frisian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/fy/

* Translated using Weblate (Polish)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/pl/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nl/

* Translated using Weblate (Slovak)

Currently translated at 97.0% (33 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sk/

* Translated using Weblate (Hebrew)

Currently translated at 97.0% (33 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Hebrew)

Currently translated at 97.0% (33 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Hebrew)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nl/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sk/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Added translation using Weblate (Uzbek)

Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Weblate <translate@riot.im>
Co-authored-by: Dinh Quang Tuyen <tuyen.dinh@aarenet.com>
Co-authored-by: Ege <alikemal@riseup.net>
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
Co-authored-by: Adrian Środoń <adrian.srodon@gmail.com>
Co-authored-by: jelv <post@jelv.nl>
Co-authored-by: Marek Ľach <graweeld@googlemail.com>
Co-authored-by: a5r0n <h98aaron@gmail.com>
Co-authored-by: Vulcan <element@zbug.anonaddy.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Yorqinbek <yyoriqulov@mail.ru>
2021-12-14 13:10:55 +00:00
Ben Parsons
a90cbe9476 Include Vietnamese language (#20029)
* Include Vietnamese language

https://translate.element.io/languages/vi/element-web/ has been professionally translated by an Element customer

* Vietnamese -> "Tiếng Việt" ("Vietnamese Language")
2021-12-14 10:16:24 +00:00
Michael Telatynski
2aff06f56e Update typescript-eslint plugin & parser (#20163) 2021-12-14 00:56:21 +00:00
RiotRobot
e747380057 Merge branch 'master' into develop 2021-12-13 15:44:04 +00:00
RiotRobot
eae38311b2 v1.9.7 2021-12-13 15:36:54 +00:00
RiotRobot
1b6b1a8621 Prepare changelog for v1.9.7 2021-12-13 15:36:53 +00:00
Kat Gerasimova
46bcd13e05 Update trigger for PR workflow (#20159)
pull_request doesn't pass permissions correctly for the action to work.
2021-12-13 15:36:10 +00:00
RiotRobot
80cf11135d Upgrade matrix-react-sdk to 3.36.1 2021-12-13 15:33:35 +00:00
RiotRobot
9eb5af53e2 Upgrade matrix-js-sdk to 15.2.1 2021-12-13 15:32:59 +00:00
David Baker
0637c2e74d update olm to 3.2.8 (#20160) 2021-12-13 14:59:21 +00:00
Michael Telatynski
1e386f7786 Update Typescript to 4.5 (#20157) 2021-12-13 13:38:56 +00:00
Andy Balaam
0744c86ac9 Update yarn.lock (#20131) 2021-12-10 11:22:55 +00:00
Michael Telatynski
1d7c4d5d92 Document feature_spotlight (#19699) 2021-12-10 09:18:22 +00:00
Travis Ralston
ebc2bb7c56 Update eslint 2021-12-09 16:02:28 -07:00
Aaron R
df84c48d73 Fix imports to work with new lint rules (#19532)
* Add eslint-plugin-import

Signed-off-by: Aaron Raimist <aaron@raim.ist>

* Autofix + move comments manually

Signed-off-by: Aaron Raimist <aaron@raim.ist>

* Manual fix

Signed-off-by: Aaron Raimist <aaron@raim.ist>
2021-12-09 15:57:46 -07:00
Kat Gerasimova
9417470e93 Fix graphql warning for wrong types in workflows (#20120) 2021-12-09 15:55:22 -07:00
Kat Gerasimova
5a6e981cb4 Fix indentation in workflow 2021-12-09 21:11:18 +00:00
daniellekirkwood
0a5adedbc1 Add automation to move message bubbles issues to message bubbles board (#20117) 2021-12-09 15:24:20 +00:00
Kerry
b155d19934 add aria-hidden and alt for preload svg images (#20113)
Signed-off-by: Kerry Archibald <kerrya@element.io>
2021-12-09 14:23:03 +01:00
Kat Gerasimova
dc75590916 Update issue automation for the Delight team (#20112)
- Remove automation for v1 board as v2 board is now in use
- Update naming for the workflow because there's only one board now
- Add Z-IA issues to Delight workboard
2021-12-09 11:24:51 +00:00
Germain
de9f427364 Update outdated unit test info in README.md (#20096) 2021-12-08 12:34:34 +00:00
James Salter
159f1962a1 Fix Docker build versioning (#20077) (#20078)
* Centralise version scripts and fix Docker version
* Refactor generation of a git-hash-based version into get-version-from-git
* Refactor normalization of versions (stripping leading v) into normalize-version.sh
* Call get-version-from-git from ci_package.sh, call normalize-version from package.sh
* Refactor docker-write-version.sh into docker-package.sh, which both writes the
  version file and invokes yarn build passing VERSION
* Normalize the version received from the server
2021-12-07 15:35:23 +11:00
James Salter
b0abbfacd4 Fix Docker build versioning (#20077)
* Centralise version scripts and fix Docker version
* Refactor generation of a git-hash-based version into get-version-from-git
* Refactor normalization of versions (stripping leading v) into normalize-version.sh
* Call get-version-from-git from ci_package.sh, call normalize-version from package.sh
* Refactor docker-write-version.sh into docker-package.sh, which both writes the
  version file and invokes yarn build passing VERSION
* Normalize the version received from the server
2021-12-07 15:11:01 +11:00
Michael Telatynski
b3c5bb899b Add map_style_url to develop.element.io (#20068) 2021-12-06 17:09:04 +00:00
J. Ryan Stinnett
83f0f1de72 Update lockfile for widget API via matrix-react-sdk 2021-12-06 16:40:24 +00:00
RiotRobot
9ddab82979 Merge branch 'master' into develop 2021-12-06 16:02:41 +00:00
RiotRobot
996d79847a v1.9.6 2021-12-06 15:38:51 +00:00
RiotRobot
15df3bc816 Prepare changelog for v1.9.6 2021-12-06 15:38:51 +00:00
RiotRobot
8247318399 Upgrade matrix-react-sdk to 3.36.0 2021-12-06 15:37:34 +00:00
RiotRobot
4bb310ad3d Upgrade matrix-js-sdk to 15.2.0 2021-12-06 15:36:55 +00:00
James Salter
39901b8d72 Normalize the local app version (#20062)
We need to strip the leading v from the local app version as well as the one fetched from the server
2021-12-06 15:09:23 +00:00
James Salter
60788da1a3 Normalize the local app version (#20061)
We need to strip the leading v from the local app version in pollForUpdate to ensure it compares correctly the version from the /version request indicating what the latest available version is. Previously, we only stripped the leading in getAppVersion which is used in some other places but not to decide whether an update is available.
2021-12-06 23:12:29 +11:00
Matthew Hodgson
9b780e0e60 Simple static location sharing (#19754)
Adds static location share a la [MSC3488](https://github.com/matrix-org/matrix-doc/pull/3488) behind a labs flag, supporting legacy `m.location` `msgtype` too.  Powered by https://github.com/matrix-org/matrix-react-sdk/pull/7135.  Adds maplibre as a dependency.

To make this work, you have to add a valid `map_style_url` to your config.json.
2021-12-06 10:11:06 +00:00
James Salter
95a2b8eb2f Remove feature_pseudonymous_analytics_opt_in (#19900)
Depends on https://github.com/matrix-org/matrix-react-sdk/pull/6936/
2021-12-06 00:49:08 +00:00
James Salter
317430b6b1 Add analyticsOwner (#19401) 2021-12-06 11:42:19 +11:00
Linerly
1a403a37f9 Add support for the Indonesian language (#20032)
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2021-12-03 12:40:56 +00:00
Michael Telatynski
883d8cecaa Improve platform types (#20027) 2021-12-03 11:03:01 +00:00
Travis Ralston
459f2f2334 Fix widget-api dependency with a react-sdk upgrade (#20023)
This appears to have wanted to update all the dependencies of the react-sdk as well, but at least it avoids two widget apis running in release builds.
2021-12-02 18:11:05 -07:00
Kat Gerasimova
7753fee9e1 Issue workflow improvements (#19976)
- Fix filtering for Design issues
- Split out spaces jobs for new and old boards, so they don't
  depend on each other
- Remove voice message job for the old board
- Rename Priority bugs workflow to be shorter
- Improve naming for jobs so they're easier to read in the GitHub
  Actions page
2021-12-02 16:44:02 +01:00
J. Ryan Stinnett
0e69caee7c Upgrade matrix-widget-api to 0.1.0-beta.18 2021-12-02 12:46:00 +00:00
RiotRobot
b14b2967ec v1.9.6-rc.2 2021-12-01 11:50:27 +00:00
RiotRobot
bacddc5dfc Prepare changelog for v1.9.6-rc.2 2021-12-01 11:50:27 +00:00
RiotRobot
a799672bd3 Upgrade matrix-react-sdk to 3.36.0-rc.1 2021-12-01 11:45:17 +00:00
RiotRobot
87882dd6a3 Upgrade matrix-js-sdk to 15.2.0-rc.1 2021-12-01 11:44:55 +00:00
Michael Telatynski
2039f1fcae Document feature_breadcrumbs_v2 (#19700) 2021-12-01 10:50:08 +00:00
J. Ryan Stinnett
f496d6d5bf Upgrade allchange to 1.0.6 (#19969) 2021-11-30 17:56:04 +00:00
Element Translate Bot
ae048025e4 Translations update from Weblate (#19966)
* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Vietnamese)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/vi/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/tr/

* Translated using Weblate (Frisian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/fy/

* Translated using Weblate (Polish)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/pl/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nl/

Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Weblate <translate@riot.im>
Co-authored-by: Dinh Quang Tuyen <tuyen.dinh@aarenet.com>
Co-authored-by: Ege <alikemal@riseup.net>
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
Co-authored-by: Adrian Środoń <adrian.srodon@gmail.com>
Co-authored-by: jelv <post@jelv.nl>
2021-11-30 17:47:04 +00:00
Andy Balaam
090fc808bb Move workflow env sections into steps for PR workflow (#19926) 2021-11-29 17:22:53 +00:00
Andy Balaam
10e121a514 Review requests workflow (#19911)
* Review requests workflow

* Move env section up

* Use jq instead of sed to process JSON
2021-11-26 16:23:07 +00:00
James Salter
194aeac19e Get version from build VERSION variable (#19857)
* Fetch version from VERSION set during build
* When polling for new versions, compare to VERSION set during build
* Strip leading v from version, matching package.sh
2021-11-23 18:42:24 +11:00
RiotRobot
9746517ef7 Reset matrix-react-sdk back to develop branch 2021-11-22 14:43:05 +00:00
RiotRobot
40892ad087 Reset matrix-js-sdk back to develop branch 2021-11-22 14:42:52 +00:00
RiotRobot
d443787608 v1.9.5 2021-11-22 14:37:18 +00:00
RiotRobot
2995894055 Prepare changelog for v1.9.5 2021-11-22 14:37:17 +00:00
RiotRobot
c8ca48c79e Upgrade matrix-react-sdk to 3.35.1 2021-11-22 14:33:18 +00:00
RiotRobot
08c164a851 Upgrade matrix-js-sdk to 15.1.1 2021-11-22 14:32:54 +00:00
RiotRobot
0ad25f41ff v1.9.5-rc.1 2021-11-17 14:22:30 +00:00
RiotRobot
0dee9d78a5 Prepare changelog for v1.9.5-rc.1 2021-11-17 14:22:30 +00:00
RiotRobot
9e1d72122e Upgrade matrix-react-sdk to 3.35.0-rc.1 2021-11-17 14:18:54 +00:00
RiotRobot
82ddf8da99 Upgrade matrix-js-sdk to 15.1.1-rc.1 2021-11-17 14:18:06 +00:00
Kat Gerasimova
b2e8f212e4 Issue automation workflow updates (#19767)
* Add automation to move Threads issues

Fixes #19732

* Rename triage workflows to be more consistent
2021-11-16 14:04:11 +00:00
Element Translate Bot
12a42499a7 Translations update from Weblate (#19759)
* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Vietnamese)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/vi/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/tr/

Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Weblate <translate@riot.im>
Co-authored-by: Dinh Quang Tuyen <tuyen.dinh@aarenet.com>
Co-authored-by: Ege <alikemal@riseup.net>
2021-11-15 15:32:53 +00:00
Michael Telatynski
8e58d31db3 Document feature_spaces_metaspaces (#19679)
Co-authored-by: Jonathan de Jong <jonathandejong02@gmail.com>
2021-11-11 13:07:47 +00:00
Kat Gerasimova
8e279116ae Update triage workflow to fix conditional (#19682)
Docs say to use curly brackets, internet says that can break
multiline conditionals.

Trying to fix the if statement applying only to the first step in the job and
the second step ignoring the conditional.

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-10 16:42:18 +00:00
Kat Gerasimova
28f00498a2 Actions: use new voice message board for issues (#19670)
Voice-Messages are moving to org-level beta board so add automation to
send issues there (will remove old board automation after the move).

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-09 15:10:19 +00:00
RiotRobot
88bd3e41d0 Reset back to develop branch 2021-11-08 18:06:48 +00:00
RiotRobot
bd0ceca351 Merge branch 'master' into develop 2021-11-08 18:03:16 +00:00
RiotRobot
a16dcb8a5f v1.9.4 2021-11-08 17:59:39 +00:00
RiotRobot
87287bd10b Prepare changelog for v1.9.4 2021-11-08 17:59:38 +00:00
RiotRobot
ac75174729 Upgrade matrix-react-sdk to 3.34.0 2021-11-08 17:56:49 +00:00
RiotRobot
cf7d273052 Upgrade matrix-js-sdk to 15.1.0 2021-11-08 17:56:25 +00:00
Kat Gerasimova
4158a49297 Fix conditional check before moving design issues (#19658)
Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-08 14:44:22 +00:00
Kat Gerasimova
2ef1191afa Move Spaces issues to new Delight board (#19661)
Keep automation for old board too as we haven't moved the team yet

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-08 14:44:05 +00:00
Kat Gerasimova
0317e39ef7 Move P1 issues to crypto team board (#19654)
Move high priority issues which have an E2EE label to the crypto team
org level old style project board.

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-08 12:17:20 +00:00
Kat Gerasimova
8c227f61dd Update design team workflow to use beta board (#19647)
Try sending design issues to the beta board

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-05 15:12:49 -06:00
Kat Gerasimova
0c3efaec9a Workflow: do a better check on X-Needs-Info (#19641)
Previous check doesn't really work.

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-05 16:32:19 +00:00
Timo
3d2880ddfb Add docs for maximised widgets labs feature (#19628)
Co-authored-by: J. Ryan Stinnett <jryans@gmail.com>
2021-11-05 11:43:43 +00:00
Kat Gerasimova
addb6183b3 Workflow: move voice message issues to their board (#19626)
Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-04 15:45:28 +00:00
Kat Gerasimova
ef87da52f4 Workflow: use our special token instead of github (#19618)
This could fix the obscure "#ERROR# HttpError: Validation Failed" that
we're getting in failed actions.

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-04 11:43:12 +00:00
Kat Gerasimova
06e855c601 Update workflow name to be correct (#19614)
Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-04 10:44:33 +00:00
James Salter
cb0f9022f9 Sentry sourcemaps without CI minification (#19602)
* Revert "Revert "Update minification and sourcemap settings on CI builds for sentry (#19583)" (#19601)"

This reverts commit 516e38c82d.

* Disable minification in CI as it exceeds memory limits for poor buildkite
2021-11-03 13:19:21 +00:00
James Salter
516e38c82d Revert "Update minification and sourcemap settings on CI builds for sentry (#19583)" (#19601)
This reverts commit d9f72ec0b6.
2021-11-03 13:09:25 +00:00
Kat Gerasimova
c0a7437c20 Reference commits instead of tags in workflows (#19597)
This is better in case the tag is ever assigned to another commit.

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-03 12:42:46 +00:00
James Salter
d9f72ec0b6 Update minification and sourcemap settings on CI builds for sentry (#19583)
With previous settings, our JS files for develop are so large that sentry's webserver rejects the upload.

* re-enable minification to reduce the size of the files
* update the CI sourcemap setting from eval-source-map to source-map to move the embedded source out of the .js payload and into .js.map files
2021-11-03 09:55:28 +00:00
Kat Gerasimova
f9cbdb8aa0 Update issue -> board automation (#19589)
Merge issues-to-projects and triage-needs-info into one under a new name
as they have the same trigger.

Add automation to move ex-needs info issues to triaged when labels are
updated.

Fixes #18523

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-02 20:54:00 +00:00
RiotRobot
063b1d7f59 v1.9.4-rc.1 2021-11-02 14:23:59 +00:00
RiotRobot
f74765658c Prepare changelog for v1.9.4-rc.1 2021-11-02 14:23:58 +00:00
RiotRobot
2d579a8b73 Upgrade matrix-react-sdk to 3.34.0-rc.1 2021-11-02 14:22:33 +00:00
RiotRobot
68a73078c5 Upgrade matrix-js-sdk to 15.1.0-rc.1 2021-11-02 14:22:15 +00:00
David Baker
ad6ec9ed10 Update allchange to 1.0.5 (#19585) 2021-11-02 13:30:34 +00:00
Element Translate Bot
c52905fe4e Translations update from Weblate (#19584)
* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Weblate <translate@riot.im>
2021-11-02 12:03:56 +00:00
Kat Gerasimova
37840b4121 Don't give E2EE and spaces issues to web app team (#19576)
All incoming issues labelled with A-E2EE* and A-*spaces* labels should go to appropriate teams, and not to P1 in the web app team project.

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-11-01 18:18:37 +00:00
Travis Ralston
5ac4702ae3 Fix widget-api lockfile reference to avoid dependency conflicts (#19546)
This affects release builds only, for some reason.
2021-11-01 11:56:42 -06:00
James Salter
9793816b5f Listen to repository dispatch event so other repositories can trigger sourcemap regen (#19568) 2021-11-01 13:24:48 +00:00
James Salter
c4adac315e Add missing job name for workflow (#19566) 2021-11-01 10:16:02 +00:00
James Salter
4553531e7e Fix indentation (#19565) 2021-11-01 10:10:20 +00:00
J. Ryan Stinnett
ba302b7dc0 Upgrade widget API 2021-10-28 11:18:54 +01:00
Travis Ralston
85b489b3a7 Artificially set a VERSION environment variable during build steps (#19518)
Fixes https://github.com/vector-im/element-web/issues/19485

The variable should be set when it needs to by CI, but in every other environment it's not important. Simply setting it to *something* makes EnvironmentPlugin happy. We print a warning just in case people expect it to be set, and use a clear value in case the environment variable doesn't get properly set.
2021-10-27 08:16:04 -06:00
James Salter
940aaa0d1a Add workflow to upload sentry sourcemaps (#19480)
On push to develop, run ci_package.sh setting SENTRY_ environment variables, which causes webpack to invoke the sentry plugin to upload sourcemaps
2021-10-26 16:05:55 +01:00
Kat Gerasimova
4c4b9b96e7 Issue template: request version for web (#19507)
Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-10-25 17:14:50 +01:00
RiotRobot
9b3159ce64 Reset matrix-react-sdk back to develop branch 2021-10-25 11:47:46 +01:00
RiotRobot
80931222cd Reset matrix-js-sdk back to develop branch 2021-10-25 11:47:33 +01:00
RiotRobot
90776db423 Merge branch 'master' into develop 2021-10-25 11:45:41 +01:00
RiotRobot
e794234bc9 v1.9.3 2021-10-25 11:40:35 +01:00
RiotRobot
92500cf2d1 Prepare changelog for v1.9.3 2021-10-25 11:40:34 +01:00
RiotRobot
fc9ae78b56 Upgrade matrix-react-sdk to 3.33.0 2021-10-25 11:38:43 +01:00
RiotRobot
aa78b21457 Upgrade matrix-js-sdk to 15.0.0 2021-10-25 11:38:05 +01:00
Andy Balaam
0adad257c0 Build the high contrast theme into element-web (#19477) 2021-10-25 10:38:05 +01:00
RiotRobot
a7740b5424 v1.9.3-rc.3 2021-10-25 10:09:16 +01:00
RiotRobot
7a24f67caf Prepare changelog for v1.9.3-rc.3 2021-10-25 10:09:16 +01:00
David Baker
a4b6690e4d Remove highlightjs CSS (#19483)
This was completely unnecessary: react-sdk includes appropriate CSS
for highlight.js in its themes. This was actually causing some of
those values to be overridden with silly ones that made text invisible
on the dark theme.

Fixes https://github.com/vector-im/element-web/issues/19476
2021-10-25 10:05:27 +01:00
David Baker
75eab660c2 Remove highlightjs CSS (#19483)
This was completely unnecessary: react-sdk includes appropriate CSS
for highlight.js in its themes. This was actually causing some of
those values to be overridden with silly ones that made text invisible
on the dark theme.

Fixes https://github.com/vector-im/element-web/issues/19476
2021-10-22 18:28:27 +01:00
James Salter
f550d63198 Pass our VERSION to sentry plugin's release arg via env (#19474)
Use our existing VERSION, deduced by the packaging script, as the release for sentry sourcemaps.

This will be undefined for dev builds.
2021-10-22 15:06:14 +01:00
Travis Ralston
004e8edcb2 Deprecate sso_immediate_redirect and add welcome-page only option (#19437)
* Deprecate `sso_immediate_redirect` and add welcome-page only option

The old `sso_immediate_redirect` option is kept in code for backwards compatibility, but is replaced by `sso_redirect_options.immediate`, where a new `on_welcome_page` option is also introduced to only target entry points to the app. 

The path matching is a bit brittle, but still ideal in the sense of not showing UI while the app realizes it needs to redirect.

The new welcome page-only option is fully intended to avoid breaking permalinks and such while still redirecting when needed. In future, other options might be added here to further tune the experience.

* Add note about guests
2021-10-21 08:35:05 -06:00
James Salter
d24348de81 Upload sourcemaps to sentry during build (#19403) 2021-10-20 11:18:47 +01:00
RiotRobot
d3814ddae0 v1.9.3-rc.2 2021-10-20 08:48:10 +01:00
RiotRobot
3278c5a306 Prepare changelog for v1.9.3-rc.2 2021-10-20 08:48:09 +01:00
RiotRobot
6909e28764 Upgrade matrix-react-sdk to 3.33.0-rc.2 2021-10-20 08:46:18 +01:00
Travis Ralston
c1ca4a0920 Update allchange (#19453) 2021-10-19 23:31:32 +01:00
Germain Souquet
e0a1e6f5a6 Upgrade yarn dependencies 2021-10-19 11:29:34 +01:00
RiotRobot
cb25cb470d v1.9.3-rc.1 2021-10-19 11:07:09 +01:00
RiotRobot
30800755d7 Prepare changelog for v1.9.3-rc.1 2021-10-19 11:07:08 +01:00
RiotRobot
b72b6c6089 Upgrade matrix-react-sdk to 3.33.0-rc.1 2021-10-19 11:04:11 +01:00
RiotRobot
96a506ded3 Upgrade matrix-js-sdk to 15.0.0-rc.1 2021-10-19 11:03:51 +01:00
Germain
615ccb0481 Merge pull request #19442 from RiotTranslateBot/weblate-element-web-element-web
Translations update from Weblate
2021-10-19 10:37:36 +01:00
Weblate
ccd88ba087 Merge branch 'origin/develop' into Weblate. 2021-10-19 08:14:37 +00:00
Dariusz Niemczyk
e6993ca964 Expose logger instance for development purposes
Related https://github.com/vector-im/element-web/issues/18425
2021-10-19 10:14:31 +02:00
Dariusz Niemczyk
85a81af1da Replace console.warn with logger.warn
Related https://github.com/vector-im/element-web/issues/18425
2021-10-19 10:14:31 +02:00
Dariusz Niemczyk
dc9f77a509 Replace console.log with logger.log
Related https://github.com/vector-im/element-web/issues/18425
2021-10-19 10:14:31 +02:00
Dariusz Niemczyk
db01bfc0fd Replace console.error with logger.error
Related https://github.com/vector-im/element-web/issues/18425
2021-10-19 10:14:31 +02:00
Dariusz Niemczyk
515a8d2097 Fix wrong type call for window.location.reload 2021-10-19 10:14:31 +02:00
Weblate
ab6ba952ac Merge branch 'origin/develop' into Weblate. 2021-10-18 18:52:47 +00:00
David Baker
195234a7b5 Merge pull request #19434 from vector-im/dbkr/upgrade_highlightjs
Upgrade highlight.js
2021-10-18 19:52:42 +01:00
David Baker
ce3cc42e4a Upgrade highlight.js
CSS update for https://github.com/matrix-org/matrix-react-sdk/pull/6973
2021-10-18 19:33:08 +01:00
Linerly
700d59be16 Translated using Weblate (Indonesian)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/
2021-10-16 19:25:37 +00:00
Nikita Epifanov
9673661177 Translated using Weblate (Russian)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/ru/
2021-10-16 19:25:37 +00:00
Weblate
794043f1b8 Merge branch 'origin/develop' into Weblate. 2021-10-13 17:28:50 +00:00
Jiri Grönroos
4c25a5e8bd Translated using Weblate (Finnish)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/fi/
2021-10-13 17:28:50 +00:00
Travis Ralston
ef470a1207 Merge pull request #19368 from vector-im/travis/labs/polls
Add labs docs for polls feature
2021-10-13 11:28:46 -06:00
Travis Ralston
c405880a39 Add labs docs for polls feature
See https://github.com/matrix-org/matrix-react-sdk/pull/6934
2021-10-12 15:15:17 -06:00
Weblate
347f90ef73 Merge branch 'origin/develop' into Weblate. 2021-10-12 11:18:31 +00:00
Germain
7ed733d9bf Merge pull request #19357 from vector-im/gsouquet/fix-wrench-tests 2021-10-12 12:18:27 +01:00
Germain Souquet
1490d4f462 Revert Jest 27 upgrade 2021-10-12 10:59:56 +01:00
Weblate
93c037a318 Merge branch 'origin/develop' into Weblate. 2021-10-12 08:11:12 +00:00
RiotRobot
46e526c038 Reset matrix-react-sdk back to develop branch 2021-10-12 09:10:54 +01:00
RiotRobot
613c04d984 Reset matrix-js-sdk back to develop branch 2021-10-12 09:10:42 +01:00
RiotRobot
403c851461 Merge branch 'release-v1.9.2' 2021-10-12 09:07:34 +01:00
Weblate
79cbf55986 Merge branch 'origin/develop' into Weblate. 2021-10-11 11:19:23 +00:00
Linerly
6c1624f2f2 Translated using Weblate (Indonesian)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/
2021-10-11 11:19:23 +00:00
RiotRobot
971f4bbb4d Merge branch 'master' into develop 2021-10-11 12:19:01 +01:00
RiotRobot
afe8e878a5 v1.9.1 2021-10-11 12:08:26 +01:00
RiotRobot
8e486c3f98 Prepare changelog for v1.9.1 2021-10-11 12:08:26 +01:00
RiotRobot
2ef743e5ee Upgrade matrix-react-sdk to 3.32.0 2021-10-11 12:06:09 +01:00
RiotRobot
a605657ebe Upgrade matrix-js-sdk to 14.0.0 2021-10-11 12:05:18 +01:00
Slimane Selyan AMIRI
f214031f8b Translated using Weblate (Kabyle)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/kab/
2021-10-08 14:25:34 +00:00
RiotRobot
5fff0fb677 v1.9.1-rc.2 2021-10-08 08:42:53 +01:00
RiotRobot
721670d57e Prepare changelog for v1.9.1-rc.2 2021-10-08 08:42:52 +01:00
RiotRobot
74669e178c Upgrade matrix-react-sdk to 3.32.0-rc.2 2021-10-08 08:40:49 +01:00
RiotRobot
7bc016dbea Upgrade matrix-js-sdk to 14.0.0-rc.2 2021-10-08 08:40:24 +01:00
Germain
90ada74daf Merge pull request #19307 from vector-im/gsouquet/fix-dependabots-cve 2021-10-07 09:28:36 +01:00
Germain Souquet
efeb9cb1d5 Fix @types/jest version 2021-10-06 10:01:52 +01:00
Germain Souquet
b1627461a7 Upgrade to Jest 27.2.4
Jest 27 release blog post: jestjs.io/blog/2021/05/25/jest-27

Removes deprecated jest-environment-jsdom-sixteen
2021-10-06 09:58:47 +01:00
Germain Souquet
5f236f0224 Upgrade to Jest 27 2021-10-06 09:33:23 +01:00
Ekaterina Gerasimova
20c4c2fcd3 Improve wording for outcome section of bug template
Based off vector-im/element-android/pull/4076, trying out slightly
different wording

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-10-05 14:19:12 +01:00
Ekaterina Gerasimova
a98942e0c8 Improve wording around rageshakes on issue template
Issue #18985

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-10-05 14:19:12 +01:00
Germain Souquet
88030330f1 Update dependencies 2021-10-04 12:31:36 +01:00
79 changed files with 4120 additions and 1975 deletions

View File

@@ -23,12 +23,12 @@ body:
- type: textarea
id: result
attributes:
label: What happened?
label: Outcome
placeholder: Tell us what went wrong
value: |
### What did you expect?
#### What did you expect?
### What happened?
#### What happened instead?
validations:
required: true
- type: input
@@ -58,16 +58,17 @@ body:
id: homeserver
attributes:
label: Homeserver
description: Which server is your account registered on?
placeholder: e.g. matrix.org
description: |
Which server is your account registered on? If it is a local or non-public homeserver, please tell us what is the homeserver implementation (ex: Synapse/Dendrite/etc.) and the version.
placeholder: e.g. matrix.org or Synapse 1.50.0rc1
validations:
required: false
- type: dropdown
id: rageshake
attributes:
label: Have you submitted a rageshake?
label: Will you send logs?
description: |
Did you know that you can send a /rageshake command from your application to submit logs for this issue? Trigger the defect, then type /rageshake into the message entry area followed by a description of the problem and send the command. This will automatically submit anonymous logs to the developers.
Did you know that you can send a /rageshake command from your application to submit logs for this issue? Trigger the defect, then type `/rageshake` into the message input area followed by a description of the problem and send the command. You will be able to add a link to this defect report and submit anonymous logs to the developers.
options:
- 'Yes'
- 'No'

View File

@@ -23,12 +23,12 @@ body:
- type: textarea
id: result
attributes:
label: What happened?
label: Outcome
placeholder: Tell us what went wrong
value: |
### What did you expect?
#### What did you expect?
### What happened?
#### What happened instead?
validations:
required: true
- type: input
@@ -54,20 +54,29 @@ body:
placeholder: e.g. develop.element.io, app.element.io
validations:
required: false
- type: input
id: version
attributes:
label: Application version
description: You can find the version information in Settings -> Help & About.
placeholder: e.g. Element version 1.7.34, olm version 3.2.3
validations:
required: false
- type: input
id: homeserver
attributes:
label: Homeserver
description: Which server is your account registered on?
placeholder: e.g. matrix.org
description: |
Which server is your account registered on? If it is a local or non-public homeserver, please tell us what is the homeserver implementation (ex: Synapse/Dendrite/etc.) and the version.
placeholder: e.g. matrix.org or Synapse 1.50.0rc1
validations:
required: false
- type: dropdown
id: rageshake
attributes:
label: Have you submitted a rageshake?
label: Will you send logs?
description: |
Did you know that you can send a /rageshake command from the web applicaiton to submit logs for this issue? Trigger the defect, then type /rageshake into the message entry area followed by a description of the problem and send the command. This will automatically submit anonymous logs to the developers.
Did you know that you can send a /rageshake command from the web application to submit logs for this issue? Trigger the defect, then type `/rageshake` into the message input area followed by a description of the problem and send the command. You will be able to add a link to this defect report and submit anonymous logs to the developers.
options:
- 'Yes'
- 'No'

8
.github/ISSUE_TEMPLATE/config.ylm vendored Normal file
View File

@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Report a security vulnerability
url: https://github.com/vector-im/element-web/security/policy
about: Please review our security policy for more details
- name: Questions & support
url: https://matrix.to/#/#element-web:matrix.org
about: Please ask and answer questions here.

View File

@@ -1,36 +0,0 @@
on:
issues:
types: [labeled]
jobs:
move_priority_design_issues:
name: Move priority X-Needs-Design issues to Design project board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'X-Needs-Design') &&
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'O-Occasional')) &&
(contains(github.event.issue.labels.*.name, 'S-Critical') ||
contains(github.event.issue.labels.*.name, 'S-Major') ||
contains(github.event.issue.labels.*.name, 'S-Minor'))
steps:
- uses: konradpabjan/move-labeled-or-milestoned-issue@v2.0
with:
action-token: "${{ secrets.ELEMENT_BOT_TOKEN }}"
project-url: "https://github.com/orgs/vector-im/projects/14"
column-name: "📥 Inbox"
label-name: "X-Needs-Design"
move_spaces_issues:
name: Move Spaces issues to Delight project board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Spaces') ||
contains(github.event.issue.labels.*.name, 'A-Space-Settings') ||
contains(github.event.issue.labels.*.name, 'A-Subspaces')
steps:
- uses: konradpabjan/move-labeled-or-milestoned-issue@v2.0
with:
action-token: "${{ secrets.ELEMENT_BOT_TOKEN }}"
project-url: "https://github.com/orgs/vector-im/projects/6"
column-name: "📥 Inbox"
label-name: "A-Spaces"

View File

@@ -0,0 +1,26 @@
name: Upload Sentry Sourcemaps
on:
push:
branches:
- develop
repository_dispatch:
types: [ element-web-notify ]
jobs:
upload-sentry-sourcemaps:
runs-on: ubuntu-latest
environment: develop
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14'
cache: 'yarn'
- run: ./scripts/fetch-develop.deps.sh --depth 1
- run: yarn install
- run: ./scripts/ci_package.sh
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
SENTRY_URL: ${{ secrets.SENTRY_URL }}
SENTRY_ORG: sentry
SENTRY_PROJECT: riot-web

View File

@@ -8,7 +8,7 @@ jobs:
automate-project-columns:
runs-on: ubuntu-latest
steps:
- uses: alex-page/github-project-automation-plus@v0.8.1
- uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488
with:
project: Issue triage
column: Incoming

190
.github/workflows/triage-labelled.yml vendored Normal file
View File

@@ -0,0 +1,190 @@
name: Move labelled issues to correct boards and columns
on:
issues:
types: [labeled]
jobs:
apply_Z-Labs_label:
name: Add Z-Labs label for features behind labs flags
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Maths') ||
contains(github.event.issue.labels.*.name, 'A-Message-Pinning') ||
contains(github.event.issue.labels.*.name, 'A-Threads') ||
contains(github.event.issue.labels.*.name, 'A-Location-Sharing') ||
contains(github.event.issue.labels.*.name, 'Z-IA') ||
contains(github.event.issue.labels.*.name, 'A-Themes-Custom') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') ||
contains(github.event.issue.labels.*.name, 'A-Tags')
steps:
- uses: actions/github-script@v5
with:
script: |
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['Z-Labs']
})
move_needs_info_issues:
name: X-Needs-Info issues to Need info column on triage board
runs-on: ubuntu-latest
steps:
- uses: konradpabjan/move-labeled-or-milestoned-issue@219d384e03fa4b6460cd24f9f37d19eb033a4338
with:
action-token: "${{ secrets.ELEMENT_BOT_TOKEN }}"
project-url: "https://github.com/vector-im/element-web/projects/27"
column-name: "Need info"
label-name: "X-Needs-Info"
add_priority_design_issues_to_project:
name: P1 X-Needs-Design to Design project board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'X-Needs-Design') &&
(contains(github.event.issue.labels.*.name, 'S-Critical') &&
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
contains(github.event.issue.labels.*.name, 'S-Major') &&
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'A11y') &&
contains(github.event.issue.labels.*.name, 'O-Frequent'))
steps:
- uses: octokit/graphql-action@v2.x
id: add_to_project
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PN_kwDOAM0swc0sUA"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
add_product_issues:
name: X-Needs-Product to Design project board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'X-Needs-Product')
steps:
- uses: octokit/graphql-action@v2.x
id: add_to_project
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PN_kwDOAM0swc4AAg6N"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
Delight_issues_to_board:
name: Delight issues to project board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Spaces') ||
contains(github.event.issue.labels.*.name, 'A-Space-Settings') ||
contains(github.event.issue.labels.*.name, 'A-Subspaces') ||
contains(github.event.issue.labels.*.name, 'Z-IA')
steps:
- uses: octokit/graphql-action@v2.x
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PN_kwDOAM0swc1HvQ"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_voice-message_issues:
name: A-Voice Messages to voice message board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Voice Messages')
steps:
- uses: octokit/graphql-action@v2.x
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PN_kwDOAM0swc2KCw"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_threads_issues:
name: A-Threads to Thread board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Threads')
steps:
- uses: octokit/graphql-action@v2.x
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PN_kwDOAM0swc0rRA"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_message_bubbles_issues:
name: A-Message-Bubbles to Message bubbles board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Message-Bubbles')
steps:
- uses: octokit/graphql-action@v2.x
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PN_kwDOAM0swc3m-g"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

View File

@@ -0,0 +1,139 @@
name: Move pull requests asking for review to the relevant project
on:
pull_request_target:
types: [review_requested]
jobs:
add_design_pr_to_project:
name: Move PRs asking for design review to the design board
runs-on: ubuntu-latest
steps:
- uses: octokit/graphql-action@v2.x
id: find_team_members
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
query find_team_members($team: String!) {
organization(login: "vector-im") {
team(slug: $team) {
members {
nodes {
login
}
}
}
}
}
team: ${{ env.TEAM }}
env:
TEAM: "design"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
- id: any_matching_reviewers
run: |
# Fetch requested reviewers, and people who are on the team
echo '${{ tojson(fromjson(steps.find_team_members.outputs.data).organization.team.members.nodes[*].login) }}' | tee /tmp/team_members.json
echo '${{ tojson(github.event.pull_request.requested_reviewers[*].login) }}' | tee /tmp/reviewers.json
jq --raw-output .[] < /tmp/team_members.json | sort | tee /tmp/team_members.txt
jq --raw-output .[] < /tmp/reviewers.json | sort | tee /tmp/reviewers.txt
# Fetch requested team reviewers, and the name of the team
echo '${{ tojson(github.event.pull_request.requested_teams[*].slug) }}' | tee /tmp/team_reviewers.json
jq --raw-output .[] < /tmp/team_reviewers.json | sort | tee /tmp/team_reviewers.txt
echo '${{ env.TEAM }}' | tee /tmp/team.txt
# If either a reviewer matches a team member, or a team matches our team, say "true"
if [ $(join /tmp/team_members.txt /tmp/reviewers.txt | wc -l) != 0 ]; then
echo "::set-output name=match::true"
elif [ $(join /tmp/team.txt /tmp/team_reviewers.txt | wc -l) != 0 ]; then
echo "::set-output name=match::true"
else
echo "::set-output name=match::false"
fi
env:
TEAM: "design"
- uses: octokit/graphql-action@v2.x
id: add_to_project
if: steps.any_matching_reviewers.outputs.match == 'true'
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!, $contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.pull_request.node_id }}
env:
PROJECT_ID: "PN_kwDOAM0swc0sUA"
TEAM: "design"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
add_product_pr_to_project:
name: Move PRs asking for design review to the design board
runs-on: ubuntu-latest
steps:
- uses: octokit/graphql-action@v2.x
id: find_team_members
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
query find_team_members($team: String!) {
organization(login: "vector-im") {
team(slug: $team) {
members {
nodes {
login
}
}
}
}
}
team: ${{ env.TEAM }}
env:
TEAM: "product"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
- id: any_matching_reviewers
run: |
# Fetch requested reviewers, and people who are on the team
echo '${{ tojson(fromjson(steps.find_team_members.outputs.data).organization.team.members.nodes[*].login) }}' | tee /tmp/team_members.json
echo '${{ tojson(github.event.pull_request.requested_reviewers[*].login) }}' | tee /tmp/reviewers.json
jq --raw-output .[] < /tmp/team_members.json | sort | tee /tmp/team_members.txt
jq --raw-output .[] < /tmp/reviewers.json | sort | tee /tmp/reviewers.txt
# Fetch requested team reviewers, and the name of the team
echo '${{ tojson(github.event.pull_request.requested_teams[*].slug) }}' | tee /tmp/team_reviewers.json
jq --raw-output .[] < /tmp/team_reviewers.json | sort | tee /tmp/team_reviewers.txt
echo '${{ env.TEAM }}' | tee /tmp/team.txt
# If either a reviewer matches a team member, or a team matches our team, say "true"
if [ $(join /tmp/team_members.txt /tmp/reviewers.txt | wc -l) != 0 ]; then
echo "::set-output name=match::true"
elif [ $(join /tmp/team.txt /tmp/team_reviewers.txt | wc -l) != 0 ]; then
echo "::set-output name=match::true"
else
echo "::set-output name=match::false"
fi
env:
TEAM: "product"
- uses: octokit/graphql-action@v2.x
id: add_to_project
if: steps.any_matching_reviewers.outputs.match == 'true'
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!, $contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.pull_request.node_id }}
env:
PROJECT_ID: "PN_kwDOAM0swc4AAg6N"
TEAM: "product"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

View File

@@ -1,16 +0,0 @@
name: Move X-Needs-Info into Need info column in the Issue triage board
on:
issues:
types: [labeled]
jobs:
Move_Labeled_Issue_On_Project_Board:
runs-on: ubuntu-latest
steps:
- uses: konradpabjan/move-labeled-or-milestoned-issue@v2.0
with:
action-token: ${{ secrets.GITHUB_TOKEN }}
project-url: "https://github.com/vector-im/element-web/projects/27"
column-name: "Need info"
label-name: "X-Needs-Info"

View File

@@ -1,25 +1,56 @@
name: Move labelled issues into the Priority bugs column for the Web App Team
name: Move P1 bugs to boards
on:
issues:
types: [labeled]
types: [labeled, unlabeled]
jobs:
Move_high_priority_issues_to_team_workboard:
p1_issues_to_team_workboard:
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'T-Defect') &&
contains(github.event.issue.labels.*.name, 'S-Critical') &&
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
contains(github.event.issue.labels.*.name, 'S-Major') &&
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'A11y') &&
contains(github.event.issue.labels.*.name, 'O-Frequent')
(!contains(github.event.issue.labels.*.name, 'A-E2EE') &&
!contains(github.event.issue.labels.*.name, 'A-E2EE-Cross-Signing') &&
!contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') &&
!contains(github.event.issue.labels.*.name, 'A-E2EE-Key-Backup') &&
!contains(github.event.issue.labels.*.name, 'A-E2EE-SAS-Verification') &&
!contains(github.event.issue.labels.*.name, 'A-Spaces') &&
!contains(github.event.issue.labels.*.name, 'A-Spaces-Settings') &&
!contains(github.event.issue.labels.*.name, 'A-Subspaces')) &&
(contains(github.event.issue.labels.*.name, 'T-Defect') &&
contains(github.event.issue.labels.*.name, 'S-Critical') &&
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
contains(github.event.issue.labels.*.name, 'S-Major') &&
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'A11y') &&
contains(github.event.issue.labels.*.name, 'O-Frequent'))
steps:
- uses: alex-page/github-project-automation-plus@v0.8.1
- uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488
with:
project: Web App Team
column: P1
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
P1_issues_to_crypto_team_workboard:
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'Z-UISI') ||
(contains(github.event.issue.labels.*.name, 'A-E2EE') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Cross-Signing') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Key-Backup') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-SAS-Verification')) &&
(contains(github.event.issue.labels.*.name, 'T-Defect') &&
contains(github.event.issue.labels.*.name, 'S-Critical') &&
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
contains(github.event.issue.labels.*.name, 'S-Major') &&
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'A11y') &&
contains(github.event.issue.labels.*.name, 'O-Frequent'))
steps:
- uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488
with:
project: Crypto Team
column: Ready
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}

61
.github/workflows/triage-unlabelled.yml vendored Normal file
View File

@@ -0,0 +1,61 @@
name: Move unlabelled from needs info columns to triaged
on:
issues:
types: [unlabeled]
jobs:
Move_Unabeled_Issue_On_Project_Board:
name: Move no longer X-Needs-Info issues to Triaged
runs-on: ubuntu-latest
if: >
${{
!contains(github.event.issue.labels.*.name, 'X-Needs-Info') }}
env:
BOARD_NAME: "Issue triage"
OWNER: ${{ github.repository_owner }}
REPO: ${{ github.event.repository.name }}
ISSUE: ${{ github.event.issue.number }}
steps:
- name: Check if issue is already in "${{ env.BOARD_NAME }}"
run: |
if curl -i -H 'Content-Type: application/json' -H "Authorization: bearer ${{ secrets.GITHUB_TOKEN }}" -X POST -d '{"query": "query($issue: Int!, $owner: String!, $repo: String!) { repository(owner: $owner, name: $repo) { issue(number: $issue) { projectCards { nodes { project { name } } } } } } ", "variables" : "{ \"issue\": '${ISSUE}', \"owner\": \"'${OWNER}'\", \"repo\": \"'${REPO}'\" }" }' https://api.github.com/graphql | grep "\b$BOARD_NAME\b"; then
echo "Issue is already in Project '$BOARD_NAME', proceeding";
echo "ALREADY_IN_BOARD=true" >> $GITHUB_ENV
else
echo "Issue is not in project '$BOARD_NAME', cancelling this workflow"
echo "ALREADY_IN_BOARD=false" >> $GITHUB_ENV
fi
- name: Move issue
uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488
if: ${{ env.ALREADY_IN_BOARD == 'true' }}
with:
project: Issue triage
column: Triaged
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
remove_Z-Labs_label:
name: Remove Z-Labs label when features behind labs flags are removed
runs-on: ubuntu-latest
if: >
!(contains(github.event.issue.labels.*.name, 'A-Maths') ||
contains(github.event.issue.labels.*.name, 'A-Message-Pinning') ||
contains(github.event.issue.labels.*.name, 'A-Threads') ||
contains(github.event.issue.labels.*.name, 'A-Polls') ||
contains(github.event.issue.labels.*.name, 'A-Location-Sharing') ||
contains(github.event.issue.labels.*.name, 'A-Message-Bubbles') ||
contains(github.event.issue.labels.*.name, 'Z-IA') ||
contains(github.event.issue.labels.*.name, 'A-Themes-Custom') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') ||
contains(github.event.issue.labels.*.name, 'A-Tags')) &&
contains(github.event.issue.labels.*.name, 'Z-Labs')
steps:
- uses: actions/github-script@v5
with:
script: |
github.rest.issues.removeLabel({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
name: ['Z-Labs']
})

0
.sentryclirc Normal file
View File

File diff suppressed because it is too large Load Diff

View File

@@ -16,15 +16,12 @@ WORKDIR /src
COPY . /src
RUN dos2unix /src/scripts/docker-link-repos.sh && bash /src/scripts/docker-link-repos.sh
RUN yarn --network-timeout=100000 install
RUN yarn build
RUN dos2unix /src/scripts/docker-package.sh && bash /src/scripts/docker-package.sh
# Copy the config now so that we don't create another layer in the app image
RUN cp /src/config.sample.json /src/webapp/config.json
# Ensure we populate the version file
RUN dos2unix /src/scripts/docker-write-version.sh && bash /src/scripts/docker-write-version.sh
# App
FROM nginx:alpine

View File

@@ -375,20 +375,11 @@ Running the tests
-----------------
There are a number of application-level tests in the `tests` directory; these
are designed to run in a browser instance under the control of
[karma](https://karma-runner.github.io). To run them:
are designed to run with Jest and JSDOM. To run them
* Make sure you have Chrome installed (a recent version, like 59)
* Make sure you have `matrix-js-sdk` and `matrix-react-sdk` installed and
built, as above
* `yarn test`
The above will run the tests under Chrome in a `headless` mode.
You can also tell karma to run the tests in a loop (every time the source
changes), in an instance of Chrome on your desktop, with `yarn
test-multi`. This also gives you the option of running the tests in 'debug'
mode, which is useful for stepping through the tests in the developer tools.
```
yarn test
```
### End-to-End tests

View File

@@ -23,6 +23,7 @@
"https://scalar-staging.riot.im/scalar/api"
],
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
"uisi_autorageshake_app": "element-auto-uisi",
"defaultCountryCode": "GB",
"showLabsSettings": false,
"features": { },
@@ -47,6 +48,6 @@
"breadcrumbs": true
},
"jitsi": {
"preferredDomain": "jitsi.riot.im"
"preferredDomain": "meet.element.io"
}
}

View File

@@ -22,9 +22,19 @@ For a good example, see https://develop.element.io/config.json.
`default_hs_url` is specified. When multiple sources are specified, it is unclear
which should take priority and therefore the application cannot continue.
* As of Element 1.4.0, identity servers are optional. See [Identity servers](#identity-servers) below.
1. `sso_immediate_redirect`: When `true`, Element will assume the default server supports SSO
and attempt to send the user there to continue (if they aren't already logged in). Default
`false`. Note that this disables all usage of the welcome page.
1. `sso_redirect_options`: Optionally defines how Element will behave with a server which supports
Single Sign On (SSO). By default, Element will do nothing special and simply show a button where
needed for the user to click to navigate to the SSO system. This behaviour can be tuned with the
config options below (as properties of the `sso_redirect_options` object). None of the options apply
if Element thinks the user is already logged in, and similarly Element will assume the default server
supports SSO if these redirect options are used.
* `immediate`: When `true` (default `false`), Element will automatically redirect all unauthenticated
users to the SSO system to log in regardless of how they reached the app. This overrides the use of
other redirect options.
* `on_welcome_page`: When `true` (default `false`), Element will automatically redirect all unauthenticated
users to the SSO to log in if the user lands on the welcome page or no specific page. For example,
https://app.element.io/#/welcome and https://app.element.io would redirect if set up to use this option.
This can be useful to maintain guest experience until an account is needed.
1. `features`: Lookup of optional features that may be force-enabled (`true`) or force-disabled (`false`).
When features are not listed here, their defaults will be used, and users can turn them on/off if `showLabsSettings`
allows them to. The available optional experimental features vary from release to release and are
@@ -53,6 +63,20 @@ For a good example, see https://develop.element.io/config.json.
https://github.com/matrix-org/rageshake server). Bug reports are sent when a user clicks
"Send Logs" within the application. Bug reports can be disabled/hidden by leaving the
`bug_report_endpoint_url` out of your config file.
1. `uisi_autorageshake_app`: If users enable the Labs flag
"Automatically send debug logs on decryption errors", rageshakes
submitted by that feature can be given a custom app name so that
the rageshake server can file them in a separate issue tracker. If
this field is absent from the config, the app name for decryption
error rageshakes will be `"element-web"` just like for
manually-submitted rageshakes.
If `bug_report_endpoint_url` is set to Element's rageshake server,
then this field should be set to `"element-auto-uisi"` as in
`config.sample.json`. If `bug_report_endpoint_url` is left out,
this field has no effect and can be left out as well. If you are
using your own rageshake server, set this field in accordance with
your rageshake server configuration.
1. `roomDirectory`: config for the public room directory. This section is optional.
1. `roomDirectory.servers`: List of other homeservers' directories to include in the drop
down list. Optional.
@@ -93,8 +117,13 @@ For a good example, see https://develop.element.io/config.json.
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
to `jitsi.riot.im`. This is used whenever a user clicks on the voice/video
to `meet.element.io`. This is used whenever a user clicks on the voice/video
call buttons - integration managers may use a different domain.
This setting is ignored if your homeserver provides
`/.well-known/matrix/client` in its well-known location, and the JSON file
at that location has a key `m.vector.riot.jitsi`. In this case, the
configuration found in the well-known location is used instead.
1. `enable_presence_by_hs_url`: The property key should be the URL of the homeserver
and its value defines whether to enable/disable the presence status display
from that homeserver. If no options are configured, presence is shown for all
@@ -142,6 +171,17 @@ For a good example, see https://develop.element.io/config.json.
1. `sentry`: [Sentry](https://sentry.io/) configuration for rageshake data being sent to sentry.
1. `dsn`: the Sentry [DSN](https://docs.sentry.io/product/sentry-basics/dsn-explainer/)
2. `environment`: (optional) The [Environment](https://docs.sentry.io/product/sentry-basics/environments/) to pass to sentry
1. `map_style_url`: Map tile server style URL for location sharing. e.g.
'https://api.maptiler.com/maps/streets/style.json?key=YOUR_KEY_GOES_HERE'
This setting is ignored if your homeserver provides
`/.well-known/matrix/client` in its well-known location, and the JSON file
at that location has a key `m.tile_server` (or the unstable version
`org.matrix.msc3488.tile_server`). In this case, the configuration found in
the well-known location is used instead.
1. `analyticsOwner`: The entity that analytics data is being sent to. Used in copy
when explaining to the user where data is being sent. If not set, defaults to `brand`.
1. `defaultDeviceDisplayName`: The default device display name to use for new logins
and registrations. If not set then a calculated version will be used.
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
@@ -226,3 +266,4 @@ Currently, the following UI feature flags are supported:
user.
* `UIFeature.roomHistorySettings` - Whether or not the room history settings are shown to the user.
This should only be used if the room history visibility options are managed by the server.
* `UIFeature.TimelineEnableRelativeDates` - Display relative date separators (eg: 'Today', 'Yesterday') in the timeline for recent messages. When false day dates will be used.

View File

@@ -4,10 +4,10 @@ Element uses [Jitsi](https://jitsi.org/) for conference calls, which provides op
self-hosting your own server and supports most major platforms.
1:1 calls, or calls between you and one other person, do not use Jitsi. Instead, those
calls work directly between clients or via TURN servers configured on the respective
calls work directly between clients or via TURN servers configured on the respective
homeservers.
There's a number of ways to start a Jitsi call: the easiest way is to click on the
There's a number of ways to start a Jitsi call: the easiest way is to click on the
voice or video buttons near the message composer in a room with more than 2 people. This
will add a Jitsi widget which allows anyone in the room to join.
@@ -16,6 +16,10 @@ provide their own approaches for adding Jitsi widgets.
## Configuring Element to use your self-hosted Jitsi server
You can host your own Jitsi server to use with Element. It's usually advisable to use a recent
version of Jitsi. In particular, versions older than around 6826 will cause problems with
Element 1.9.10 or newer.
Element will use the Jitsi server that is embedded in the widget, even if it is not the
one you configured. This is because conference calls must be held on a single Jitsi
server and cannot be split over multiple servers.
@@ -30,17 +34,17 @@ to your [config](./config.md) the following:
}
```
The default is `jitsi.riot.im` (a free service offered by Element), and the demo site for
Jitsi uses `meet.jit.si` (also free).
Element's default is `meet.element.io` (a free service offered by Element). `meet.jit.si`
is an instance hosted by Jitsi themselves and is also free to use.
Once you've applied the config change, refresh Element and press the call button. This
should start a new conference on your Jitsi server.
should start a new conference on your Jitsi server.
**Note**: The widget URL will point to a `jitsi.html` page hosted by Element. The Jitsi
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 element-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
{
@@ -55,11 +59,11 @@ default, and you are using element-web 1.6 or newer, set the following on your h
Element Android (1.0.5+) supports custom Jitsi domains, similar to Element Web above.
1:1 calls, or calls between you and one other person, do not use Jitsi. Instead, those
calls work directly between clients or via TURN servers configured on the respective
calls work directly between clients or via TURN servers configured on the respective
homeservers.
For rooms with more than 2 joined members, when creating a Jitsi conference via call/video buttons of the toolbar (not via integration manager), Element Android will create a widget using the [wrapper](https://github.com/vector-im/element-web/blob/develop/docs/jitsi-dev.md) hosted on `app.element.io`.
The domain used is the one specified by the `/.well-known/matrix/client` endpoint, and if not present it uses the fallback defined in `config.xml` (jitsi.riot.im)
The domain used is the one specified by the `/.well-known/matrix/client` endpoint, and if not present it uses the fallback defined in `config.json` (meet.element.io)
For active Jitsi widgets in the room, a native Jitsi widget UI is created and points to the instance specified in the `domain` key of the widget content data.

View File

@@ -84,7 +84,7 @@ Then you can deploy it to your cluster with something like `kubectl apply -f my-
"breadcrumbs": true
},
"jitsi": {
"preferredDomain": "jitsi.riot.im"
"preferredDomain": "meet.element.io"
}
}

View File

@@ -21,6 +21,19 @@ Enables rendering of LaTeX maths in messages using [KaTeX](https://katex.org/).
Allows you to pin messages in the room. To pin a message, use the 3 dots to the right of the message
and select "Pin".
## Jump to date (`feature_jump_to_date`)
Note: This labs feature is only visible when your homeserver has MSC3030 enabled
(in Synapse, add `experimental_features` -> `msc3030_enabled` to your
`homeserver.yaml`) which means `GET /_matrix/client/versions` responds with
`org.matrix.msc3030` under the `unstable_features` key.
Adds a dropdown menu to the date separator headers in the timeline which allows
you to jump to last week, last month, the beginning of the room, or choose a
date from the calendar.
Also adds the `/jumptodate 2022-01-31` slash command.
## Custom status (`feature_custom_status`)
An experimental approach for supporting custom status messages across DMs. To set a status, click on
@@ -126,10 +139,36 @@ and notification noises are suppressed. Not perfect, but can help reduce noise.
Enables sending hidden read receipts as per [MSC2285](https://github.com/matrix-org/matrix-doc/pull/2285)
## New layout switcher (with message bubbles) (`feature_new_layout_switcher`)
## Breadcrumbs v2 (`feature_breadcrumbs_v2`)
Adds a "Message layout" section under `Settings -> Appearance`, where the user can select their preferred message layout (e.g. IRC or Modern). Additionally, adds a new "Message bubbles" layout.
Instead of showing the horizontal list of breadcrumbs under the filter field, the new UX is an interactive context menu
triggered by the button to the right of the filter field.
## Pseudonymous Analytics opt-in
## Spotlight search (`feature_spotlight`) [In Development]
Opts in to collection of pseudonymous analytics data via Posthog. See https://github.com/matrix-org/matrix-react-sdk/pull/6495
Switches to a new room search experience.
## Extensible events rendering (`feature_extensible_events`) [In Development]
*Intended for developer use only at the moment.*
Extensible Events are a [new event format](https://github.com/matrix-org/matrix-doc/pull/1767) which
supports graceful fallback in unknown event types. Instead of rendering nothing or a blank space, events
can define a series of other events which represent the event's information but in different ways. The
base of these fallbacks being text.
Turning this flag on indicates that, when possible, the extensible events structure should be parsed on
supported event types. This should lead to zero perceptual change in the timeline except in cases where
the sender is using unknown/unrecognised event types.
Sending events with extensible events structure is always enabled - this should not affect any downstream
client.
## Right panel stays open (`feature_right_panel_default_open`)
This is an experimental default open right panel mode as a quick fix for those
who prefer to have the right panel open consistently across rooms.
If no right panel state is known for the room or it was closed on the last room
visit, it will default to the room member list. Otherwise, the saved card last
used in that room is shown.

View File

@@ -12,6 +12,7 @@
],
"hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web",
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
"uisi_autorageshake_app": "element-auto-uisi",
"showLabsSettings": false,
"piwik": {
"url": "https://piwik.riot.im/",
@@ -48,5 +49,9 @@
"privacyPolicyUrl": "https://element.io/privacy",
"termsOfServiceUrl": "https://element.io/terms-of-service",
"url": "https://ems.element.io/element-home/in-app-loader"
},
"posthog": {
"projectApiKey": "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
"apiHost": "https://posthog.hss.element.io"
}
}

View File

@@ -12,6 +12,7 @@
],
"hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web",
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
"uisi_autorageshake_app": "element-auto-uisi",
"showLabsSettings": true,
"piwik": {
"url": "https://piwik.riot.im/",
@@ -56,5 +57,9 @@
"posthog": {
"projectApiKey": "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
"apiHost": "https://posthog.hss.element.io"
}
},
"features": {
"feature_spotlight": true
},
"map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx"
}

View File

@@ -6,11 +6,20 @@ server {
root /usr/share/nginx/html;
index index.html;
# Set no-cache for the index.html only so that browsers always check for a new copy of Element Web.
# Set no-cache for the version, config and index.html
# so that browsers always check for a new copy of Element Web.
# NB http://your-domain/ and http://your-domain/? are also covered by this
location = /index.html {
add_header Cache-Control "no-cache";
}
location = /version {
add_header Cache-Control "no-cache";
}
# covers config.json and config.hostname.json requests as it is prefix.
location /config {
add_header Cache-Control "no-cache";
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;

View File

@@ -1,6 +1,6 @@
{
"name": "element-web",
"version": "1.9.2",
"version": "1.10.2",
"description": "A feature-rich client for Matrix.org",
"author": "New Vector Ltd.",
"repository": {
@@ -46,7 +46,7 @@
"start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"",
"start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js --https\"",
"start:res": "yarn build:jitsi && node scripts/copy-res.js -w",
"start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development --disable-host-check --hot",
"start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --mode development --disable-host-check --hot",
"lint": "yarn lint:types && yarn lint:js && yarn lint:style",
"lint:js": "eslint --max-warnings 0 src",
"lint:js-fix": "eslint --fix src",
@@ -55,15 +55,14 @@
"test": "jest"
},
"dependencies": {
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.3.tgz",
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz",
"browser-request": "^0.3.3",
"gfm.css": "^1.1.2",
"highlight.js": "^10.5.0",
"jsrsasign": "^10.2.0",
"katex": "^0.12.0",
"matrix-js-sdk": "14.0.1",
"matrix-react-sdk": "3.32.1",
"matrix-widget-api": "^0.1.0-beta.16",
"matrix-js-sdk": "15.5.1",
"matrix-react-sdk": "3.40.0",
"matrix-widget-api": "^0.1.0-beta.18",
"prop-types": "^15.7.2",
"react": "17.0.2",
"react-dom": "17.0.2",
@@ -90,6 +89,7 @@
"@babel/runtime": "^7.12.5",
"@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
"@principalstudio/html-webpack-inject-preload": "^1.2.7",
"@sentry/webpack-plugin": "^1.18.1",
"@types/flux": "^3.1.9",
"@types/jest": "^27.0.2",
"@types/modernizr": "^3.5.3",
@@ -97,9 +97,9 @@
"@types/react": "17.0.14",
"@types/react-dom": "17.0.9",
"@types/sanitize-html": "^2.3.1",
"@typescript-eslint/eslint-plugin": "^4.17.0",
"@typescript-eslint/parser": "^4.17.0",
"allchange": "^1.0.3",
"@typescript-eslint/eslint-plugin": "^5.6.0",
"@typescript-eslint/parser": "^5.6.0",
"allchange": "^1.0.6",
"autoprefixer": "^9.8.6",
"babel-jest": "^26.6.3",
"babel-loader": "^8.2.2",
@@ -110,7 +110,8 @@
"dotenv": "^10.0.0",
"eslint": "7.18.0",
"eslint-config-google": "^0.14.0",
"eslint-plugin-matrix-org": "github:matrix-org/eslint-plugin-matrix-org#2306b3d4da4eba908b256014b979f1d3d43d2945",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-matrix-org": "^0.4.0",
"eslint-plugin-react": "^7.22.0",
"eslint-plugin-react-hooks": "^4.2.0",
"extract-text-webpack-plugin": "^4.0.0-beta.0",
@@ -125,12 +126,12 @@
"loader-utils": "^1.4.0",
"matrix-mock-request": "^1.2.3",
"matrix-react-test-utils": "^0.2.3",
"matrix-web-i18n": "github:matrix-org/matrix-web-i18n",
"matrix-web-i18n": "^1.2.0",
"mini-css-extract-plugin": "^0.12.0",
"minimist": "^1.2.5",
"mkdirp": "^1.0.4",
"modernizr": "^3.11.7",
"node-fetch": "^2.6.1",
"node-fetch": "^2.6.7",
"optimize-css-assets-webpack-plugin": "^5.0.4",
"postcss-easings": "^2.0.0",
"postcss-extend": "^1.0.5",
@@ -154,7 +155,7 @@
"stylelint-config-standard": "^20.0.0",
"stylelint-scss": "^3.18.0",
"terser-webpack-plugin": "^2.3.8",
"typescript": "4.3.5",
"typescript": "^4.5.3",
"webpack": "^4.46.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.2",

View File

@@ -12,20 +12,20 @@ const ProxyAgent = require("simple-proxy-agent");
console.log("Making webapp directory");
mkdirp.sync("webapp");
// curl -s https://jitsi.riot.im/libs/external_api.min.js > ./webapp/jitsi_external_api.min.js
// curl -s https://meet.element.io/libs/external_api.min.js > ./webapp/jitsi_external_api.min.js
console.log("Downloading Jitsi script");
const fname = path.join("webapp", "jitsi_external_api.min.js");
const options = {};
if (process.env.HTTPS_PROXY) {
options.agent = new ProxyAgent(process.env.HTTPS_PROXY, {tunnel: true});
options.agent = new ProxyAgent(process.env.HTTPS_PROXY, { tunnel: true });
}
fetch("https://jitsi.riot.im/libs/external_api.min.js", options).then(res => {
const stream = fs.createWriteStream(fname);
return new Promise((resolve, reject) => {
res.body.pipe(stream);
res.body.on('error', err => reject(err));
res.body.on('finish', () => resolve());
});
fetch("https://meet.element.io/libs/external_api.min.js", options).then(res => {
const stream = fs.createWriteStream(fname);
return new Promise((resolve, reject) => {
res.body.pipe(stream);
res.body.on('error', err => reject(err));
res.body.on('finish', () => resolve());
});
}).then(() => console.log('Done with Jitsi download'));

View File

@@ -1,17 +1,11 @@
#!/bin/bash
# Runs package.sh setting the version to git hashes of the element-web,
# react-sdk & js-sdk checkouts, for the case where these dependencies
# are git checkouts.
# Runs package.sh, passing DIST_VERSION determined by git
set -ex
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)
JSSDK_SHA=$(cd node_modules/matrix-js-sdk; git rev-parse --short=12 HEAD)
DIST_VERSION=`$(dirname $0)/get-version-from-git.sh`
VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop
CI_PACKAGE=true DIST_VERSION=$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA scripts/package.sh
CI_PACKAGE=true DIST_VERSION=$DIST_VERSION scripts/package.sh

View File

@@ -29,6 +29,7 @@ const INCLUDE_LANGS = [
{'value': 'he', 'label': 'עברית'},
{'value': 'hi', 'label': 'हिन्दी'},
{'value': 'hu', 'label': 'Magyar'},
{'value': 'id', 'label': 'Bahasa Indonesia'},
{'value': 'is', 'label': 'íslenska'},
{'value': 'it', 'label': 'Italiano'},
{'value': 'ja', 'label': '日本語'},
@@ -52,6 +53,7 @@ const INCLUDE_LANGS = [
{'value': 'th', 'label': 'ไทย'},
{'value': 'tr', 'label': 'Türkçe'},
{'value': 'uk', 'label': 'українська мова'},
{'value': 'vi', 'label': 'Tiếng Việt'},
{'value': 'vls', 'label': 'West-Vlaams'},
{'value': 'zh_Hans', 'label': '简体中文'}, // simplified chinese
{'value': 'zh_Hant', 'label': '繁體中文'}, // traditional chinese

View File

@@ -13,10 +13,9 @@ DIST_VERSION=$TAG
# for an appropriately tagged branch as well (heads/v1.2.3).
if [[ $BRANCH != HEAD && ! $BRANCH =~ heads/v.+ ]]
then
REACT_SHA=$(cd node_modules/matrix-react-sdk; git rev-parse --short=12 HEAD)
JSSDK_SHA=$(cd node_modules/matrix-js-sdk; git rev-parse --short=12 HEAD)
VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop
DIST_VERSION=$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA
DIST_VERSION=`$(dirname $0)/get-version-from-git.sh`
fi
DIST_VERSION=`$(dirname $0)/normalize-version.sh ${DIST_VERSION}`
VERSION=$DIST_VERSION yarn build
echo $DIST_VERSION > /src/webapp/version

View File

@@ -25,7 +25,8 @@ function clone() {
if [ -n "$branch" ]
then
echo "Trying to use $org/$repo#$branch"
git clone git://github.com/$org/$repo.git $repo --branch $branch \
# Disable auth prompts: https://serverfault.com/a/665959
GIT_TERMINAL_PROMPT=0 git clone https://github.com/$org/$repo.git $repo --branch $branch \
"${GIT_CLONE_ARGS[@]}"
return $?
fi

10
scripts/get-version-from-git.sh Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/bash
# Echoes a version based on the git hashes of the element-web, react-sdk & js-sdk checkouts, for the case where
# these dependencies are git checkouts.
# 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)
JSSDK_SHA=$(cd node_modules/matrix-js-sdk; git rev-parse --short=12 HEAD)
VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop
echo $VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA

8
scripts/normalize-version.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
# If $1 looks like v1.2.3 or v1.2.3-foo, strip the leading v, then print it to stdout
if [[ $1 =~ ^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+(-.+)?$ ]]; then
echo ${1:1}
else
echo $1
fi

View File

@@ -9,7 +9,7 @@ else
fi
yarn clean
yarn build
VERSION=$version yarn build
# include the sample config in the tarball. Arguably this should be done by
# `yarn build`, but it's just too painful.
@@ -21,12 +21,7 @@ cp -r webapp element-$version
# Just in case you have a local config, remove it before packaging
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} > element-$version/version
else
echo ${version} > element-$version/version
fi
$(dirname $0)/normalize-version.sh ${version} > element-$version/version
tar chvzf dist/element-$version.tar.gz element-$version
rm -r element-$version

View File

@@ -16,6 +16,7 @@ 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";
import type { logger } from "matrix-js-sdk/src/logger";
type ElectronChannel =
"app_onAction" |
@@ -31,11 +32,12 @@ type ElectronChannel =
"setBadgeCount" |
"update-downloaded" |
"userDownloadCompleted" |
"userDownloadOpen";
"userDownloadAction";
declare global {
interface Window {
mxSendRageshake: (text: string, withLogs?: boolean) => void;
matrixLogger: typeof logger;
matrixChat: ReturnType<Renderer>;
// electron-only

View File

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

View File

@@ -34,5 +34,7 @@
"%(brand)s Desktop (%(platformName)s)": "%(brand)s pro desktopový počítač (%(platformName)s)",
"Missing indexeddb worker script!": "Nenačetl se skript spravující indexdb!",
"Use %(brand)s on mobile": "Používání %(brand)s v mobilních zařízeních",
"Switch to space by number": "Přepnout na prostor podle čísla"
"Switch to space by number": "Přepnout na prostor podle čísla",
"Next recently visited room or community": "Další nedávno navštívená místnost nebo komunita",
"Previous recently visited room or community": "Nedávno navštívená místnost nebo komunita"
}

View File

@@ -32,5 +32,9 @@
"%(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."
"%(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.",
"Previous recently visited room or community": "Tidligere besøgt rum eller fællesskab",
"Switch to space by number": "Skift til space med nummer",
"Use %(brand)s on mobile": "Brug %(brand)s på mobil",
"Next recently visited room or community": "Næste tidligere besøgt rum eller fællesskab"
}

View File

@@ -34,5 +34,7 @@
"Your browser can't run %(brand)s": "Dein Browser kann %(brand)s nicht ausführen",
"Powered by Matrix": "Betrieben mit Matrix",
"Use %(brand)s on mobile": "Verwende %(brand)s am Handy",
"Switch to space by number": "Zum n-ten Space wechseln"
"Switch to space by number": "Zum n-ten Space wechseln",
"Next recently visited room or community": "Nächster kürzlich besuchter Raum",
"Previous recently visited room or community": "Vorheriger kürzlich besuchter Raum"
}

View File

@@ -32,5 +32,7 @@
"Failed to start": "Αποτυχία έναρξης",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
"Missing indexeddb worker script!": "Απουσία indexeddb worker script!"
"Missing indexeddb worker script!": "Απουσία indexeddb worker script!",
"Use %(brand)s on mobile": "Χρήση %(brand)s σε κινητό",
"Switch to space by number": "Εναλλαγή σε space με αριθμό"
}

View File

@@ -12,7 +12,8 @@
"Dismiss": "Dismiss",
"Switch to space by number": "Switch to space by number",
"Open user settings": "Open user settings",
"Previous/next recently visited room or community": "Previous/next recently visited room or community",
"Previous recently visited room or community": "Previous recently visited room or community",
"Next recently visited room or community": "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",
"Unknown device": "Unknown device",

View File

@@ -34,5 +34,7 @@
"%(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",
"Use %(brand)s on mobile": "Kasuta rakendust %(brand)s nutiseadmes",
"Switch to space by number": "Vaata kogukonnakeskust tema numbri alusel"
"Switch to space by number": "Vaata kogukonnakeskust tema numbri alusel",
"Next recently visited room or community": "Järgmine hiljuti külastatud jututuba või kogukond",
"Previous recently visited room or community": "Eelmine hiljuti külastatud jututuba või kogukond"
}

View File

@@ -2,7 +2,7 @@
"Dismiss": "Hylkää",
"Unknown device": "Tuntematon laite",
"Welcome to Element": "Tervetuloa Element-sovellukseen",
"You need to be using HTTPS to place a screen-sharing call.": "Sinun täytyy käyttää HTTPS-yhteyttä, jotta voit jakaa ruudun puhelussa.",
"You need to be using HTTPS to place a screen-sharing call.": "Sinun täytyy käyttää HTTPS-yhteyttä, jotta voit jakaa näytön puhelussa.",
"powered by Matrix": "moottorina Matrix",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Hajautettua ja salattua viestintää Matrix-teknologialla",
"Sign In": "Kirjaudu",
@@ -32,5 +32,9 @@
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element-asetuksesi sisältävät epäkelpoa JSONia. Korjaa ongelma ja lataa sivu uudelleen.",
"Powered by Matrix": "Moottorina Matrix",
"Your browser can't run %(brand)s": "%(brand)s ei toimi selaimessasi",
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s käyttää edistyneitä selaimen ominaisuuksia, joita nykyinen selaimesi ei tue."
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s käyttää edistyneitä selaimen ominaisuuksia, joita nykyinen selaimesi ei tue.",
"Use %(brand)s on mobile": "Käytä %(brand)sia mobiilisti",
"Switch to space by number": "Vaihda avaruuteen käyttäen numeroa",
"Next recently visited room or community": "Seuraava aiemmin vierailtu huone tai yhteisö",
"Previous recently visited room or community": "Aiemmin viimeaikoina vierailtu huone tai yhteisö"
}

View File

@@ -34,5 +34,7 @@
"%(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",
"Use %(brand)s on mobile": "Utiliser %(brand)s sur téléphone",
"Switch to space by number": "Afficher un espace par son numéro"
"Switch to space by number": "Afficher un espace par son numéro",
"Next recently visited room or community": "Prochain salon ou communauté récemment visité",
"Previous recently visited room or community": "Salon ou communauté précédemment visité"
}

View File

@@ -1,36 +1,36 @@
{
"Sign In": "Ynskriuwe",
"Failed to start": "Iepenjen mislearre",
"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.": "Jo kinne fierder gean mei jo eigen browser, mar guon funksjes kinne net wurkje en uterlik kin de applikaasje der ôfwikend út sjen.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Graach <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, of<safariLink>Safari</safariLink> ynstallearre foar de beste ûnderfining.",
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s brûkt avansearre browser funksjes dy net stipe wurde troch de browser dy jo no brûke.",
"Powered by Matrix": "Fersoarge troch Matrix",
"Sign In": "Oanmelde",
"Failed to start": "Opstarten mislearre",
"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.": "Jo kinne fierder gean mei jo eigen browser, mar guon funksjes kinne net wurkje en uterlik kin de applikaasje der ôfwikend útsjen.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Graach <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, of<safariLink>Safari</safariLink> ynstallearje foar de beste ûnderfining.",
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s brûkt avansearre browserfunksjes dyt net stipe wurde troch de browser dyt jo no brûke.",
"Powered by Matrix": "Mooglik makke troch Matrix",
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
"Previous/next recently visited room or community": "Foarige/Folgjende resintlik besochte keamer as mienskip",
"Switch to space by number": "Wikselje fan romte mei nûmer",
"Unexpected error preparing the app. See console for details.": "Ûnferwachte flater by it klearmeitsjen fan de applikaasje. Sjoch yn'e konsole foar details.",
"Unexpected error preparing the app. See console for details.": "Unferwachte flater by it klearmeitsjen fan de applikaasje. Sjoch yn de console foar details.",
"The message from the parser is: %(message)s": "It berjocht fan de ferwurker is: %(message)s",
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Jo Element konfiguraasje hat ûnjildige JSON. Nei dat jo dit oplost ha kin dizze side ferfarske wurde.",
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Jo Element-konfiguraasje hat ûnjildige JSON. Nei dat jo dit oplost ha, kin dizze side ferfarske wurde.",
"Use %(brand)s on mobile": "Brûk %(brand)s op mobyl",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Desintralisearre, fersifere chat &amp; gearwurking fersoarge troch [matrix]",
"You need to be using HTTPS to place a screen-sharing call.": "Jo moatte HTTPS brûke om te skiljen en jo skermynhâld te dielen.",
"You need to be using HTTPS to place a screen-sharing call.": "Oproppen mei skerm dielen fereasket HTTPS.",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"Go to your browser to complete Sign In": "Gean nei jo browser om it ynskriuwen ôf te rûnen",
"Download Completed": "Klear mei Delheljen",
"Unable to load config file: please refresh the page to try again.": "Kin konfiguraasje bestân net lade: ferfarskje de side en probearje it noch ris.",
"Go to your browser to complete Sign In": "Gean nei jo browser om it ynskriuwen te foltôgjen",
"Download Completed": "Download foltôge",
"Unable to load config file: please refresh the page to try again.": "Kin konfiguraasjebestân net lade: ferfarskje de side en probearje it nochris.",
"Open user settings": "Brûkersynstellingen iepenje",
"Dismiss": "Negearre",
"Dismiss": "Slute",
"Explore rooms": "Keamers ûntdekke",
"Create Account": "Account Meitsje",
"Create Account": "Registrearje",
"Welcome to Element": "Wolkom by Element",
"I understand the risks and wish to continue": "Ik begryp de risiko's en wol graach fierder gean",
"Go to element.io": "Gean nei element.io",
"Your browser can't run %(brand)s": "Jo browser kin %(brand)s net útfiere",
"Unsupported browser": "Net stipe browser",
"Unknown device": "Ûnbekend apparaat",
"Unknown device": "Unbekend apparaat",
"Open": "Iepenje",
"Invalid JSON": "Ûnjildiche JSON",
"Invalid JSON": "Unjildige JSON",
"Your Element is misconfigured": "Jo Element is net goed konfigurearre",
"Invalid configuration: no default server specified.": "Ûnjildiche konfiguraasje: gjin standert tsjinner selektearre.",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ûnjildige konfiguraasje: kin allinnich kieze út default_server_config, default_server_name, as default_hs_url."
"Invalid configuration: no default server specified.": "Unjildiche konfiguraasje: gjin standertserver selektearre.",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Unjildige konfiguraasje: kin allinnich kieze út default_server_config, default_server_name, as default_hs_url."
}

View File

@@ -34,5 +34,7 @@
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s utiliza características avanzadas do navegador que non están dispoñibles no teu navegador.",
"Powered by Matrix": "Funciona grazas a Matrix",
"Use %(brand)s on mobile": "Utiliza %(brand)s no móbil",
"Switch to space by number": "Cambiar a espazo polo número"
"Switch to space by number": "Cambiar a espazo polo número",
"Next recently visited room or community": "Seguinte sala ou comunidade visitada recentemente",
"Previous recently visited room or community": "Sala ou Comunidade visitada recentemente"
}

View File

@@ -12,7 +12,7 @@
"Go to your browser to complete Sign In": "עבור לדפדפן להמשך ההתחברות",
"Explore rooms": "גלה חדרים",
"Create Account": "יצירת חשבון",
"Sign In": "כניסה",
"Sign In": "התחברות",
"Previous/next recently visited room or community": "הבא\\קודם חדרים וקהילות שביקרתם לאחרונה",
"Open": "פתח",
"Download Completed": "ההורדה הושלמה",
@@ -33,5 +33,6 @@
"%(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 חסר!",
"Switch to space by number": "עבור אל 'Space' על פי מספרו"
"Switch to space by number": "עבור 'למרחב' על פי המספר שלו",
"Use %(brand)s on mobile": "השתמש ב-%(brand)s במכשיר הנייד"
}

View File

@@ -34,5 +34,7 @@
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s speciális böngészőfunkciókat használ, amelyeket a jelenlegi böngészője nem támogat.",
"Powered by Matrix": "A gépházban: Matrix",
"Use %(brand)s on mobile": "Mobilon használd ezt: %(brand)s",
"Switch to space by number": "Tér váltás számmal"
"Switch to space by number": "Tér váltás számmal",
"Next recently visited room or community": "Következő nemrég meglátogatott szoba vagy közösség",
"Previous recently visited room or community": "Előző nemrég meglátogatott szoba vagy közösség"
}

View File

@@ -1,38 +1,40 @@
{
"Dismiss": "Abaikan",
"powered by Matrix": "didukung oleh Matrix",
"Unknown device": "Perangkat tidak diketahui",
"You need to be using HTTPS to place a screen-sharing call.": "Anda perlu menggunakan HTTPS untuk melakukan panggilan berbagi-layar.",
"Unknown device": "Perangkat tidak dikenal",
"You need to be using HTTPS to place a screen-sharing call.": "Anda perlu menggunakan HTTPS untuk melakukan panggilan berbagi layar.",
"Welcome to Element": "Selamat datang di Element",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Obrolan terenkripsi, terdesentralisasi &amp; kolaborasi didukung oleh [matrix]",
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfigurasi Element Anda mengandung JSON yang tidak valid. Mohon perbaiki masalahnya dan muat ulang halaman nya.",
"Invalid configuration: no default server specified.": "Konfigurasi tidak valid: server default belum ditentukan.",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Obrolan &amp; kolaborasi terdecentralisasi dan terenkripsi, diberdayakan oleh [matrix]",
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfigurasi Element Anda berisi JSON yang tidak valid. Mohon perbaiki masalahnya dan muat ulang halamannya.",
"Invalid configuration: no default server specified.": "Konfigurasi tidak valid: server bawaan belum ditentukan.",
"Missing indexeddb worker script!": "Tidak ada script worker indexeddb!",
"Explore rooms": "Jelajahi ruang",
"Explore rooms": "Jelajahi ruangan",
"Create Account": "Buat Akun",
"Switch to space by number": "Beralih ke ruang dengan nomor",
"Go to your browser to complete Sign In": "Buka browser Anda untuk menyelesaikan Masuk",
"Switch to space by number": "Beralih ke space bedasarkan angka",
"Go to your browser to complete Sign In": "Buka browser Anda untuk menyelesaikan Sign In",
"Sign In": "Masuk",
"Failed to start": "Gagal untuk memulai",
"Go to element.io": "Buka element.io",
"I understand the risks and wish to continue": "Saya memahami risikonya dan ingin melanjutkan",
"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.": "Anda dapat lanjut menggunakan browser Anda saat ini, tetapi beberapa atau semua fitur mungkin tidak berfungsi dan tampilan serta nuansa aplikasi mungkin salah.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Mohon instal <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, atau <safariLink>Safari</safariLink> untuk pengalaman terbaik.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Mohon instal <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, atau <safariLink>Safari</safariLink> untuk pengalaman yang terbaik.",
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s menggunakan fitur browser lanjutan yang tidak didukung oleh browser Anda saat ini.",
"Your browser can't run %(brand)s": "Browser Anda tidak bisa menjalankan %(brand)s",
"Your browser can't run %(brand)s": "Browser Anda tidak dapat menjalankan %(brand)s",
"Unsupported browser": "Browser tidak didukung",
"Use %(brand)s on mobile": "Gunakan %(brand)s di ponsel",
"Powered by Matrix": "Didukung oleh Matrix",
"Powered by Matrix": "Diberdayakan oleh Matrix",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
"Previous/next recently visited room or community": "Ruangan atau komunitas yang baru saja dikunjungi sebelum/berikutnya",
"Previous/next recently visited room or community": "Ruangan atau komunitas yang baru saja dikunjungi sebelumnya/berikutnya",
"Open user settings": "Buka pengaturan pengguna",
"Open": "Buka",
"Download Completed": "Unduh Selesai",
"Download Completed": "Unduhan Selesai",
"Unexpected error preparing the app. See console for details.": "Kesalahan tak terduga saat menyiapkan aplikasi. Lihat konsol untuk detail.",
"Unable to load config file: please refresh the page to try again.": "Tidak bisa muat file konfigurasi: mohon segarkan halaman untuk mencoba lagi.",
"Unable to load config file: please refresh the page to try again.": "Tidak dapat memuat file konfigurasi: mohon muat ulang halaman ini untuk mencoba lagi.",
"Invalid JSON": "JSON tidak valid",
"The message from the parser is: %(message)s": "Pesan dari pengurai adalah: %(message)s",
"Your Element is misconfigured": "Element Anda salah dikonfigurasi",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Konfigurasi tidak valid: hanya bisa menentukan satu dari default_server_config, default_server_name, atau default_hs_url."
"Your Element is misconfigured": "Anda mengatur Element dengan salah",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Konfigurasi tidak valid: hanya bisa menentukan satu dari default_server_config, default_server_name, atau default_hs_url.",
"Next recently visited room or community": "Ruangan atau komunitas berikutnya yang baru saja dilihat",
"Previous recently visited room or community": "Ruangan atau komunitas sebelumnya yang baru saja dilihat"
}

View File

@@ -34,5 +34,7 @@
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funzionalità avanzate del browser che non sono supportate dal tuo browser attuale.",
"Powered by Matrix": "Offerto da Matrix",
"Use %(brand)s on mobile": "Usa %(brand)s su mobile",
"Switch to space by number": "Passa allo spazio per numero"
"Switch to space by number": "Passa allo spazio per numero",
"Next recently visited room or community": "Prossima stanza o comunità visitata di recente",
"Previous recently visited room or community": "Precedente stanza o comunità visitata di recente"
}

View File

@@ -32,5 +32,7 @@
"Open": "Ldi",
"Your browser can't run %(brand)s": "Iminig-inek·inem ur isselkan ara %(brand)s",
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s isseqdac timahilin n yiminig leqqayen ur yessefrak ara yiminig-ik·im amiran.",
"Powered by Matrix": "Iteddu s lmendad n Matrix"
"Powered by Matrix": "Iteddu s lmendad n Matrix",
"Use %(brand)s on mobile": "Seqdec %(brand)s deg tiliɣri",
"Switch to space by number": "Ddu ɣer space s uṭṭun"
}

View File

@@ -4,10 +4,10 @@
"Unknown device": "Onbekend apparaat",
"You need to be using HTTPS to place a screen-sharing call.": "Oproepen met schermdelen vergen HTTPS.",
"Welcome to Element": "Welkom bij Element",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Gedecentraliseerd en versleuteld chatten &amp; samenwerken dankzij [matrix]",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Decentrale en versleutelde chat &amp; samenwerken dankzij [matrix]",
"Sign In": "Inloggen",
"Create Account": "Registreren",
"Explore rooms": "Kamers ontdekken",
"Explore rooms": "Kamers verkennen",
"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.",
@@ -34,5 +34,7 @@
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s gebruikt geavanceerde functies die niet ondersteund worden in uw huidige browser.",
"Powered by Matrix": "Mogelijk gemaakt door Matrix",
"Use %(brand)s on mobile": "Gebruik %(brand)s op uw mobiel",
"Switch to space by number": "Wissel naar ruimte met nummer"
"Switch to space by number": "Wissel naar Space met nummer",
"Next recently visited room or community": "Volgende recent bezochte kamer of community",
"Previous recently visited room or community": "Vorige recent bezochte kamer of community"
}

View File

@@ -12,11 +12,26 @@
"Invalid JSON": "Ugyldig JSON",
"Unexpected error preparing the app. See console for details.": "Uventa feil under lasting av programmet. Sjå konsollen for detaljar.",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ugyldig oppsett: berre muleg å berre spesifiere ein av default_server_config, default_server_name eller default_hs_url.",
"Invalid configuration: no default server specified.": "Ugyldig oppsett: ingen \"default server\" er spesifisert.",
"Invalid configuration: no default server specified.": "Ugyldig oppsett: Ingen standardserver er spesifisert.",
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Oppsettet for din Element inneheld ugyldig JSON. Sjekk konfigurasjonsfila, deretter last om sida.",
"Unable to load config file: please refresh the page to try again.": "Fekk ikkje til å lasta konfigurasjonsfila: last inn sida for å prøva om att.",
"Go to your browser to complete Sign In": "Opna nettlesaren din for å fullføra innlogginga",
"Unsupported browser": "Nettlesaren er ikkje støtta",
"Your browser can't run %(brand)s": "Din nettlesar kan ikkje køyra %(brand)s",
"Go to element.io": "Gå til element.io"
"Go to element.io": "Gå til element.io",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)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 fortsetja å bruka gjeldande nettlesar, men nokre eller alle funksjonane fungerer kanskje ikkje, og utsjånaden og kjensla av applikasjonen kan vera feil.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Installer <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, eller <safariLink>Safari</safariLink> for den beste opplevinga.",
"I understand the risks and wish to continue": "Eg forstår risikoen og ynskjer å fortsetja",
"Previous/next recently visited room or community": "Føregåande/neste nyleg besøkte rom eller samfunn",
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s brukar avanserte nettlesarfunksjonar som ikkje er støtta av den gjeldande nettlesaren din.",
"Use %(brand)s on mobile": "Bruk %(brand)s på mobil",
"Powered by Matrix": "Driven av Matrix",
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Skrivebord (%(platformName)s)",
"Your Element is misconfigured": "Element er feilkonfigurert",
"Failed to start": "Klarte ikkje å starta",
"Open user settings": "Opna brukarinnstillingar",
"Switch to space by number": "Byt til plass etter nummer",
"Open": "Opna",
"Download Completed": "Nedlasting Fullført"
}

View File

@@ -5,8 +5,8 @@
"You need to be using HTTPS to place a screen-sharing call.": "Musisz używać bezpiecznego protokołu HTTPS aby użyć połączenia współdzielenia ekranu.",
"Welcome to Element": "Witamy w Element",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Zdecentralizowany, szyfrowany czat &amp; współpraca oparta na [matrix]",
"Create Account": "Stwórz konto",
"Sign In": "Zaloguj",
"Create Account": "Utwórz konto",
"Sign In": "Zaloguj się",
"Explore rooms": "Przeglądaj pokoje",
"The message from the parser is: %(message)s": "Wiadomość od parsera to: %(message)s",
"Invalid JSON": "Błędny JSON",
@@ -29,9 +29,12 @@
"Download Completed": "Pobieranie Zakończone",
"Open": "Otwórz",
"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.",
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s używa zaawansowanych funkcji które nie są dostępne w obecnej 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",
"Powered by Matrix": "Zasilane przez Matrix",
"Use %(brand)s on mobile": "Użyj %(brand)s w telefonie"
"Use %(brand)s on mobile": "Użyj %(brand)s w telefonie",
"Switch to space by number": "Przełącz na przestrzeń według numeru",
"Next recently visited room or community": "Następne ostatnio odwiedzone pokoje i społeczności",
"Previous recently visited room or community": "Ostatnio odwiedzone pokoje i społeczności"
}

View File

@@ -27,5 +27,9 @@
"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"
"Open user settings": "Abrir definições do utilizador",
"Failed to start": "Erro ao iniciar",
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s utiliza funções avançadas que não são suportadas pelo teu atual browser.",
"Your browser can't run %(brand)s": "O teu browser não consegue executar %(brand)s",
"Use %(brand)s on mobile": "Usar %(brand)s no telemóvel"
}

View File

@@ -34,5 +34,7 @@
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa funcionalidade de browser avançada que não é suportada por seu browser atual.",
"Powered by Matrix": "Powered by Matrix",
"Use %(brand)s on mobile": "Usar %(brand)s em celular",
"Switch to space by number": "Trocar para espaço por número"
"Switch to space by number": "Trocar para espaço por número",
"Next recently visited room or community": "Próxima sala ou comunidade recentemente visitada",
"Previous recently visited room or community": "Anterior sala ou comunidade recentemente visitada"
}

View File

@@ -9,7 +9,7 @@
"Create Account": "Создать учётную запись",
"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: 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 JSON": "Нерабочий JSON",
@@ -34,5 +34,7 @@
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s использует расширенные возможности, которые не поддерживаются вашим браузером.",
"Powered by Matrix": "На технологии Matrix",
"Use %(brand)s on mobile": "Воспользуйтесь %(brand)s на мобильном телефоне",
"Switch to space by number": "Переключение на пространство по номеру"
"Switch to space by number": "Переключение на пространство по номеру",
"Next recently visited room or community": "Следующая недавно посещенная комната или сообщество",
"Previous recently visited room or community": "Предыдущая недавно посещенная комната или сообщество"
}

View File

@@ -4,7 +4,7 @@
"Dismiss": "Zamietnuť",
"powered by Matrix": "poháňa Matrix",
"Welcome to Element": "Víta vás Element",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráca na platforme [matrix]",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Decentralizované, šifrované konverzácie a spolupráca na platforme [matrix]",
"Sign In": "Prihlásiť sa",
"Create Account": "Vytvoriť účet",
"Explore rooms": "Preskúmať miestnosti",
@@ -32,5 +32,9 @@
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Vaša konfigurácia Elementu obsahuje nesprávny údaj JSON. Prosím, opravte chybu a obnovte stránku.",
"Your browser can't run %(brand)s": "Váš prehliadač nerozbehne %(brand)s",
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s používa pokročilé funkcie prehliadača, ktoré nie sú podporované vaším aktuálnym prehliadačom.",
"Powered by Matrix": "používa protokol Matrix"
"Powered by Matrix": "používa protokol Matrix",
"Use %(brand)s on mobile": "Používať %(brand)s pri mobilných zariadeniach",
"Switch to space by number": "Prepnúť do priestoru podľa čísla",
"Next recently visited room or community": "Ďalšia nedávno navštívená miestnosť alebo komunita",
"Previous recently visited room or community": "Predchádzajúca nedávno navštívená miestnosť alebo komunita"
}

View File

@@ -34,5 +34,7 @@
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s përdor veçori të thelluara të shfletuesit, të cilat shfletuesi juaj i tanishëm si mbulon.",
"Powered by Matrix": "Bazuar në Matrix",
"Use %(brand)s on mobile": "Përdor %(brand)s në celular",
"Switch to space by number": "Kalo te hapësira me numrin"
"Switch to space by number": "Kalo te hapësira me numrin",
"Next recently visited room or community": "Dhomë ose bashkësi e vizituar më parë pasuese",
"Previous recently visited room or community": "Dhomë ose bashkësi e vizituar më parë e mëparshme"
}

View File

@@ -34,5 +34,7 @@
"Your browser can't run %(brand)s": "Din webbläsare kan inte köra %(brand)s",
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s använder avancerade webbläsarfunktioner som inte stöds av din aktuella webbläsare.",
"Use %(brand)s on mobile": "Använd %(brand)s på mobilen",
"Switch to space by number": "Byt till utrymme med nummer"
"Switch to space by number": "Byt till utrymme med nummer",
"Previous recently visited room or community": "Tidigare nyligen besökta rum eller gemenskap",
"Next recently visited room or community": "Nästa nyligen besökta rum eller gemenskap"
}

View File

@@ -8,10 +8,10 @@
"Sign In": "Giriş Yap",
"Create Account": "Hesap Oluştur",
"Explore rooms": "Odaları keşfet",
"Invalid JSON": "JSON geçersiz",
"Invalid JSON": "Hatalı JSON",
"Unexpected error preparing the app. See console for details.": "Uygulama hazırlanırken beklenmeyen bir hata oldu. Detaylar için konsola bakın.",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Hatalı ayarlar: default_server_config, default_server_name ve default_hs_url ayarlarından en fazla biri girilebilir.",
"Invalid configuration: no default server specified.": "Geçersiz yapılandırma: varsayılan sunucu seçilmemiş.",
"Invalid configuration: no default server specified.": "Hatalı ayarlar: varsayılan sunucu belirlenmemiş.",
"The message from the parser is: %(message)s": "Ayrıştırıcıdan gelen mesaj: %(message)s",
"Go to your browser to complete Sign In": "Oturum açmayı tamamlamak için tarayıcınıza gidin",
"Open user settings": "Kullanıcı ayarlarını aç",
@@ -34,5 +34,6 @@
"Open": "Aç",
"Missing indexeddb worker script!": "Indexeddb worker kodu eksik!",
"Use %(brand)s on mobile": "Mobilde %(brand)s kullan",
"Switch to space by number": "Sayı ile belirtilen alana geç"
"Switch to space by number": "Sayı ile belirtilen alana geç",
"Previous recently visited room or community": "En son ziyaret edilen oda veya topluluk"
}

View File

@@ -18,7 +18,7 @@
"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": "Запуск не вдався",
"Failed to start": "Не вдалося запустити",
"Download Completed": "Завантаження завершено",
"Missing indexeddb worker script!": "Відсутній робочий сценарій IndexedDB!",
"Your Element is misconfigured": "Ваш Element налаштовано неправильно",
@@ -34,5 +34,7 @@
"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 використовує передові властивості, які ваш браузер не підтримує.",
"Use %(brand)s on mobile": "Користуйтеся %(brand)s на мобільному",
"Switch to space by number": "Перейдіть до простору за номером"
"Switch to space by number": "Перейдіть до простору за номером",
"Next recently visited room or community": "Наступна нещодавно відвідана кімната або спільнота",
"Previous recently visited room or community": "Попередня нещодавно відвідана кімната або спільнота"
}

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

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

View File

@@ -1,37 +1,38 @@
{
"Unknown device": "Thiết bị không được nhận biết",
"You need to be using HTTPS to place a screen-sharing call.": "Bạn phải sử dụng HTTPS để dùng chức năng chia sẻ màn hình.",
"Unknown device": "Thiết bị không xác định",
"You need to be using HTTPS to place a screen-sharing call.": "Bạn phải sử dụng mã hóa HTTPS để thực hiện chia sẻ màn hình khi gọi.",
"Dismiss": "Bỏ qua",
"powered by Matrix": "tài trợ bởi Matrix",
"Welcome to Element": "Chào mừng tới Element",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Chat phân tán, mã hóa &amp; giao tiếp được tài trợ bởi [matrix]",
"Unexpected error preparing the app. See console for details.": "Lỗi xảy ra trong lúc chuẩn bị app. Xem console log để biết chi tiết.",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Nhắn tin &amp; giao tiếp một cách bảo mật, phi tập trung dưới giao thức [matrix]",
"Unexpected error preparing the app. See console for details.": "Có lỗi xảy ra trong lúc thiết lập ứng dụng. Mở bảng điều khiển (console) để biết chi tiết.",
"The message from the parser is: %(message)s": "Thông báo của trình xử lý là: %(message)s",
"Invalid JSON": "JSON không hợp lệ",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Thiết lập không hợp lệ: chỉ có thể điền một trong số default_server_config, default_server_name, hoặc default_hs_url.",
"Invalid configuration: no default server specified.": "Cấu hình không hợp lệ: máy chủ mặc định không được thiết lập.",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Thiết lập không hợp lệ: chỉ có thể điền một trong số sau default_server_config, default_server_name, hoặc default_hs_url.",
"Invalid configuration: no default server specified.": "Cấu hình không hợp lệ: chưa chỉ định máy chủ mặc định.",
"Sign In": "Đăng nhập",
"Create Account": "Tạo tài khoản",
"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",
"Download Completed": "Tải xuống hoàn tất",
"Go to element.io": "Mở 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.",
"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 có thể sẽ không được tốt.",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Hãy 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 sử dụng một số tính năng nâng cao mà trình duyệt của bạn không thể đáp ứng.",
"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 đã đi đến gần đây trước/tiếp theo",
"Previous/next recently visited room or community": "Phòng chat hoặc cộng đồng trước/tiếp theo đã đến gần đây",
"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.",
"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 tải lại trang để thử lại.",
"Failed to start": "Khởi động thất bại",
"Use %(brand)s on mobile": "Sử dụng %(brand)s trên di động",
"Powered by Matrix": "Được chạy bởi công nghệ Matrix",
"Powered by Matrix": "Được chạy trên giao thức Matrix",
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
"Missing indexeddb worker script!": "Thiếu tệp lệnh làm việc của indexeddb!",
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Thiết lập Element của bạn chứa JSON không hợp lệ. Vui lòng sửa vấn đề và tải lại trang.",
"Your Element is misconfigured": "Element của bạn bị thiết lập sai"
"Your Element is misconfigured": "Element của bạn bị thiết lập sai",
"Switch to space by number": "Chuyển sang Space bằng số"
}

View File

@@ -34,5 +34,7 @@
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s 使用了您目前的瀏覽器不支援的進階瀏覽器功能。",
"Powered by Matrix": "由 Matrix 提供",
"Use %(brand)s on mobile": "在行動裝置上使用 %(brand)s",
"Switch to space by number": "依數字切換至空間"
"Switch to space by number": "依數字切換至空間",
"Next recently visited room or community": "下一個近期造訪過的聊天室或社群",
"Previous recently visited room or community": "前一個近期造訪過的聊天室或社群"
}

View File

@@ -19,26 +19,29 @@ limitations under the License.
*/
import React from 'react';
// add React and ReactPerf to the global namespace, to make them easier to access via the console
// this incidentally means we can forget our React imports in JSX files without penalty.
window.React = React;
import * as sdk from 'matrix-react-sdk';
import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg';
import { _td, newTranslatableError } from 'matrix-react-sdk/src/languageHandler';
import AutoDiscoveryUtils from 'matrix-react-sdk/src/utils/AutoDiscoveryUtils';
import { AutoDiscovery } from "matrix-js-sdk/src/autodiscovery";
import * as Lifecycle from "matrix-react-sdk/src/Lifecycle";
import type MatrixChatType from "matrix-react-sdk/src/components/structures/MatrixChat";
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
import SdkConfig, { parseSsoRedirectOptions } from "matrix-react-sdk/src/SdkConfig";
import { logger } from "matrix-js-sdk/src/logger";
import { createClient } from "matrix-js-sdk/src/matrix";
import type MatrixChatType from "matrix-react-sdk/src/components/structures/MatrixChat";
import { parseQs, parseQsFromFragment } from './url_utils';
import VectorBasePlatform from "./platform/VectorBasePlatform";
import { createClient } from "matrix-js-sdk/src/matrix";
// add React and ReactPerf to the global namespace, to make them easier to access via the console
// this incidentally means we can forget our React imports in JSX files without penalty.
window.React = React;
let lastLocationHashSet: string = null;
console.log(`Application is running in ${process.env.NODE_ENV} mode`);
logger.log(`Application is running in ${process.env.NODE_ENV} mode`);
window.matrixLogger = logger;
// Parse the given window.location and return parameters that can be used when calling
// MatrixChat.showScreen(screen, params)
@@ -55,7 +58,7 @@ function getScreenFromLocation(location: Location) {
function routeUrl(location: Location) {
if (!window.matrixChat) return;
console.log("Routing URL ", location.href);
logger.log("Routing URL ", location.href);
const s = getScreenFromLocation(location);
(window.matrixChat as MatrixChatType).showScreen(s.screen, s.params);
}
@@ -71,7 +74,7 @@ function onHashChange(ev: HashChangeEvent) {
// This will be called whenever the SDK changes screens,
// so a web page can update the URL bar appropriately.
function onNewScreen(screen: string, replaceLast = false) {
console.log("newscreen " + screen);
logger.log("newscreen " + screen);
const hash = '#/' + screen;
lastLocationHashSet = hash;
@@ -133,7 +136,7 @@ function onTokenLoginCompleted() {
url.searchParams.delete("loginToken");
console.log(`Redirecting to ${url.href} to drop loginToken from queryparams`);
logger.log(`Redirecting to ${url.href} to drop loginToken from queryparams`);
window.history.replaceState(null, "", url.href);
}
@@ -145,7 +148,7 @@ export async function loadApp(fragParams: {}) {
const params = parseQs(window.location);
const urlWithoutQuery = window.location.protocol + '//' + window.location.host + window.location.pathname;
console.log("Vector starting at " + urlWithoutQuery);
logger.log("Vector starting at " + urlWithoutQuery);
(platform as VectorBasePlatform).startUpdater();
@@ -156,9 +159,15 @@ export async function loadApp(fragParams: {}) {
const [userId] = await Lifecycle.getStoredSessionOwner();
const hasPossibleToken = !!userId;
const isReturningFromSso = !!params.loginToken;
const autoRedirect = config['sso_immediate_redirect'] === true;
const ssoRedirects = parseSsoRedirectOptions(config);
let autoRedirect = ssoRedirects.immediate === true;
// XXX: This path matching is a bit brittle, but better to do it early instead of in the app code.
const isWelcomeOrLanding = window.location.hash === '#/welcome' || window.location.hash === '#';
if (!autoRedirect && ssoRedirects.on_welcome_page && isWelcomeOrLanding) {
autoRedirect = true;
}
if (!hasPossibleToken && !isReturningFromSso && autoRedirect) {
console.log("Bypassing app load to redirect to SSO");
logger.log("Bypassing app load to redirect to SSO");
const tempCli = createClient({
baseUrl: config['validated_server_config'].hsUrl,
idBaseUrl: config['validated_server_config'].isUrl,
@@ -171,6 +180,8 @@ export async function loadApp(fragParams: {}) {
return;
}
const defaultDeviceName = config['defaultDeviceDisplayName'] ?? platform.getDefaultDeviceDisplayName();
const MatrixChat = sdk.getComponent('structures.MatrixChat');
return <MatrixChat
onNewScreen={onNewScreen}
@@ -181,14 +192,14 @@ export async function loadApp(fragParams: {}) {
enableGuest={!config.disable_guests}
onTokenLoginCompleted={onTokenLoginCompleted}
initialScreenAfterLogin={getScreenFromLocation(window.location)}
defaultDeviceDisplayName={platform.getDefaultDeviceDisplayName()}
defaultDeviceDisplayName={defaultDeviceName}
/>;
}
async function verifyServerConfig() {
let validatedConfig;
try {
console.log("Verifying homeserver configuration");
logger.log("Verifying homeserver configuration");
// Note: the query string may include is_url and hs_url - we only respect these in the
// context of email validation. Because we don't respect them otherwise, we do not need
@@ -219,8 +230,8 @@ async function verifyServerConfig() {
}
if (hsUrl) {
console.log("Config uses a default_hs_url - constructing a default_server_config using this information");
console.warn(
logger.log("Config uses a default_hs_url - constructing a default_server_config using this information");
logger.warn(
"DEPRECATED CONFIG OPTION: In the future, default_hs_url will not be accepted. Please use " +
"default_server_config instead.",
);
@@ -239,13 +250,13 @@ async function verifyServerConfig() {
let discoveryResult = null;
if (wkConfig) {
console.log("Config uses a default_server_config - validating object");
logger.log("Config uses a default_server_config - validating object");
discoveryResult = await AutoDiscovery.fromDiscoveryConfig(wkConfig);
}
if (serverName) {
console.log("Config uses a default_server_name - doing .well-known lookup");
console.warn(
logger.log("Config uses a default_server_name - doing .well-known lookup");
logger.warn(
"DEPRECATED CONFIG OPTION: In the future, default_server_name will not be accepted. Please " +
"use default_server_config instead.",
);
@@ -256,10 +267,10 @@ async function verifyServerConfig() {
} catch (e) {
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");
logger.error(e);
logger.warn("A session was found - suppressing config error and using the session's homeserver");
console.log("Using pre-existing hsUrl and isUrl: ", { hsUrl, isUrl });
logger.log("Using pre-existing hsUrl and isUrl: ", { hsUrl, isUrl });
validatedConfig = await AutoDiscoveryUtils.validateServerConfigWithStaticUrls(hsUrl, isUrl, true);
} else {
// the user is not logged in, so scream
@@ -270,10 +281,10 @@ async function verifyServerConfig() {
validatedConfig.isDefault = true;
// Just in case we ever have to debug this
console.log("Using homeserver config:", validatedConfig);
logger.log("Using homeserver config:", validatedConfig);
// Add the newly built config to the actual config for use by the app
console.log("Updating SdkConfig with validated discovery information");
logger.log("Updating SdkConfig with validated discovery information");
SdkConfig.add({ "validated_server_config": validatedConfig });
return SdkConfig.get();

View File

@@ -32,7 +32,7 @@
font-src 'self' data:;
media-src * blob: data:;
child-src * blob: data:;
worker-src 'self';
worker-src 'self' blob:;
frame-src * blob: data:;
form-action 'self';
manifest-src 'self';
@@ -64,14 +64,14 @@
<script src="<%= htmlWebpackPlugin.files.js.find(entry => entry.includes("bundle.js")) %>"></script>
<!-- Legacy supporting Prefetch images -->
<img src="<%= require('matrix-react-sdk/res/img/warning.svg') %>" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/e2e/warning.svg') %>" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/feather-customised/warning-triangle.svg') %>" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/bold.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/code.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/italics.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/quote.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/strikethrough.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/warning.svg') %>" aria-hidden alt="" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/e2e/warning.svg') %>" aria-hidden alt="" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/feather-customised/warning-triangle.svg') %>" aria-hidden alt="" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/bold.svg') %>" aria-hidden alt="" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/code.svg') %>" aria-hidden alt="" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/italics.svg') %>" aria-hidden alt="" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/quote.svg') %>" aria-hidden alt="" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/strikethrough.svg') %>" aria-hidden alt="" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<audio id="messageAudio">
<source src="media/message.ogg" type="audio/ogg" />

View File

@@ -18,11 +18,16 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { logger } from "matrix-js-sdk/src/logger";
// 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';
// Require common CSS here; this will make webpack process it into bundle.css.
// Our own CSS (which is themed) is imported via separate webpack entry points
// in webpack.config.js
require('gfm.css/gfm.css');
require('highlight.js/styles/github.css');
require('katex/dist/katex.css');
/**
@@ -34,23 +39,20 @@ require('katex/dist/katex.css');
*/
require('./devcss');
require('./localstorage-fix');
// 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';
async function settled(...promises: Array<Promise<any>>) {
for (const prom of promises) {
try {
await prom;
} catch (e) {
console.error(e);
logger.error(e);
}
}
}
function checkBrowserFeatures() {
if (!window.Modernizr) {
console.error("Cannot check features - Modernizr global is missing.");
logger.error("Cannot check features - Modernizr global is missing.");
return false;
}
@@ -77,14 +79,14 @@ function checkBrowserFeatures() {
let featureComplete = true;
for (let i = 0; i < featureList.length; i++) {
if (window.Modernizr[featureList[i]] === undefined) {
console.error(
logger.error(
"Looked for feature '%s' but Modernizr has no results for this. " +
"Has it been configured correctly?", featureList[i],
);
return false;
}
if (window.Modernizr[featureList[i]] === false) {
console.error("Browser missing feature: '%s'", featureList[i]);
logger.error("Browser missing feature: '%s'", featureList[i]);
// toggle flag rather than return early so we log all missing features rather than just the first.
featureComplete = false;
}
@@ -173,13 +175,13 @@ async function start() {
// ##########################
if (!acceptBrowser) {
await new Promise<void>(resolve => {
console.error("Browser is missing required features.");
logger.error("Browser is missing required features.");
// take to a different landing page to AWOOOOOGA at the user
showIncompatibleBrowser(() => {
if (window.localStorage) {
window.localStorage.setItem('mx_accepts_unsupported_browser', String(true));
}
console.log("User accepts the compatibility risks.");
logger.log("User accepts the compatibility risks.");
resolve();
});
});
@@ -222,7 +224,7 @@ async function start() {
// run on the components.
await loadApp(fragparts.params);
} catch (err) {
console.error(err);
logger.error(err);
// Like the compatibility page, AWOOOOOGA at the user
// This uses the default brand since the app config is unavailable.
await showError(_t("Your Element is misconfigured"), [
@@ -232,7 +234,7 @@ async function start() {
}
start().catch(err => {
console.error(err);
logger.error(err);
// show the static error in an iframe to not lose any context / console data
// with some basic styling to make the iframe full page
delete document.body.style.height;

View File

@@ -23,29 +23,29 @@ import olmWasmPath from "@matrix-org/olm/olm.wasm";
import Olm from '@matrix-org/olm';
import * as ReactDOM from "react-dom";
import * as React from "react";
import * as languageHandler from "matrix-react-sdk/src/languageHandler";
import SettingsStore from "matrix-react-sdk/src/settings/SettingsStore";
import ElectronPlatform from "./platform/ElectronPlatform";
import PWAPlatform from "./platform/PWAPlatform";
import WebPlatform from "./platform/WebPlatform";
import PlatformPeg from "matrix-react-sdk/src/PlatformPeg";
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
import { setTheme } from "matrix-react-sdk/src/theme";
import { logger } from "matrix-js-sdk/src/logger";
import ElectronPlatform from "./platform/ElectronPlatform";
import PWAPlatform from "./platform/PWAPlatform";
import WebPlatform from "./platform/WebPlatform";
import { initRageshake, initRageshakeStore } from "./rageshakesetup";
export const rageshakePromise = initRageshake();
export function preparePlatform() {
if (window.electron) {
console.log("Using Electron platform");
logger.log("Using Electron platform");
PlatformPeg.set(new ElectronPlatform());
} else if (window.matchMedia('(display-mode: standalone)').matches) {
console.log("Using PWA platform");
logger.log("Using PWA platform");
PlatformPeg.set(new PWAPlatform());
} else {
console.log("Using Web platform");
logger.log("Using Web platform");
PlatformPeg.set(new WebPlatform());
}
}
@@ -54,7 +54,7 @@ export function setupLogStorage() {
if (SdkConfig.get().bug_report_endpoint_url) {
return initRageshakeStore();
}
console.warn("No bug report endpoint set - logs will not be persisted");
logger.warn("No bug report endpoint set - logs will not be persisted");
return Promise.resolve();
}
@@ -82,9 +82,9 @@ export function loadOlm(): Promise<void> {
return Olm.init({
locateFile: () => olmWasmPath,
}).then(() => {
console.log("Using WebAssembly Olm");
logger.log("Using WebAssembly Olm");
}).catch((e) => {
console.log("Failed to load Olm: trying legacy version", e);
logger.log("Failed to load Olm: trying legacy version", e);
return new Promise((resolve, reject) => {
const s = document.createElement('script');
s.src = 'olm_legacy.js'; // XXX: This should be cache-busted too
@@ -96,9 +96,9 @@ export function loadOlm(): Promise<void> {
// not 'Olm' which is still the failed wasm version.
return window.Olm.init();
}).then(() => {
console.log("Using legacy Olm");
logger.log("Using legacy Olm");
}).catch((e) => {
console.log("Both WebAssembly and asm.js Olm failed!", e);
logger.log("Both WebAssembly and asm.js Olm failed!", e);
});
});
}
@@ -118,14 +118,14 @@ export async function loadLanguage() {
await languageHandler.setLanguage(langs);
document.documentElement.setAttribute("lang", languageHandler.getCurrentLanguage());
} catch (e) {
console.error("Unable to set language", e);
logger.error("Unable to set language", e);
}
}
export async function loadSkin() {
// Ensure the skin is the very first thing to load for the react-sdk. We don't even want to reference
// the SDK until we have to in imports.
console.log("Loading skin...");
logger.log("Loading skin...");
// load these async so that its code is not executed immediately and we can catch any exceptions
const [sdk, skin] = await Promise.all([
import(
@@ -140,7 +140,7 @@ export async function loadSkin() {
"../component-index"),
]);
sdk.loadSkin(skin);
console.log("Skin loaded!");
logger.log("Skin loaded!");
}
export async function loadTheme() {

View File

@@ -14,9 +14,6 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
// We have to trick webpack into loading our CSS for us.
require("./index.scss");
import { KJUR } from 'jsrsasign';
import {
IOpenIDCredentials,
@@ -25,6 +22,10 @@ import {
WidgetApi,
} from "matrix-widget-api";
import { ElementWidgetActions } from "matrix-react-sdk/src/stores/widgets/ElementWidgetActions";
import { logger } from "matrix-js-sdk/src/logger";
// We have to trick webpack into loading our CSS for us.
require("./index.scss");
const JITSI_OPENIDTOKEN_JWT_AUTH = 'openidtoken-jwt';
@@ -45,6 +46,7 @@ let jitsiAuth: string;
let roomId: string;
let openIdToken: IOpenIDCredentials;
let roomName: string;
let startAudioOnly: boolean;
let widgetApi: WidgetApi;
let meetApi: any; // JitsiMeetExternalAPI
@@ -94,7 +96,7 @@ let meetApi: any; // JitsiMeetExternalAPI
]);
widgetApi.start();
} else {
console.warn("No parent URL or no widget ID - assuming no widget API is available");
logger.warn("No parent URL or no widget ID - assuming no widget API is available");
}
// Populate the Jitsi params now
@@ -106,6 +108,7 @@ let meetApi: any; // JitsiMeetExternalAPI
jitsiAuth = qsParam('auth', true);
roomId = qsParam('roomId', true);
roomName = qsParam('roomName', true);
startAudioOnly = qsParam('isAudioOnly', true) === "true";
if (widgetApi) {
await readyPromise;
@@ -115,7 +118,7 @@ let meetApi: any; // JitsiMeetExternalAPI
if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) {
// Request credentials, give callback to continue when received
openIdToken = await widgetApi.requestOpenIDConnectToken();
console.log("Got OpenID Connect token");
logger.log("Got OpenID Connect token");
}
// TODO: register widgetApi listeners for PTT controls (https://github.com/vector-im/element-web/issues/12795)
@@ -146,7 +149,7 @@ let meetApi: any; // JitsiMeetExternalAPI
enableJoinButton(); // always enable the button
} catch (e) {
console.error("Error setting up Jitsi widget", e);
logger.error("Error setting up Jitsi widget", e);
document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget";
}
})();
@@ -206,7 +209,7 @@ function joinConference() { // event handler bound in HTML
if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) {
if (!openIdToken?.access_token) { // eslint-disable-line camelcase
// We've failing to get a token, don't try to init conference
console.warn('Expected to have an OpenID credential, cannot initialize widget.');
logger.warn('Expected to have an OpenID credential, cannot initialize widget.');
document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget";
return;
}
@@ -215,13 +218,7 @@ function joinConference() { // event handler bound in HTML
switchVisibleContainers();
if (widgetApi) {
// ignored promise because we don't care if it works
// noinspection JSIgnoredPromiseFromCall
widgetApi.setAlwaysOnScreen(true);
}
console.warn(
logger.warn(
"[Jitsi Widget] The next few errors about failing to parse URL parameters are fine if " +
"they mention 'external_api' or 'jitsi' in the stack. They're just Jitsi Meet trying to parse " +
"our fragment values and not recognizing the options.",
@@ -237,6 +234,9 @@ function joinConference() { // event handler bound in HTML
MAIN_TOOLBAR_BUTTONS: [],
VIDEO_LAYOUT_FIT: "height",
},
configOverwrite: {
startAudioOnly,
},
jwt: jwt,
};
@@ -246,6 +246,16 @@ function joinConference() { // event handler bound in HTML
if (userId) meetApi.executeCommand("email", userId);
if (roomName) meetApi.executeCommand("subject", roomName);
// fires once when user joins the conference
// (regardless of video on or off)
meetApi.on("videoConferenceJoined", () => {
if (widgetApi) {
// ignored promise because we don't care if it works
// noinspection JSIgnoredPromiseFromCall
widgetApi.setAlwaysOnScreen(true);
}
});
meetApi.on("readyToClose", () => {
switchVisibleContainers();

View File

@@ -1,3 +1,5 @@
import { logger } from "matrix-js-sdk/src/logger";
import { getVectorConfig } from '../getconfig';
function onBackToElementClick(): void {
@@ -76,7 +78,7 @@ async function initPage(): Promise<void> {
}
}
} catch (e) {
console.error(e);
logger.error(e);
return renderConfigError("Unable to fetch homeserver configuration");
}
}

View File

@@ -3,6 +3,7 @@ Copyright 2016 Aviral Dasgupta
Copyright 2016 OpenMarket Ltd
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
Copyright 2018 - 2021 New Vector Ltd
Copyright 2022 Šimon Brandner <simon.bra.ag@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -34,10 +35,8 @@ import Modal from "matrix-react-sdk/src/Modal";
import InfoDialog from "matrix-react-sdk/src/components/views/dialogs/InfoDialog";
import Spinner from "matrix-react-sdk/src/components/views/elements/Spinner";
import {
Categories,
CMD_OR_CTRL,
CategoryName,
DIGITS,
Modifiers,
registerShortcut,
} from "matrix-react-sdk/src/accessibility/KeyboardShortcuts";
import { isOnlyCtrlOrCmdKeyEvent, Key } from "matrix-react-sdk/src/Keyboard";
@@ -52,6 +51,8 @@ import ToastStore from "matrix-react-sdk/src/stores/ToastStore";
import GenericExpiringToast from "matrix-react-sdk/src/components/views/toasts/GenericExpiringToast";
import SettingsStore from 'matrix-react-sdk/src/settings/SettingsStore';
import { IMatrixProfile, IEventWithRoomId as IMatrixEvent, IResultRoomEvents } from "matrix-js-sdk/src/@types/search";
import { logger } from "matrix-js-sdk/src/logger";
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
import VectorBasePlatform from './VectorBasePlatform';
@@ -124,12 +125,12 @@ class SeshatIndexManager extends BaseEventIndexManager {
private onIpcReply = (ev: {}, payload: IPCPayload) => {
if (payload.id === undefined) {
console.warn("Ignoring IPC reply with no ID");
logger.warn("Ignoring IPC reply with no ID");
return;
}
if (this.pendingIpcCalls[payload.id] === undefined) {
console.warn("Unknown IPC payload ID: " + payload.id);
logger.warn("Unknown IPC payload ID: " + payload.id);
return;
}
@@ -245,7 +246,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
// try to flush the rageshake logs to indexeddb before quit.
electron.on('before-quit', function() {
console.log('element-desktop closing');
logger.log('element-desktop closing');
rageshake.flush();
});
@@ -256,14 +257,18 @@ export default class ElectronPlatform extends VectorBasePlatform {
dis.fire(Action.ViewUserSettings);
});
electron.on('userDownloadCompleted', (ev, { path, name }) => {
const key = `DOWNLOAD_TOAST_${path}`;
electron.on('userDownloadCompleted', (ev, { id, name }) => {
const key = `DOWNLOAD_TOAST_${id}`;
const onAccept = () => {
electron.send('userDownloadOpen', { path });
electron.send('userDownloadAction', { id, open: true });
ToastStore.sharedInstance().dismissToast(key);
};
const onDismiss = () => {
electron.send('userDownloadAction', { id });
};
ToastStore.sharedInstance().addOrReplaceToast({
key,
title: _t("Download Completed"),
@@ -272,6 +277,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
acceptLabel: _t("Open"),
onAccept,
dismissLabel: _t("Dismiss"),
onDismiss,
numSeconds: 10,
},
component: GenericExpiringToast,
@@ -280,43 +286,50 @@ export default class ElectronPlatform extends VectorBasePlatform {
});
// register OS-specific shortcuts
registerShortcut(Categories.NAVIGATION, {
keybinds: [{
modifiers: [CMD_OR_CTRL],
registerShortcut("KeyBinding.switchToSpaceByNumber", CategoryName.NAVIGATION, {
default: {
ctrlOrCmdKey: true,
key: DIGITS,
}],
description: _td("Switch to space by number"),
},
displayName: _td("Switch to space by number"),
});
if (isMac) {
registerShortcut(Categories.NAVIGATION, {
keybinds: [{
modifiers: [Modifiers.COMMAND],
registerShortcut("KeyBinding.openUserSettings", CategoryName.NAVIGATION, {
default: {
commandKey: true,
key: Key.COMMA,
}],
description: _td("Open user settings"),
},
displayName: _td("Open user settings"),
});
registerShortcut(Categories.NAVIGATION, {
keybinds: [{
modifiers: [Modifiers.COMMAND],
registerShortcut("KeyBinding.previousVisitedRoomOrCommunity", CategoryName.NAVIGATION, {
default: {
commandKey: true,
key: Key.SQUARE_BRACKET_LEFT,
}, {
modifiers: [Modifiers.COMMAND],
},
displayName: _td("Previous recently visited room or community"),
});
registerShortcut("KeyBinding.nextVisitedRoomOrCommunity", CategoryName.NAVIGATION, {
default: {
commandKey: true,
key: Key.SQUARE_BRACKET_RIGHT,
}],
description: _td("Previous/next recently visited room or community"),
},
displayName: _td("Next recently visited room or community"),
});
} else {
registerShortcut(Categories.NAVIGATION, {
keybinds: [{
modifiers: [Modifiers.ALT],
registerShortcut("KeyBinding.previousVisitedRoomOrCommunity", CategoryName.NAVIGATION, {
default: {
altKey: true,
key: Key.ARROW_LEFT,
}, {
modifiers: [Modifiers.ALT],
},
displayName: _td("Previous recently visited room or community"),
});
registerShortcut("KeyBinding.nextVisitedRoomOrCommunity", CategoryName.NAVIGATION, {
default: {
altKey: true,
key: Key.ARROW_RIGHT,
}],
description: _td("Previous/next recently visited room or community"),
},
displayName: _td("Next recently visited room or community"),
});
}
@@ -366,7 +379,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
return true;
}
displayNotification(title: string, msg: string, avatarUrl: string, room: Room): Notification {
displayNotification(title: string, msg: string, avatarUrl: string, room: Room, ev?: MatrixEvent): Notification {
// GNOME notification spec parses HTML tags for styling...
// Electron Docs state all supported linux notification systems follow this markup spec
// https://github.com/electron/electron/blob/master/docs/tutorial/desktop-environment-integration.md#linux
@@ -377,27 +390,24 @@ export default class ElectronPlatform extends VectorBasePlatform {
msg = msg.replace(/</g, '&lt;').replace(/>/g, '&gt;');
}
// Notifications in Electron use the HTML5 notification API
const notifBody = {
body: msg,
silent: true, // we play our own sounds
};
if (avatarUrl) notifBody['icon'] = avatarUrl;
const notification = new window.Notification(title, notifBody);
const notification = super.displayNotification(
title,
msg,
avatarUrl,
room,
ev,
);
const handler = notification.onclick as Function;
notification.onclick = () => {
dis.dispatch({
action: 'view_room',
room_id: room.roomId,
});
window.focus();
handler?.();
this.ipcCall('focusWindow');
};
return notification;
}
loudNotification(ev: Event, room: Object) {
loudNotification(ev: MatrixEvent, room: Room) {
electron.send('loudNotification');
}
@@ -489,10 +499,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
}
reload() {
// we used to remote to the main process to get it to
// reload the webcontents, but in practice this is unnecessary:
// the normal way works fine.
window.location.reload(false);
window.location.reload();
}
private async ipcCall(name: string, ...args: any[]): Promise<any> {
@@ -506,12 +513,12 @@ export default class ElectronPlatform extends VectorBasePlatform {
private onIpcReply = (ev, payload) => {
if (payload.id === undefined) {
console.warn("Ignoring IPC reply with no ID");
logger.warn("Ignoring IPC reply with no ID");
return;
}
if (this.pendingIpcCalls[payload.id] === undefined) {
console.warn("Unknown IPC payload ID: " + payload.id);
logger.warn("Unknown IPC payload ID: " + payload.id);
return;
}
@@ -534,8 +541,8 @@ export default class ElectronPlatform extends VectorBasePlatform {
setSpellCheckLanguages(preferredLangs: string[]) {
this.ipcCall('setSpellCheckLanguages', preferredLangs).catch(error => {
console.log("Failed to send setSpellCheckLanguages IPC to Electron");
console.error(error);
logger.log("Failed to send setSpellCheckLanguages IPC to Electron");
logger.error(error);
});
}

View File

@@ -14,6 +14,8 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { logger } from "matrix-js-sdk/src/logger";
import WebPlatform from "./WebPlatform";
export default class PWAPlatform extends WebPlatform {
@@ -23,7 +25,7 @@ export default class PWAPlatform extends WebPlatform {
this.notificationCount = count;
navigator.setAppBadge(count).catch(e => {
console.error("Failed to update PWA app badge", e);
logger.error("Failed to update PWA app badge", e);
});
}
}

View File

@@ -19,8 +19,8 @@ limitations under the License.
import BasePlatform from 'matrix-react-sdk/src/BasePlatform';
import { _t } from 'matrix-react-sdk/src/languageHandler';
import { getVectorConfig } from "../getconfig";
import { getVectorConfig } from "../getconfig";
import Favicon from "../../favicon";
/**

View File

@@ -16,23 +16,21 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import VectorBasePlatform from './VectorBasePlatform';
import { UpdateCheckStatus } from "matrix-react-sdk/src/BasePlatform";
import request from 'browser-request';
import dis from 'matrix-react-sdk/src/dispatcher/dispatcher';
import { _t } from 'matrix-react-sdk/src/languageHandler';
import { Room } from "matrix-js-sdk/src/models/room";
import { hideToast as hideUpdateToast, showToast as showUpdateToast } from "matrix-react-sdk/src/toasts/UpdateToast";
import { Action } from "matrix-react-sdk/src/dispatcher/actions";
import { CheckUpdatesPayload } from 'matrix-react-sdk/src/dispatcher/payloads/CheckUpdatesPayload';
import UAParser from 'ua-parser-js';
import { logger } from "matrix-js-sdk/src/logger";
import VectorBasePlatform from './VectorBasePlatform';
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
@@ -79,35 +77,14 @@ export default class WebPlatform extends VectorBasePlatform {
});
}
displayNotification(title: string, msg: string, avatarUrl: string, room: Room) {
const notifBody = {
body: msg,
tag: "vector",
silent: true, // we play our own sounds
};
if (avatarUrl) notifBody['icon'] = avatarUrl;
const notification = new window.Notification(title, notifBody);
notification.onclick = function() {
dis.dispatch({
action: 'view_room',
room_id: room.roomId,
});
window.focus();
notification.close();
};
return notification;
}
private getVersion(): Promise<string> {
private getMostRecentVersion(): Promise<string> {
// We add a cachebuster to the request to make sure that we know about
// the most recent version on the origin server. That might not
// actually be the version we'd get on a reload (particularly in the
// presence of intermediate caching proxies), but still: we're trying
// to tell the user that there is a new version.
return new Promise(function(resolve, reject) {
return new Promise((resolve, reject) => {
request(
{
method: "GET",
@@ -121,18 +98,24 @@ export default class WebPlatform extends VectorBasePlatform {
return;
}
const ver = body.trim();
resolve(ver);
resolve(this.getNormalizedAppVersion(body.trim()));
},
);
});
}
getAppVersion(): Promise<string> {
if (this.runningVersion !== null) {
return Promise.resolve(this.runningVersion);
getNormalizedAppVersion(version: string): string {
// if version looks like semver with leading v, strip it
// (matches scripts/normalize-version.sh)
const semVerRegex = new RegExp("^v[0-9]+.[0-9]+.[0-9]+(-.+)?$");
if (semVerRegex.test(version)) {
return version.substr(1);
}
return this.getVersion();
return version;
}
getAppVersion(): Promise<string> {
return Promise.resolve(this.getNormalizedAppVersion(process.env.VERSION));
}
startUpdater() {
@@ -145,12 +128,12 @@ export default class WebPlatform extends VectorBasePlatform {
}
pollForUpdate = () => {
return this.getVersion().then((ver) => {
if (this.runningVersion === null) {
this.runningVersion = ver;
} else if (this.runningVersion !== ver) {
if (this.shouldShowUpdate(ver)) {
showUpdateToast(this.runningVersion, ver);
return this.getMostRecentVersion().then((mostRecentVersion) => {
const currentVersion = this.getNormalizedAppVersion(process.env.VERSION);
if (currentVersion !== mostRecentVersion) {
if (this.shouldShowUpdate(mostRecentVersion)) {
showUpdateToast(currentVersion, mostRecentVersion);
}
return { status: UpdateCheckStatus.Ready };
} else {
@@ -159,7 +142,7 @@ export default class WebPlatform extends VectorBasePlatform {
return { status: UpdateCheckStatus.NotAvailable };
}, (err) => {
console.error("Failed to poll for update", err);
logger.error("Failed to poll for update", err);
return {
status: UpdateCheckStatus.Error,
detail: err.message || err.status ? err.status.toString() : 'Unknown Error',
@@ -178,7 +161,7 @@ export default class WebPlatform extends VectorBasePlatform {
}
installUpdate() {
window.location.reload(true);
window.location.reload();
}
getDefaultDeviceDisplayName(): string {
@@ -212,8 +195,6 @@ export default class WebPlatform extends VectorBasePlatform {
}
reload() {
// forceReload=false since we don't really need new HTML/JS files
// we just need to restart the JS runtime.
window.location.reload(false);
window.location.reload();
}
}

View File

@@ -29,24 +29,25 @@ limitations under the License.
import * as rageshake from "matrix-react-sdk/src/rageshake/rageshake";
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
import sendBugReport from "matrix-react-sdk/src/rageshake/submit-rageshake";
import { logger } from "matrix-js-sdk/src/logger";
export function initRageshake() {
// we manually check persistence for rageshakes ourselves
const prom = rageshake.init(/*setUpPersistence=*/false);
prom.then(() => {
console.log("Initialised rageshake.");
console.log("To fix line numbers in Chrome: " +
logger.log("Initialised rageshake.");
logger.log("To fix line numbers in Chrome: " +
"Meatball menu → Settings → Ignore list → Add /rageshake\\.js$");
window.addEventListener('beforeunload', (e) => {
console.log('element-web closing');
logger.log('element-web closing');
// try to flush the logs to indexeddb
rageshake.flush();
});
rageshake.cleanup();
}, (err) => {
console.error("Failed to initialise rageshake: " + err);
logger.error("Failed to initialise rageshake: " + err);
});
return prom;
}
@@ -58,22 +59,22 @@ export function initRageshakeStore() {
window.mxSendRageshake = function(text: string, withLogs?: boolean) {
const url = SdkConfig.get().bug_report_endpoint_url;
if (!url) {
console.error("Cannot send a rageshake - no bug_report_endpoint_url configured");
logger.error("Cannot send a rageshake - no bug_report_endpoint_url configured");
return;
}
if (withLogs === undefined) withLogs = true;
if (!text || !text.trim()) {
console.error("Cannot send a rageshake without a message - please tell us what went wrong");
logger.error("Cannot send a rageshake without a message - please tell us what went wrong");
return;
}
sendBugReport(url, {
userText: text,
sendLogs: withLogs,
progressCallback: console.log.bind(console),
progressCallback: logger.log.bind(console),
}).then(() => {
console.log("Bug report sent!");
logger.log("Bug report sent!");
}, (err) => {
console.error(err);
logger.error(err);
});
};

View File

@@ -77,6 +77,7 @@ describe('joining a room', function() {
const ROOM_ALIAS = '#alias:localhost';
const ROOM_ID = '!id:localhost';
httpBackend.when('GET', '/capabilities').respond(200, { capabilities : {} });
httpBackend.when('GET', '/pushrules').respond(200, {});
httpBackend.when('POST', '/filter').respond(200, { filter_id: 'fid' });

View File

@@ -313,6 +313,7 @@ describe('loading:', function() {
});
it('shows the last known room by default', function() {
httpBackend.when('GET', '/capabilities').respond(200, { capabilities: {} });
httpBackend.when('GET', '/pushrules').respond(200, {});
loadApp();
@@ -332,6 +333,7 @@ describe('loading:', function() {
it('shows a home page by default if we have no joined rooms', function() {
localStorage.removeItem("mx_last_room_id");
httpBackend.when('GET', '/capabilities').respond(200, { capabilities : {} });
httpBackend.when('GET', '/pushrules').respond(200, {});
loadApp();
@@ -349,6 +351,7 @@ describe('loading:', function() {
});
it('shows a room view if we followed a room link', function() {
httpBackend.when('GET', '/capabilities').respond(200, { capabilities : {} });
httpBackend.when('GET', '/pushrules').respond(200, {});
loadApp({
@@ -422,6 +425,8 @@ describe('loading:', function() {
describe('Guest auto-registration:', function() {
it('shows a welcome page by default', function() {
httpBackend.when('GET', '/capabilities').respond(200, { capabilities: {} });
loadApp();
return sleep(1).then(() => {
@@ -452,6 +457,8 @@ describe('loading:', function() {
});
it('uses the default homeserver to register with', function() {
httpBackend.when('GET', '/capabilities').respond(200, { capabilities: {} });
loadApp();
return sleep(1).then(() => {
@@ -486,6 +493,8 @@ describe('loading:', function() {
});
it('shows a room view if we followed a room link', function() {
httpBackend.when('GET', '/capabilities').respond(200, { capabilities: {} });
loadApp({
uriFragment: "#/room/!room:id",
});
@@ -517,6 +526,8 @@ describe('loading:', function() {
describe('Login as user', function() {
beforeEach(function() {
httpBackend.when('GET', '/capabilities').respond(200, { capabilities: {} });
// first we have to load the homepage
loadApp();
@@ -663,6 +674,7 @@ describe('loading:', function() {
// Wait for another trip around the event loop for the UI to update
return sleep(1);
}).then(() => {
httpBackend.when('GET', '/capabilities').respond(200, { capabilities : {} });
httpBackend.when('GET', '/pushrules').respond(200, {});
return expectAndAwaitSync().catch((e) => {
throw new Error("Never got /sync after login: did the client start?");

View File

@@ -12,3 +12,6 @@ Object.defineProperty(window, 'matchMedia', {
dispatchEvent: jest.fn(),
})),
});
// maplibre requires a createObjectURL mock
global.URL.createObjectURL = jest.fn();

View File

@@ -9,16 +9,24 @@ const TerserPlugin = require('terser-webpack-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const HtmlWebpackInjectPreload = require('@principalstudio/html-webpack-inject-preload');
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
const SentryCliPlugin = require("@sentry/webpack-plugin");
dotenv.config();
let ogImageUrl = process.env.RIOT_OG_IMAGE_URL;
if (!ogImageUrl) ogImageUrl = 'https://app.element.io/themes/element/img/logos/opengraph.png';
if (!process.env.VERSION) {
console.warn("Unset VERSION variable - this may affect build output");
process.env.VERSION = "!!UNSET!!";
}
const cssThemes = {
// CSS themes
"theme-legacy-light": "./node_modules/matrix-react-sdk/res/themes/legacy-light/css/legacy-light.scss",
"theme-legacy-dark": "./node_modules/matrix-react-sdk/res/themes/legacy-dark/css/legacy-dark.scss",
"theme-light": "./node_modules/matrix-react-sdk/res/themes/light/css/light.scss",
"theme-light-high-contrast":
"./node_modules/matrix-react-sdk/res/themes/light-high-contrast/css/light-high-contrast.scss",
"theme-dark": "./node_modules/matrix-react-sdk/res/themes/dark/css/dark.scss",
"theme-light-custom": "./node_modules/matrix-react-sdk/res/themes/light-custom/css/light-custom.scss",
"theme-dark-custom": "./node_modules/matrix-react-sdk/res/themes/dark-custom/css/dark-custom.scss",
@@ -32,31 +40,34 @@ function getActiveThemes() {
}
module.exports = (env, argv) => {
let nodeEnv = argv.mode;
if (process.env.CI_PACKAGE) {
// Don't run minification for CI builds (this is only set for runs on develop)
// We override this via environment variable to avoid duplicating the scripts
// in `package.json` just for a different mode.
argv.mode = "development";
// More and more people are using nightly build as their main client
// Libraries like React have a development build that is useful
// when working on the app but adds significant runtime overhead
// We want to use the React production build but not compile the whole
// application to productions standards
nodeEnv = "production";
}
// Establish settings based on the environment and args.
//
// argv.mode is always set to "production" by yarn build
// (called to build prod, nightly and develop.element.io)
// arg.mode is set to "delopment" by yarn start
// (called by developers, runs the continuous reload script)
// process.env.CI_PACKAGE is set when yarn build is called from scripts/ci_package.sh
// (called to build nightly and develop.element.io)
const nodeEnv = argv.mode;
const devMode = nodeEnv !== 'production';
const useHMR = process.env.CSS_HOT_RELOAD === '1' && devMode;
const fullPageErrors = process.env.FULL_PAGE_ERRORS === '1' && devMode;
const enableMinification = !devMode && !process.env.CI_PACKAGE;
const development = {};
if (argv.mode === "production") {
development['devtool'] = 'nosources-source-map';
if (devMode) {
// High quality, embedded source maps for dev builds
development['devtool'] = "eval-source-map";
} else {
// This makes the sourcemaps human readable for developers. We use eval-source-map
// because the plain source-map devtool ruins the alignment.
development['devtool'] = 'eval-source-map';
if (process.env.CI_PACKAGE) {
// High quality source maps in separate .map files which include the source. This doesn't bulk up the .js
// payload file size, which is nice for performance but also necessary to get the bundle to a small enough
// size that sentry will accept the upload.
development['devtool'] = 'source-map';
} else {
// High quality source maps in separate .map files which don't include the source
development['devtool'] = 'nosources-source-map';
}
}
// Resolve the directories for the react-sdk and js-sdk for later use. We resolve these early so we
@@ -118,8 +129,8 @@ module.exports = (env, argv) => {
// Minification is normally enabled by default for webpack in production mode, but
// we use a CSS optimizer too and need to manage it ourselves.
minimize: argv.mode === 'production',
minimizer: argv.mode === 'production' ? [new TerserPlugin({}), new OptimizeCSSAssetsPlugin({})] : [],
minimize: enableMinification,
minimizer: enableMinification ? [new TerserPlugin({}), new OptimizeCSSAssetsPlugin({})] : [],
// Set the value of `process.env.NODE_ENV` for libraries like React
// See also https://v4.webpack.js.org/configuration/optimization/#optimizationnodeenv
@@ -528,6 +539,13 @@ module.exports = (env, argv) => {
}),
useHMR && new ReactRefreshWebpackPlugin(fullPageErrors ? undefined : { overlay: { entry: false } }),
// upload to sentry if sentry env is present
process.env.SENTRY_DSN &&
new SentryCliPlugin({
release: process.env.VERSION,
include: "./webapp/bundles",
}),
new webpack.EnvironmentPlugin(['VERSION']),
].filter(Boolean),
output: {

3491
yarn.lock

File diff suppressed because it is too large Load Diff