Merge branch 'develop' into katex
This commit is contained in:
commit
89ce904ebb
30 changed files with 1622 additions and 740 deletions
2
.github/ISSUE_TEMPLATE.md
vendored
2
.github/ISSUE_TEMPLATE.md
vendored
|
@ -38,7 +38,7 @@ For the web app:
|
||||||
|
|
||||||
- **Browser**: Chrome, Safari, Firefox? which version?
|
- **Browser**: Chrome, Safari, Firefox? which version?
|
||||||
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
||||||
- **URL**: riot.im/develop / riot.im/app / somewhere else? If a private server, what version of riot-web?
|
- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web?
|
||||||
|
|
||||||
For the desktop app:
|
For the desktop app:
|
||||||
|
|
||||||
|
|
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -48,7 +48,7 @@ For the web app:
|
||||||
|
|
||||||
- **Browser**: Chrome, Safari, Firefox? which version?
|
- **Browser**: Chrome, Safari, Firefox? which version?
|
||||||
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
||||||
- **URL**: riot.im/develop / riot.im/app / somewhere else? If a private server, what version of riot-web?
|
- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web?
|
||||||
|
|
||||||
For the desktop app:
|
For the desktop app:
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ For the web app:
|
||||||
|
|
||||||
- **Browser**: Chrome, Safari, Firefox? which version?
|
- **Browser**: Chrome, Safari, Firefox? which version?
|
||||||
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
||||||
- **URL**: riot.im/develop / riot.im/app / somewhere else? If a private server, what version of riot-web?
|
- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web?
|
||||||
|
|
||||||
For the desktop app:
|
For the desktop app:
|
||||||
|
|
||||||
|
|
32
CHANGELOG.md
32
CHANGELOG.md
|
@ -1,3 +1,35 @@
|
||||||
|
Changes in [1.7.8](https://github.com/vector-im/element-web/releases/tag/v1.7.8) (2020-09-28)
|
||||||
|
=============================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.8-rc.1...v1.7.8)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.5.0 and JS SDK 8.4.1
|
||||||
|
|
||||||
|
Changes in [1.7.8-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.8-rc.1) (2020-09-23)
|
||||||
|
=======================================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.7...v1.7.8-rc.1)
|
||||||
|
|
||||||
|
* Upgrade to React SDK 3.5.0-rc.1 and JS SDK 8.4.0-rc.1
|
||||||
|
* Update from Weblate
|
||||||
|
[\#15262](https://github.com/vector-im/element-web/pull/15262)
|
||||||
|
* Upgrade sanitize-html
|
||||||
|
[\#15260](https://github.com/vector-im/element-web/pull/15260)
|
||||||
|
* Document config for preferring Secure Backup setup methods
|
||||||
|
[\#15251](https://github.com/vector-im/element-web/pull/15251)
|
||||||
|
* Add end-user documentation for UI features
|
||||||
|
[\#15190](https://github.com/vector-im/element-web/pull/15190)
|
||||||
|
* Update git checkout instructions
|
||||||
|
[\#15218](https://github.com/vector-im/element-web/pull/15218)
|
||||||
|
* If no bug_report_endpoint_url, hide rageshaking from the App
|
||||||
|
[\#15201](https://github.com/vector-im/element-web/pull/15201)
|
||||||
|
* Bump node-fetch from 2.6.0 to 2.6.1
|
||||||
|
[\#15153](https://github.com/vector-im/element-web/pull/15153)
|
||||||
|
* Remove references to Travis CI
|
||||||
|
[\#15137](https://github.com/vector-im/element-web/pull/15137)
|
||||||
|
* Fix onNewScreen to use replace when going from roomId->roomAlias
|
||||||
|
[\#15127](https://github.com/vector-im/element-web/pull/15127)
|
||||||
|
* Enable Estonian in language menu
|
||||||
|
[\#15136](https://github.com/vector-im/element-web/pull/15136)
|
||||||
|
|
||||||
Changes in [1.7.7](https://github.com/vector-im/element-web/releases/tag/v1.7.7) (2020-09-14)
|
Changes in [1.7.7](https://github.com/vector-im/element-web/releases/tag/v1.7.7) (2020-09-14)
|
||||||
=============================================================================================
|
=============================================================================================
|
||||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.6...v1.7.7)
|
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.6...v1.7.7)
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
"matrix.org"
|
"matrix.org"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"welcomeUserId": "@riot-bot:matrix.org",
|
|
||||||
"piwik": {
|
"piwik": {
|
||||||
"url": "https://piwik.riot.im/",
|
"url": "https://piwik.riot.im/",
|
||||||
"whitelistedHSUrls": ["https://matrix.org"],
|
"whitelistedHSUrls": ["https://matrix.org"],
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
"name": "Riot",
|
"name": "Element",
|
||||||
"description": "A glossy Matrix collaboration client for the web.",
|
"description": "A glossy Matrix collaboration client for the web.",
|
||||||
"repository": {
|
"repository": {
|
||||||
"url": "https://github.com/vector-im/riot-web",
|
"url": "https://github.com/vector-im/element-web",
|
||||||
"license": "Apache License 2.0"
|
"license": "Apache License 2.0"
|
||||||
},
|
},
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"list": "https://github.com/vector-im/riot-web/issues",
|
"list": "https://github.com/vector-im/element-web/issues",
|
||||||
"report": "https://github.com/vector-im/riot-web/issues/new/choose"
|
"report": "https://github.com/vector-im/element-web/issues/new/choose"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"chat",
|
"chat",
|
||||||
|
|
21
docs/e2ee.md
21
docs/e2ee.md
|
@ -35,6 +35,27 @@ following on your homeserver's `/.well-known/matrix/client` config:
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Preferring setup methods
|
||||||
|
|
||||||
|
By default, Element offers users a choice of a random key or user-chosen
|
||||||
|
passphrase when setting up Secure Backup. If a homeserver admin would like to
|
||||||
|
only offer one of these, you can signal this via the
|
||||||
|
`/.well-known/matrix/client` config, for example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"io.element.e2ee": {
|
||||||
|
"secure_backup_setup_methods": ["passphrase"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The field `secure_backup_setup_methods` is an array listing the methods the
|
||||||
|
client should display. Supported values currently include `key` and
|
||||||
|
`passphrase`. If the `secure_backup_setup_methods` field is not present or
|
||||||
|
exists but does not contain any supported methods, Element will fallback to the
|
||||||
|
default value of: `["key", "passphrase"]`.
|
||||||
|
|
||||||
# Compatibility
|
# Compatibility
|
||||||
|
|
||||||
The settings above were first proposed under a `im.vector.riot.e2ee` key, which
|
The settings above were first proposed under a `im.vector.riot.e2ee` key, which
|
||||||
|
|
|
@ -8,7 +8,7 @@ For example, flags make the following things possible:
|
||||||
* Extended testing of a feature via labs on develop
|
* Extended testing of a feature via labs on develop
|
||||||
* Enabling features when ready instead of the first moment the code is released
|
* Enabling features when ready instead of the first moment the code is released
|
||||||
* Testing a feature with a specific set of users (by enabling only on a specific
|
* Testing a feature with a specific set of users (by enabling only on a specific
|
||||||
Riot instance)
|
Element instance)
|
||||||
|
|
||||||
The size of the feature controlled by a feature flag may vary widely: it could
|
The size of the feature controlled by a feature flag may vary widely: it could
|
||||||
be a large project like reactions or a smaller change to an existing algorithm.
|
be a large project like reactions or a smaller change to an existing algorithm.
|
||||||
|
@ -49,7 +49,7 @@ When starting work on a feature, we should create a matching feature flag:
|
||||||
```js
|
```js
|
||||||
SettingsStore.getValue("feature_cats")
|
SettingsStore.getValue("feature_cats")
|
||||||
```
|
```
|
||||||
3. Document the feature in the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md)
|
3. Document the feature in the [labs documentation](https://github.com/vector-im/element-web/blob/develop/docs/labs.md)
|
||||||
|
|
||||||
With these steps completed, the feature is disabled by default, but can be
|
With these steps completed, the feature is disabled by default, but can be
|
||||||
enabled on develop and nightly by interested users for testing.
|
enabled on develop and nightly by interested users for testing.
|
||||||
|
@ -60,9 +60,9 @@ The following lists a few common options.
|
||||||
## Enabling by default on develop and nightly
|
## Enabling by default on develop and nightly
|
||||||
|
|
||||||
Set the feature to `true` in the
|
Set the feature to `true` in the
|
||||||
[develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json)
|
[develop](https://github.com/vector-im/element-web/blob/develop/element.io/develop/config.json)
|
||||||
and
|
and
|
||||||
[nightly](https://github.com/vector-im/riot-desktop/blob/develop/riot.im/nightly/config.json)
|
[nightly](https://github.com/vector-im/element-desktop/blob/develop/element.io/nightly/config.json)
|
||||||
configs:
|
configs:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
|
@ -74,9 +74,9 @@ configs:
|
||||||
## Enabling by default on staging, app, and release
|
## Enabling by default on staging, app, and release
|
||||||
|
|
||||||
Set the feature to `true` in the
|
Set the feature to `true` in the
|
||||||
[staging / app](https://github.com/vector-im/riot-web/blob/develop/riot.im/app/config.json)
|
[staging / app](https://github.com/vector-im/element-web/blob/develop/element.io/app/config.json)
|
||||||
and
|
and
|
||||||
[release](https://github.com/vector-im/riot-desktop/blob/develop/riot.im/release/config.json)
|
[release](https://github.com/vector-im/element-desktop/blob/develop/element.io/release/config.json)
|
||||||
configs.
|
configs.
|
||||||
|
|
||||||
**Note:** The above will only enable the feature for https://app.element.io and official Element
|
**Note:** The above will only enable the feature for https://app.element.io and official Element
|
||||||
|
@ -90,18 +90,18 @@ Once we're confident that a feature is working well, we should remove or convert
|
||||||
If the feature is meant to be turned off/on by the user:
|
If the feature is meant to be turned off/on by the user:
|
||||||
1. Remove `isFeature` from the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts)
|
1. Remove `isFeature` from the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts)
|
||||||
2. Change the `default` to `true` (if desired).
|
2. Change the `default` to `true` (if desired).
|
||||||
3. Remove the feature from the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md)
|
3. Remove the feature from the [labs documentation](https://github.com/vector-im/element-web/blob/develop/docs/labs.md)
|
||||||
4. Celebrate! 🥳
|
4. Celebrate! 🥳
|
||||||
|
|
||||||
If the feature is meant to be forced on (non-configurable):
|
If the feature is meant to be forced on (non-configurable):
|
||||||
1. Remove the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts)
|
1. Remove the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts)
|
||||||
2. Remove all `getValue` lines that test for the feature.
|
2. Remove all `getValue` lines that test for the feature.
|
||||||
3. Remove the feature from the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md)
|
3. Remove the feature from the [labs documentation](https://github.com/vector-im/element-web/blob/develop/docs/labs.md)
|
||||||
4. If applicable, remove the feature state from
|
4. If applicable, remove the feature state from
|
||||||
[develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json),
|
[develop](https://github.com/vector-im/element-web/blob/develop/element.io/develop/config.json),
|
||||||
[nightly](https://github.com/vector-im/riot-desktop/blob/develop/riot.im/nightly/config.json),
|
[nightly](https://github.com/vector-im/element-desktop/blob/develop/element.io/nightly/config.json),
|
||||||
[staging / app](https://github.com/vector-im/riot-web/blob/develop/riot.im/app/config.json),
|
[staging / app](https://github.com/vector-im/element-web/blob/develop/element.io/app/config.json),
|
||||||
and
|
and
|
||||||
[release](https://github.com/vector-im/riot-desktop/blob/develop/riot.im/release/config.json)
|
[release](https://github.com/vector-im/element-desktop/blob/develop/element.io/release/config.json)
|
||||||
configs
|
configs
|
||||||
5. Celebrate! 🥳
|
5. Celebrate! 🥳
|
||||||
|
|
|
@ -110,3 +110,8 @@ To enable message previews for reactions in DMs, enable `feature_roomlist_previe
|
||||||
represent what communities v2 will look/feel like and can/will change without notice. Due to the early
|
represent what communities v2 will look/feel like and can/will change without notice. Due to the early
|
||||||
stages this feature is in and the requirement for a compatible homeserver, we will not be accepting issues
|
stages this feature is in and the requirement for a compatible homeserver, we will not be accepting issues
|
||||||
or feedback for this functionality at this time.
|
or feedback for this functionality at this time.
|
||||||
|
|
||||||
|
## Dehydrated devices (`feature_dehydration`)
|
||||||
|
|
||||||
|
Allows users to receive encrypted messages by creating a device that is stored
|
||||||
|
encrypted on the server, as described in [MSC2697](https://github.com/matrix-org/matrix-doc/pull/2697).
|
||||||
|
|
|
@ -76,7 +76,7 @@ As it can be difficult to review design work from looking at just the changed
|
||||||
files in a PR, authors should be prepared for Design and / or Product teams to
|
files in a PR, authors should be prepared for Design and / or Product teams to
|
||||||
request a link to an ad-hoc build of Element (hosted anywhere) that can be used for
|
request a link to an ad-hoc build of Element (hosted anywhere) that can be used for
|
||||||
the review. In the future, we [hope to automate
|
the review. In the future, we [hope to automate
|
||||||
this](https://github.com/vector-im/riot-web/issues/12624) for every PR.
|
this](https://github.com/vector-im/element-web/issues/12624) for every PR.
|
||||||
|
|
||||||
Before starting work on a feature, it's best to ensure your plan aligns well
|
Before starting work on a feature, it's best to ensure your plan aligns well
|
||||||
with our vision for Element. Please chat with the team in
|
with our vision for Element. Please chat with the team in
|
||||||
|
|
|
@ -6,7 +6,7 @@ official element.io distribution, but these files may be useful if you want to
|
||||||
inspect the configuration used there.
|
inspect the configuration used there.
|
||||||
|
|
||||||
Element Desktop uses a separate config (see
|
Element Desktop uses a separate config (see
|
||||||
https://github.com/vector-im/riot-desktop/tree/develop/element.io).
|
https://github.com/vector-im/element-desktop/tree/develop/element.io).
|
||||||
|
|
||||||
Deployment scripts (such as app/deploy.py) are meant to be run on the web server
|
Deployment scripts (such as app/deploy.py) are meant to be run on the web server
|
||||||
hosting the Element installation.
|
hosting the Element installation.
|
||||||
|
|
20
package.json
20
package.json
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "riot-web",
|
"name": "riot-web",
|
||||||
"productName": "Riot",
|
"productName": "Riot",
|
||||||
"version": "1.7.7",
|
"version": "1.7.8",
|
||||||
"description": "A feature-rich client for Matrix.org",
|
"description": "A feature-rich client for Matrix.org",
|
||||||
"author": "New Vector Ltd.",
|
"author": "New Vector Ltd.",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -46,7 +46,7 @@
|
||||||
"build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json",
|
"build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json",
|
||||||
"build:types": "tsc --emitDeclarationOnly --jsx react",
|
"build:types": "tsc --emitDeclarationOnly --jsx react",
|
||||||
"dist": "scripts/package.sh",
|
"dist": "scripts/package.sh",
|
||||||
"start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,riot-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"",
|
"start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"",
|
||||||
"start:res": "yarn build:jitsi && node scripts/copy-res.js -w",
|
"start:res": "yarn build:jitsi && node scripts/copy-res.js -w",
|
||||||
"start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development",
|
"start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development",
|
||||||
"lint": "yarn lint:types && yarn lint:js && yarn lint:style",
|
"lint": "yarn lint:types && yarn lint:js && yarn lint:style",
|
||||||
|
@ -60,13 +60,14 @@
|
||||||
"gfm.css": "^1.1.2",
|
"gfm.css": "^1.1.2",
|
||||||
"highlight.js": "^9.13.1",
|
"highlight.js": "^9.13.1",
|
||||||
"jsrsasign": "^9.1.5",
|
"jsrsasign": "^9.1.5",
|
||||||
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
|
"matrix-js-sdk": "8.4.1",
|
||||||
"matrix-react-sdk": "github:matrix-org/matrix-react-sdk#develop",
|
"matrix-react-sdk": "3.5.0",
|
||||||
"olm": "https://packages.matrix.org/npm/olm/olm-3.1.4.tgz",
|
"matrix-widget-api": "^0.1.0-beta.2",
|
||||||
|
"olm": "https://packages.matrix.org/npm/olm/olm-3.2.1.tgz",
|
||||||
"prop-types": "^15.7.2",
|
"prop-types": "^15.7.2",
|
||||||
"react": "^16.9.0",
|
"react": "^16.9.0",
|
||||||
"react-dom": "^16.9.0",
|
"react-dom": "^16.9.0",
|
||||||
"sanitize-html": "^1.19.1",
|
"sanitize-html": "github:apostrophecms/sanitize-html#3c7f93f2058f696f5359e3e58d464161647226db",
|
||||||
"ua-parser-js": "^0.7.19",
|
"ua-parser-js": "^0.7.19",
|
||||||
"url": "^0.11.0"
|
"url": "^0.11.0"
|
||||||
},
|
},
|
||||||
|
@ -92,6 +93,7 @@
|
||||||
"@types/node": "^12.12.41",
|
"@types/node": "^12.12.41",
|
||||||
"@types/react": "16.9",
|
"@types/react": "16.9",
|
||||||
"@types/react-dom": "^16.9.4",
|
"@types/react-dom": "^16.9.4",
|
||||||
|
"@types/sanitize-html": "^1.23.3",
|
||||||
"autoprefixer": "^9.7.3",
|
"autoprefixer": "^9.7.3",
|
||||||
"babel-eslint": "^10.0.3",
|
"babel-eslint": "^10.0.3",
|
||||||
"babel-jest": "^24.9.0",
|
"babel-jest": "^24.9.0",
|
||||||
|
@ -112,8 +114,8 @@
|
||||||
"file-loader": "^5.0.2",
|
"file-loader": "^5.0.2",
|
||||||
"fs-extra": "^0.30.0",
|
"fs-extra": "^0.30.0",
|
||||||
"html-webpack-plugin": "^3.2.0",
|
"html-webpack-plugin": "^3.2.0",
|
||||||
"jest": "^24.9.0",
|
"jest": "^26.5.2",
|
||||||
"jest-environment-jsdom-fourteen": "^1.0.1",
|
"jest-environment-jsdom-sixteen": "^1.0.3",
|
||||||
"json-loader": "^0.5.3",
|
"json-loader": "^0.5.3",
|
||||||
"loader-utils": "^1.2.3",
|
"loader-utils": "^1.2.3",
|
||||||
"matrix-mock-request": "^1.2.3",
|
"matrix-mock-request": "^1.2.3",
|
||||||
|
@ -145,7 +147,7 @@
|
||||||
"webpack-dev-server": "^3.9.0"
|
"webpack-dev-server": "^3.9.0"
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"testEnvironment": "jest-environment-jsdom-fourteen",
|
"testEnvironment": "jest-environment-jsdom-sixteen",
|
||||||
"testMatch": [
|
"testMatch": [
|
||||||
"<rootDir>/test/**/*-test.js"
|
"<rootDir>/test/**/*-test.js"
|
||||||
],
|
],
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
self.addEventListener('fetch',() => {});
|
self.addEventListener('fetch', () => {});
|
||||||
|
|
|
@ -169,7 +169,7 @@ we don't have an account and should hide them. No account == no guest account ei
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="mx_Parent">
|
<div class="mx_Parent">
|
||||||
<a href="https://riot.im" target="_blank" rel="noopener">
|
<a href="https://element.io" target="_blank" rel="noopener">
|
||||||
<img src="welcome/images/logo.svg" alt="" class="mx_Logo"/>
|
<img src="welcome/images/logo.svg" alt="" class="mx_Logo"/>
|
||||||
</a>
|
</a>
|
||||||
<h1 class="mx_Header_title">_t("Welcome to Element")</h1>
|
<h1 class="mx_Header_title">_t("Welcome to Element")</h1>
|
||||||
|
@ -185,7 +185,7 @@ we don't have an account and should hide them. No account == no guest account ei
|
||||||
</div>
|
</div>
|
||||||
<!-- The comments below are meant to be used by Ansible as a quick way
|
<!-- The comments below are meant to be used by Ansible as a quick way
|
||||||
to strip out the marked content when desired.
|
to strip out the marked content when desired.
|
||||||
See https://github.com/vector-im/riot-web/issues/8622.
|
See https://github.com/vector-im/element-web/issues/8622.
|
||||||
TODO: Strip out these comments and rely on the guest flag -->
|
TODO: Strip out these comments and rely on the guest flag -->
|
||||||
<!-- BEGIN Ansible: Remove these lines when guest access is disabled -->
|
<!-- BEGIN Ansible: Remove these lines when guest access is disabled -->
|
||||||
<div class="mx_ButtonRow mx_WelcomePage_guestFunctions">
|
<div class="mx_ButtonRow mx_WelcomePage_guestFunctions">
|
||||||
|
|
|
@ -18,7 +18,7 @@ my $gh = Net::GitHub->new(
|
||||||
login => 'ara4n', pass => read_password("github password: "),
|
login => 'ara4n', pass => read_password("github password: "),
|
||||||
);
|
);
|
||||||
|
|
||||||
$gh->set_default_user_repo('vector-im', 'riot-web');
|
$gh->set_default_user_repo('vector-im', 'element-web');
|
||||||
|
|
||||||
#my @issues = $gh->issue->repos_issues({ state => 'all', milestone => 3 });
|
#my @issues = $gh->issue->repos_issues({ state => 'all', milestone => 3 });
|
||||||
my @issues = $gh->issue->repos_issues({ state => 'all' });
|
my @issues = $gh->issue->repos_issues({ state => 'all' });
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
#
|
#
|
||||||
# auto-deploy script for https://riot.im/develop
|
# auto-deploy script for https://develop.element.io
|
||||||
#
|
#
|
||||||
# Listens for buildkite webhook pokes (https://buildkite.com/docs/apis/webhooks)
|
# Listens for buildkite webhook pokes (https://buildkite.com/docs/apis/webhooks)
|
||||||
# When it gets one, downloads the artifact from buildkite
|
# When it gets one, downloads the artifact from buildkite
|
||||||
|
@ -191,7 +191,7 @@ def deploy_tarball(artifact, build_dir):
|
||||||
|
|
||||||
# Download the tarball here as buildkite needs auth to do this
|
# Download the tarball here as buildkite needs auth to do this
|
||||||
# we don't pgp-sign buildkite artifacts, relying on HTTPS and buildkite
|
# we don't pgp-sign buildkite artifacts, relying on HTTPS and buildkite
|
||||||
# not being evil. If that's not good enough for you, don't use riot.im/develop.
|
# not being evil. If that's not good enough for you, don't use develop.element.io.
|
||||||
resp = requests.get(artifact['download_url'], stream=True, headers=req_headers())
|
resp = requests.get(artifact['download_url'], stream=True, headers=req_headers())
|
||||||
resp.raise_for_status()
|
resp.raise_for_status()
|
||||||
with open(artifact['filename'], 'wb') as ofp:
|
with open(artifact['filename'], 'wb') as ofp:
|
||||||
|
|
|
@ -28,7 +28,7 @@ export default class VectorEmbeddedPage extends EmbeddedPage {
|
||||||
// we're overriding the base component here, for Element-specific tweaks
|
// we're overriding the base component here, for Element-specific tweaks
|
||||||
translate(s) {
|
translate(s) {
|
||||||
s = sanitizeHtml(_t(s));
|
s = sanitizeHtml(_t(s));
|
||||||
// ugly fix for https://github.com/vector-im/riot-web/issues/4243
|
// ugly fix for https://github.com/vector-im/element-web/issues/4243
|
||||||
// eslint-disable-next-line max-len
|
// eslint-disable-next-line max-len
|
||||||
s = s.replace(/\[matrix\]/, '<a href="https://matrix.org" target="_blank" rel="noreferrer noopener"><img width="79" height="34" alt="Matrix" style="padding-left: 1px;vertical-align: middle" src="welcome/images/matrix.svg"/></a>');
|
s = s.replace(/\[matrix\]/, '<a href="https://matrix.org" target="_blank" rel="noreferrer noopener"><img width="79" height="34" alt="Matrix" style="padding-left: 1px;vertical-align: middle" src="welcome/images/matrix.svg"/></a>');
|
||||||
return s;
|
return s;
|
||||||
|
|
|
@ -24,7 +24,7 @@ const VectorAuthFooter = () => {
|
||||||
let links = [
|
let links = [
|
||||||
{"text": "Blog", "url": "https://element.io/blog"},
|
{"text": "Blog", "url": "https://element.io/blog"},
|
||||||
{"text": "Twitter", "url": "https://twitter.com/element_hq"},
|
{"text": "Twitter", "url": "https://twitter.com/element_hq"},
|
||||||
{"text": "GitHub", "url": "https://github.com/vector-im/riot-web"},
|
{"text": "GitHub", "url": "https://github.com/vector-im/element-web"},
|
||||||
];
|
];
|
||||||
|
|
||||||
if (brandingConfig && brandingConfig.authFooterLinks) {
|
if (brandingConfig && brandingConfig.authFooterLinks) {
|
||||||
|
|
|
@ -1,35 +1,36 @@
|
||||||
{
|
{
|
||||||
"Dismiss": "تجاهل",
|
"Dismiss": "أهمِل",
|
||||||
"Unknown device": "جهاز مجهول",
|
"Unknown device": "جهاز مجهول",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "تحتاج الى استخدام الاتصال الآمن (HTTPS) للسماح بمشاركة الشاشة.",
|
"You need to be using HTTPS to place a screen-sharing call.": "عليك استعمال ميفاق HTTPS للاتصال بمشاركة الشاشة.",
|
||||||
"powered by Matrix": "مشغل بواسطة Matrix",
|
"powered by Matrix": "مشغل بواسطة Matrix",
|
||||||
"Welcome to Element": "مرحبا بك في Element",
|
"Welcome to Element": "مرحبًا بك في Element",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "دردشة مشفرة غير مركزية &تطبيق تعاوني مدعوم بواسطة [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "دردشة وتعاون غير مركزي معمّى، تدعمه [matrix]",
|
||||||
"Create Account": "انشاء حساب",
|
"Create Account": "أنشِئ حسابًا",
|
||||||
"Explore rooms": "استكشف غرف المحادثات",
|
"Explore rooms": "استكشِف الغرف",
|
||||||
"Sign In": "الدخول",
|
"Sign In": "لِج",
|
||||||
"Missing indexeddb worker script!": "منفذ السكريبت الخاص ب Indexeddb غير موجود!",
|
"Missing indexeddb worker script!": "سكربت عامل indexeddb ناقص!",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "خطأ في الاعدادات: يمكنك فقط تحديد واحد فقط من: default_server_config، default_server_name، أو default_hs_url.",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "الضبط غير صالح: يمكنك تحديد واحدًا من الآتي فقط: default_server_config أو default_server_name أو default_hs_url.",
|
||||||
"Invalid configuration: no default server specified.": "اعدادات خاطئة: لم يتم تحديد السيرفر الافتراضي.",
|
"Invalid configuration: no default server specified.": "الضبط غير صالح: لم تحدّد خادومًا مبدئيًا.",
|
||||||
"Your Element is misconfigured": "تطبيقك معد بطريقة خاطئة",
|
"Your Element is misconfigured": "لم يُضبط تطبيق Element كما ينبغي",
|
||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "اعداداتك تحتوى على بنية JSON غير صحيحة. يرجى تصحيح المشكلة واعادة تحديث الصفحة.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "يحتوي ضبط تطبيق Element على تنسيق JSON غير صالح. من فضلك صحّح المشكلة وأعِد تحميل الصفحة.",
|
||||||
"The message from the parser is: %(message)s": "الرسالة من المدقق هي:%(message)s",
|
"The message from the parser is: %(message)s": "الرسالة القادمة من المحلّل: %(message)s",
|
||||||
"Invalid JSON": "JSON خاطئ",
|
"Invalid JSON": "تنسيق JSON غير صالح",
|
||||||
"Unable to load config file: please refresh the page to try again.": "لم نستطع تحميل ملف الاعداد: يرجى تحديث الصفحة للمحاولة مرة اخرى.",
|
"Unable to load config file: please refresh the page to try again.": "تعذّر تحميل ملف الضبط: من فضلك أنعِش الصفحة لمعاودة المحاولة.",
|
||||||
"Unexpected error preparing the app. See console for details.": "حدث خطأ غير متوقع عند تجهيز التطبيق. انظر الى منصة التحكم للمزيد من التفاصيل.",
|
"Unexpected error preparing the app. See console for details.": "حدث عُطل غير متوقع أثناء تجهيز التطبيق. طالِع المِعراض للتفاصيل.",
|
||||||
"Download Completed": "تم اكتمال التحميل",
|
"Download Completed": "اكتمل التنزيل",
|
||||||
"Open": "فتح",
|
"Open": "افتح",
|
||||||
"Open user settings": "فتح اعدادات المستخدم",
|
"Open user settings": "افتح إعدادات المستخدم",
|
||||||
"Previous/next recently visited room or community": "السابقة/اللاحقة الغرفة او المجتمع الذي تمت زيارته مؤخرا",
|
"Previous/next recently visited room or community": "الغرفة أو المجتمع التالي/السابق الذي زرته حديثًا",
|
||||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s سطح المكتب (%(platformName)s)",
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s لسطح المكتب (%(platformName)s)",
|
||||||
"Go to your browser to complete Sign In": "اذهب الى المتصفح لاكمال تسجيل الدخول",
|
"Go to your browser to complete Sign In": "افتح المتصفح لإكمال الولوج",
|
||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s، %(osName)s)",
|
||||||
"Unsupported browser": "متصفح غير متوافق",
|
"Unsupported browser": "متصفح غير مدعوم",
|
||||||
"Your browser can't run %(brand)s": "متصفحك لايمكنه تشغيل %(brand)s",
|
"Your browser can't run %(brand)s": "لا يمكن لمتصفحك تشغيل %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s يستخدم مزايا المتصفح المتقدمة والتي لا يدعمها متصفحك الحالي.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "يستعمل %(brand)s ميزات متقدمة في المتصفحات لا يدعمها متصفحك الحالي.",
|
||||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "يرجى تثبيت <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.",
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "من فضلك ثبّت <chromeLink>كروم</chromeLink> أو <firefoxLink>فَيَرفُكس</firefoxLink> أو <safariLink>سفاري</safariLink> لأفضل تجربة.",
|
||||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "يمكنك الاستمرار في استخدام متصفحك الحالي، ولكن بعض او كل المزايا ربما لا تعمل ويكون شكل التطبيق وشعورك تجاهه غير صحيح.",
|
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "يمكنك مواصل استعمال متصفحك الحالي ولكن قد لا تعمل بعض المزايا (أو كلها) وقد لا يظهر التطبيق كما ينبغي له أن يظهر.",
|
||||||
"I understand the risks and wish to continue": "ادرك المخاطر وارغب في الاستمرار",
|
"I understand the risks and wish to continue": "أفهم المخاطرة وأود المواصلة",
|
||||||
"Go to element.io": "اذهب الى Element.io",
|
"Go to element.io": "انتقل إلى element.io",
|
||||||
"Failed to start": "فشل الاقلاع"
|
"Failed to start": "فشل البدء",
|
||||||
|
"Powered by Matrix": "تدعمه «ماترِكس»"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1,35 @@
|
||||||
{}
|
{
|
||||||
|
"Missing indexeddb worker script!": "Nedostaje indexeddb radna skripta!",
|
||||||
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Neispravna konfiguracija: navesti se samo može jedan od default_server_config, default_server_name ili default_hs_url.",
|
||||||
|
"Invalid configuration: no default server specified.": "Neispravna konfiguracija: nije naveden zadani server.",
|
||||||
|
"Your Element is misconfigured": "Vaš element je pogrešno konfiguriran",
|
||||||
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracija vašeg elementa sadrži nevažeći JSON. Ispravite problem i ponovo učitajte stranicu.",
|
||||||
|
"The message from the parser is: %(message)s": "Poruka parsera je: %(message)s",
|
||||||
|
"Invalid JSON": "Nevažeći JSON",
|
||||||
|
"Unable to load config file: please refresh the page to try again.": "Nije moguće učitati konfiguracijsku datoteku: osvježite stranicu i pokušajte ponovo.",
|
||||||
|
"Unexpected error preparing the app. See console for details.": "Neočekivana greška prilikom pripreme aplikacije. Pogledajte konzolu za detalje.",
|
||||||
|
"Download Completed": "Preuzimanje završeno",
|
||||||
|
"Open": "Otvori",
|
||||||
|
"Dismiss": "Odbaci",
|
||||||
|
"Open user settings": "Otvori korisničke postavke",
|
||||||
|
"Previous/next recently visited room or community": "Prethodna / sljedeća nedavno posjećena soba ili zajednica",
|
||||||
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Radna povrsina (%(platformName)s)",
|
||||||
|
"Go to your browser to complete Sign In": "Idite na svoj pretraživač da biste dovršili prijavu",
|
||||||
|
"Unknown device": "Nepoznat uređaj",
|
||||||
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
|
"You need to be using HTTPS to place a screen-sharing call.": "Morate koristiti HTTPS za upućivanje poziva za dijeljenje ekrana.",
|
||||||
|
"Powered by Matrix": "Pokretano uz Matrix",
|
||||||
|
"Unsupported browser": "Nepodržani pretraživač",
|
||||||
|
"Your browser can't run %(brand)s": "Vaš pretraživač ne može pokretati %(brand)s",
|
||||||
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s koristi napredne funkcije pretraživača koje vaš trenutni pretraživač ne podržava.",
|
||||||
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Molimo instalirajte <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> ili <safariLink>Safari</safariLink> za najbolje iskustvo.",
|
||||||
|
"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.": "Možete nastaviti koristiti svoj trenutni pretraživač, ali neke ili sve funkcije možda neće raditi, a izgled i dojam aplikacije mogu biti neispravani.",
|
||||||
|
"I understand the risks and wish to continue": "Razumijem rizike i želim nastaviti",
|
||||||
|
"Go to element.io": "Idite na element.io",
|
||||||
|
"Failed to start": "Pokretanje nije uspjelo",
|
||||||
|
"Welcome to Element": "Dobrodošli u Element",
|
||||||
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizirani, šifrirani razgovor & suradnja pokrenuta [matrix]",
|
||||||
|
"Sign In": "Prijavite se",
|
||||||
|
"Create Account": "Otvori račun",
|
||||||
|
"Explore rooms": "Istražite sobe"
|
||||||
|
}
|
||||||
|
|
|
@ -10,5 +10,26 @@
|
||||||
"Sign In": "Inicia la sessió",
|
"Sign In": "Inicia la sessió",
|
||||||
"Invalid configuration: no default server specified.": "Configuració no vàlida: no s'ha especificat cap servidor per defecte.",
|
"Invalid configuration: no default server specified.": "Configuració no vàlida: no s'ha especificat cap servidor per defecte.",
|
||||||
"Invalid JSON": "JSON no vàlid",
|
"Invalid JSON": "JSON no vàlid",
|
||||||
"Go to your browser to complete Sign In": "Aneu al vostre navegador per completar l'inici de sessió"
|
"Go to your browser to complete Sign In": "Aneu al vostre navegador per completar l'inici de sessió",
|
||||||
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuració incorrecta: només podeu especificar una de les opcions default_server_config, default_server_name, o default_hs_url.",
|
||||||
|
"Your Element is misconfigured": "El vostre Element està mal configurat",
|
||||||
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "El vostre Element conté un JSON incorrecte. Si us plau arregleu el problema i recarregueu la pàgina.",
|
||||||
|
"The message from the parser is: %(message)s": "El missatge de l'analitzador és: %(message)s",
|
||||||
|
"Unable to load config file: please refresh the page to try again.": "No he pogut carregar l'arxiu de configuració: si us plau recarregueu la pàgina per provar-ho de nou.",
|
||||||
|
"Unexpected error preparing the app. See console for details.": "Error inesperat preparant l'app. Vegeu la consola pels detalls.",
|
||||||
|
"Download Completed": "Descàrrega completada",
|
||||||
|
"Open": "Obre",
|
||||||
|
"Open user settings": "Obre configuració d'usuari",
|
||||||
|
"Previous/next recently visited room or community": "Anterior/Següent sala o comunitat visitada recentment",
|
||||||
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s d'escriptori (%(platformName)s)",
|
||||||
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
|
"Powered by Matrix": "En funcionament gràcies a Matrix",
|
||||||
|
"Unsupported browser": "Navegador no suportat",
|
||||||
|
"Your browser can't run %(brand)s": "El vostre navegador no pot executar %(brand)s",
|
||||||
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s usa característiques avançades del navegador que el vostre navegador no suporta.",
|
||||||
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Si us plau instal·leu<chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, o <safariLink>Safari</safariLink> per una millor experiència.",
|
||||||
|
"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.": "Podeu continuar usant el vostre navegador actual, però algunes o totes les característiques podrien no funcionar i l'aspepte de l'aplicació podria mostrar errors.",
|
||||||
|
"I understand the risks and wish to continue": "Entenc els riscos i voldria continuar",
|
||||||
|
"Go to element.io": "Vés a element.io",
|
||||||
|
"Failed to start": "Ha fallat en iniciar-se"
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,24 @@
|
||||||
"The message from the parser is: %(message)s": "Το μήνυμα από τον αναλυτή είναι: %(message)s",
|
"The message from the parser is: %(message)s": "Το μήνυμα από τον αναλυτή είναι: %(message)s",
|
||||||
"Invalid JSON": "Μη έγκυρο JSON",
|
"Invalid JSON": "Μη έγκυρο JSON",
|
||||||
"Unexpected error preparing the app. See console for details.": "Απρόοπτο σφάλμα κατά την προετοιμασία της εφαρμογής. Δείτε το τερματικό για λεπτομέρειες.",
|
"Unexpected error preparing the app. See console for details.": "Απρόοπτο σφάλμα κατά την προετοιμασία της εφαρμογής. Δείτε το τερματικό για λεπτομέρειες.",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Μη έγκυρη ρύθμιση παραμέτρων: δυνατότητα ορισμού μόνο ένα από τα default_server_config, default_server_name, ή default_hs_url.",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Μη έγκυρη ρύθμιση: δυνατότητα ορισμού μόνο ένα από τα default_server_config, default_server_name, ή default_hs_url.",
|
||||||
"Invalid configuration: no default server specified.": "Μη έγκυρη ρύθμιση παραμέτρων: δεν έχει οριστεί προκαθορισμένος διακομιστής.",
|
"Invalid configuration: no default server specified.": "Μη έγκυρη ρύθμιση παραμέτρων: δεν έχει οριστεί προκαθορισμένος διακομιστής.",
|
||||||
"Explore rooms": "Εξερευνήστε δωμάτια"
|
"Explore rooms": "Εξερευνήστε δωμάτια",
|
||||||
|
"Open": "Άνοιγμα",
|
||||||
|
"Go to your browser to complete Sign In": "Μεταβείτε στο πρόγραμμα περιήγησής σας για να ολοκληρώσετε τη σύνδεση",
|
||||||
|
"Powered by Matrix": "Με την υποστήριξη του Matrix",
|
||||||
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Παρακαλούμε εγκαταστήστε <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, ή <safariLink>Safari</safariLink> για καλύτερη εμπειρία χρήσης.",
|
||||||
|
"Your Element is misconfigured": "Το Element σας δεν εχει ρυθμιστεί σωστά",
|
||||||
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Η ρύθμιση του Element περιέχει μη έγκυρο JSON. Διορθώστε το πρόβλημα και φορτώστε ξανά τη σελίδα.",
|
||||||
|
"Unable to load config file: please refresh the page to try again.": "Δεν είναι δυνατή η φόρτωση του αρχείου config: ανανεώστε τη σελίδα για να δοκιμάσετε ξανά.",
|
||||||
|
"Download Completed": "Η λήψη ολοκληρώθηκε",
|
||||||
|
"Open user settings": "Ανοίξτε τις ρυθμίσεις χρήστη",
|
||||||
|
"Previous/next recently visited room or community": "Προηγούμενο / επόμενο δωμάτιο ή κοινότητα που επισκεφτήκατε πρόσφατα",
|
||||||
|
"Unsupported browser": "Μη υποστηριζόμενο πρόγραμμα περιήγησης",
|
||||||
|
"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 χρησιμοποιεί προηγμένες δυνατότητες προγράμματος περιήγησης που δεν υποστηρίζονται από το τρέχον πρόγραμμα περιήγησής σας.",
|
||||||
|
"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": "Αποτυχία έναρξης"
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,8 @@
|
||||||
"Download Completed": "Preberanie dokončené",
|
"Download Completed": "Preberanie dokončené",
|
||||||
"Open": "Otvoriť",
|
"Open": "Otvoriť",
|
||||||
"Your Element is misconfigured": "Váš Element je nesprávne nastavený",
|
"Your Element is misconfigured": "Váš Element je nesprávne nastavený",
|
||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Vaša konfigurácia Elementu obsahuje nesprávne JSON. Prosím, opravte chybu a obnovte stránku.",
|
"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",
|
"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."
|
"%(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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,5 +32,5 @@
|
||||||
"Open": "打开",
|
"Open": "打开",
|
||||||
"Your browser can't run %(brand)s": "浏览器无法运行%(brand)s",
|
"Your browser can't run %(brand)s": "浏览器无法运行%(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "当前浏览器不支持%(brand)s调用的高级浏览器特性。",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "当前浏览器不支持%(brand)s调用的高级浏览器特性。",
|
||||||
"Powered by Matrix": "Powered by Matrix"
|
"Powered by Matrix": "由 Matrix 驱动"
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ window.React = React;
|
||||||
import url from 'url';
|
import url from 'url';
|
||||||
import * as sdk from 'matrix-react-sdk';
|
import * as sdk from 'matrix-react-sdk';
|
||||||
import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg';
|
import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg';
|
||||||
import * as VectorConferenceHandler from 'matrix-react-sdk/src/VectorConferenceHandler';
|
|
||||||
import {_td, newTranslatableError} from 'matrix-react-sdk/src/languageHandler';
|
import {_td, newTranslatableError} from 'matrix-react-sdk/src/languageHandler';
|
||||||
import AutoDiscoveryUtils from 'matrix-react-sdk/src/utils/AutoDiscoveryUtils';
|
import AutoDiscoveryUtils from 'matrix-react-sdk/src/utils/AutoDiscoveryUtils';
|
||||||
import {AutoDiscovery} from "matrix-js-sdk/src/autodiscovery";
|
import {AutoDiscovery} from "matrix-js-sdk/src/autodiscovery";
|
||||||
|
@ -34,7 +33,6 @@ import * as Lifecycle from "matrix-react-sdk/src/Lifecycle";
|
||||||
import type MatrixChatType from "matrix-react-sdk/src/components/structures/MatrixChat";
|
import type MatrixChatType from "matrix-react-sdk/src/components/structures/MatrixChat";
|
||||||
import {MatrixClientPeg} from 'matrix-react-sdk/src/MatrixClientPeg';
|
import {MatrixClientPeg} from 'matrix-react-sdk/src/MatrixClientPeg';
|
||||||
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
||||||
import CallHandler from 'matrix-react-sdk/src/CallHandler';
|
|
||||||
|
|
||||||
import {parseQs, parseQsFromFragment} from './url_utils';
|
import {parseQs, parseQsFromFragment} from './url_utils';
|
||||||
import VectorBasePlatform from "./platform/VectorBasePlatform";
|
import VectorBasePlatform from "./platform/VectorBasePlatform";
|
||||||
|
@ -141,7 +139,6 @@ export async function loadApp(fragParams: {}) {
|
||||||
throw newTranslatableError(_td("Missing indexeddb worker script!"));
|
throw newTranslatableError(_td("Missing indexeddb worker script!"));
|
||||||
}
|
}
|
||||||
MatrixClientPeg.setIndexedDbWorkerScript(vectorIndexeddbWorkerScript);
|
MatrixClientPeg.setIndexedDbWorkerScript(vectorIndexeddbWorkerScript);
|
||||||
CallHandler.setConferenceHandler(VectorConferenceHandler);
|
|
||||||
|
|
||||||
window.addEventListener('hashchange', onHashChange);
|
window.addEventListener('hashchange', onHashChange);
|
||||||
|
|
||||||
|
@ -160,7 +157,6 @@ export async function loadApp(fragParams: {}) {
|
||||||
return <MatrixChat
|
return <MatrixChat
|
||||||
onNewScreen={onNewScreen}
|
onNewScreen={onNewScreen}
|
||||||
makeRegistrationUrl={makeRegistrationUrl}
|
makeRegistrationUrl={makeRegistrationUrl}
|
||||||
ConferenceHandler={VectorConferenceHandler}
|
|
||||||
config={config}
|
config={config}
|
||||||
realQueryParams={params}
|
realQueryParams={params}
|
||||||
startingFragmentQueryParams={fragParams}
|
startingFragmentQueryParams={fragParams}
|
||||||
|
|
|
@ -85,7 +85,7 @@ const supportedBrowser = checkBrowserFeatures();
|
||||||
// try in react but fallback to an `alert`
|
// try in react but fallback to an `alert`
|
||||||
// We start loading stuff but don't block on it until as late as possible to allow
|
// We start loading stuff but don't block on it until as late as possible to allow
|
||||||
// the browser to use as much parallelism as it can.
|
// the browser to use as much parallelism as it can.
|
||||||
// Load parallelism is based on research in https://github.com/vector-im/riot-web/issues/12253
|
// Load parallelism is based on research in https://github.com/vector-im/element-web/issues/12253
|
||||||
async function start() {
|
async function start() {
|
||||||
// load init.ts async so that its code is not executed immediately and we can catch any exceptions
|
// load init.ts async so that its code is not executed immediately and we can catch any exceptions
|
||||||
const {
|
const {
|
||||||
|
@ -114,7 +114,7 @@ async function start() {
|
||||||
// don't try to redirect to the native apps if we're
|
// don't try to redirect to the native apps if we're
|
||||||
// verifying a 3pid (but after we've loaded the config)
|
// verifying a 3pid (but after we've loaded the config)
|
||||||
// or if the user is following a deep link
|
// or if the user is following a deep link
|
||||||
// (https://github.com/vector-im/riot-web/issues/7378)
|
// (https://github.com/vector-im/element-web/issues/7378)
|
||||||
const preventRedirect = fragparts.params.client_secret || fragparts.location.length > 0;
|
const preventRedirect = fragparts.params.client_secret || fragparts.location.length > 0;
|
||||||
|
|
||||||
if (!preventRedirect) {
|
if (!preventRedirect) {
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
<div id="joinButtonContainer">
|
<div id="joinButtonContainer">
|
||||||
<div class="joinConferenceFloating">
|
<div class="joinConferenceFloating">
|
||||||
<div class="joinConferencePrompt">
|
<div class="joinConferencePrompt">
|
||||||
|
<span class="icon"><!-- managed by CSS --></span>
|
||||||
<!-- TODO: i18n -->
|
<!-- TODO: i18n -->
|
||||||
<h2>Jitsi Video Conference</h2>
|
<h2>Jitsi Video Conference</h2>
|
||||||
<div id="widgetActionContainer">
|
<div id="widgetActionContainer">
|
||||||
|
|
|
@ -23,10 +23,11 @@ limitations under the License.
|
||||||
src: url('~matrix-react-sdk/res/fonts/Nunito/Nunito-Regular.ttf') format('truetype');
|
src: url('~matrix-react-sdk/res/fonts/Nunito/Nunito-Regular.ttf') format('truetype');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$fg-color: #edf3ff;
|
||||||
body {
|
body {
|
||||||
font-family: Nunito, Arial, Helvetica, sans-serif;
|
font-family: Nunito, Arial, Helvetica, sans-serif;
|
||||||
background-color: #181b21;
|
background-color: #181b21;
|
||||||
color: #edf3ff;
|
color: $fg-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
body, html {
|
body, html {
|
||||||
|
@ -73,3 +74,22 @@ body, html {
|
||||||
background-color: #03b381;
|
background-color: #03b381;
|
||||||
border: 0;
|
border: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
$icon-size: 42px;
|
||||||
|
margin-top: -$icon-size; // to visually center the form
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
background-size: contain;
|
||||||
|
background-color: $fg-color;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: center;
|
||||||
|
mask-image: url("~matrix-react-sdk/res/img/element-icons/call/video-call.svg");
|
||||||
|
mask-size: $icon-size;
|
||||||
|
display: block;
|
||||||
|
width: $icon-size;
|
||||||
|
height: $icon-size;
|
||||||
|
margin: 0 auto; // center
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -18,8 +18,14 @@ limitations under the License.
|
||||||
require("./index.scss");
|
require("./index.scss");
|
||||||
|
|
||||||
import * as qs from 'querystring';
|
import * as qs from 'querystring';
|
||||||
import {Capability, WidgetApi} from 'matrix-react-sdk/src/widgets/WidgetApi';
|
|
||||||
import {KJUR} from 'jsrsasign';
|
import {KJUR} from 'jsrsasign';
|
||||||
|
import {
|
||||||
|
IOpenIDCredentials,
|
||||||
|
IWidgetApiRequest,
|
||||||
|
VideoConferenceCapabilities,
|
||||||
|
WidgetApi,
|
||||||
|
} from "matrix-widget-api";
|
||||||
|
import { ElementWidgetActions } from "matrix-react-sdk/src/stores/widgets/ElementWidgetActions";
|
||||||
|
|
||||||
const JITSI_OPENIDTOKEN_JWT_AUTH = 'openidtoken-jwt';
|
const JITSI_OPENIDTOKEN_JWT_AUTH = 'openidtoken-jwt';
|
||||||
|
|
||||||
|
@ -38,8 +44,10 @@ let avatarUrl: string;
|
||||||
let userId: string;
|
let userId: string;
|
||||||
let jitsiAuth: string;
|
let jitsiAuth: string;
|
||||||
let roomId: string;
|
let roomId: string;
|
||||||
|
let openIdToken: IOpenIDCredentials;
|
||||||
|
|
||||||
let widgetApi: WidgetApi;
|
let widgetApi: WidgetApi;
|
||||||
|
let meetApi: any; // JitsiMeetExternalAPI
|
||||||
|
|
||||||
(async function() {
|
(async function() {
|
||||||
try {
|
try {
|
||||||
|
@ -61,11 +69,26 @@ let widgetApi: WidgetApi;
|
||||||
const widgetId = qsParam('widgetId', true);
|
const widgetId = qsParam('widgetId', true);
|
||||||
|
|
||||||
// Set this up as early as possible because Element will be hitting it almost immediately.
|
// Set this up as early as possible because Element will be hitting it almost immediately.
|
||||||
|
let readyPromise: Promise<[void, void]>;
|
||||||
if (parentUrl && widgetId) {
|
if (parentUrl && widgetId) {
|
||||||
widgetApi = new WidgetApi(qsParam('parentUrl'), qsParam('widgetId'), [
|
const parentOrigin = new URL(qsParam('parentUrl')).origin;
|
||||||
Capability.AlwaysOnScreen,
|
widgetApi = new WidgetApi(qsParam("widgetId"), parentOrigin);
|
||||||
|
widgetApi.requestCapabilities(VideoConferenceCapabilities);
|
||||||
|
readyPromise = Promise.all([
|
||||||
|
new Promise<void>(resolve => {
|
||||||
|
widgetApi.once<CustomEvent<IWidgetApiRequest>>(`action:${ElementWidgetActions.ClientReady}`, ev => {
|
||||||
|
ev.preventDefault();
|
||||||
|
widgetApi.transport.reply(ev.detail, {});
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
new Promise<void>(resolve => {
|
||||||
|
widgetApi.once("ready", () => resolve());
|
||||||
|
}),
|
||||||
]);
|
]);
|
||||||
widgetApi.expectingExplicitReady = true;
|
widgetApi.start();
|
||||||
|
} else {
|
||||||
|
throw new Error("No parent URL or no widget ID");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate the Jitsi params now
|
// Populate the Jitsi params now
|
||||||
|
@ -78,39 +101,33 @@ let widgetApi: WidgetApi;
|
||||||
roomId = qsParam('roomId', true);
|
roomId = qsParam('roomId', true);
|
||||||
|
|
||||||
if (widgetApi) {
|
if (widgetApi) {
|
||||||
await widgetApi.waitReady();
|
await readyPromise;
|
||||||
await widgetApi.setAlwaysOnScreen(false); // start off as detachable from the screen
|
await widgetApi.setAlwaysOnScreen(false); // start off as detachable from the screen
|
||||||
|
|
||||||
// See https://github.com/matrix-org/prosody-mod-auth-matrix-user-verification
|
// See https://github.com/matrix-org/prosody-mod-auth-matrix-user-verification
|
||||||
if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) {
|
if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) {
|
||||||
// Request credentials, give callback to continue when received
|
// Request credentials, give callback to continue when received
|
||||||
widgetApi.requestOpenIDCredentials(credentialsResponseCallback);
|
openIdToken = await widgetApi.requestOpenIDConnectToken();
|
||||||
} else {
|
console.log("Got OpenID Connect token");
|
||||||
enableJoinButton();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: register widgetApi listeners for PTT controls (https://github.com/vector-im/riot-web/issues/12795)
|
// TODO: register widgetApi listeners for PTT controls (https://github.com/vector-im/riot-web/issues/12795)
|
||||||
} else {
|
|
||||||
enableJoinButton();
|
widgetApi.addEventListener(`action:${ElementWidgetActions.HangupCall}`,
|
||||||
|
(ev: CustomEvent<IWidgetApiRequest>) => {
|
||||||
|
if (meetApi) meetApi.executeCommand('hangup');
|
||||||
|
widgetApi.transport.reply(ev.detail, {}); // ack
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enableJoinButton(); // always enable the button
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("Error setting up Jitsi widget", e);
|
console.error("Error setting up Jitsi widget", e);
|
||||||
document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget";
|
document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget";
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
/**
|
|
||||||
* Enable or show error depending on what the credentials response is.
|
|
||||||
*/
|
|
||||||
function credentialsResponseCallback() {
|
|
||||||
if (widgetApi.openIDCredentials) {
|
|
||||||
console.info('Successfully got OpenID credentials.');
|
|
||||||
enableJoinButton();
|
|
||||||
} else {
|
|
||||||
console.warn('OpenID credentials request was blocked by user.');
|
|
||||||
document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function enableJoinButton() {
|
function enableJoinButton() {
|
||||||
document.getElementById("joinButton").onclick = () => joinConference();
|
document.getElementById("joinButton").onclick = () => joinConference();
|
||||||
}
|
}
|
||||||
|
@ -140,7 +157,7 @@ function createJWTToken() {
|
||||||
room: "*",
|
room: "*",
|
||||||
context: {
|
context: {
|
||||||
matrix: {
|
matrix: {
|
||||||
token: widgetApi.openIDCredentials.accessToken,
|
token: openIdToken.access_token,
|
||||||
room_id: roomId,
|
room_id: roomId,
|
||||||
},
|
},
|
||||||
user: {
|
user: {
|
||||||
|
@ -163,7 +180,7 @@ function createJWTToken() {
|
||||||
function joinConference() { // event handler bound in HTML
|
function joinConference() { // event handler bound in HTML
|
||||||
let jwt;
|
let jwt;
|
||||||
if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) {
|
if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) {
|
||||||
if (!widgetApi.openIDCredentials || !widgetApi.openIDCredentials.accessToken) {
|
if (!openIdToken?.access_token) { // eslint-disable-line camelcase
|
||||||
// We've failing to get a token, don't try to init conference
|
// We've failing to get a token, don't try to init conference
|
||||||
console.warn('Expected to have an OpenID credential, cannot initialize widget.');
|
console.warn('Expected to have an OpenID credential, cannot initialize widget.');
|
||||||
document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget";
|
document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget";
|
||||||
|
@ -199,7 +216,7 @@ function joinConference() { // event handler bound in HTML
|
||||||
jwt: jwt,
|
jwt: jwt,
|
||||||
};
|
};
|
||||||
|
|
||||||
const meetApi = new JitsiMeetExternalAPI(jitsiDomain, options);
|
meetApi = new JitsiMeetExternalAPI(jitsiDomain, options);
|
||||||
if (displayName) meetApi.executeCommand("displayName", displayName);
|
if (displayName) meetApi.executeCommand("displayName", displayName);
|
||||||
if (avatarUrl) meetApi.executeCommand("avatarUrl", avatarUrl);
|
if (avatarUrl) meetApi.executeCommand("avatarUrl", avatarUrl);
|
||||||
if (userId) meetApi.executeCommand("email", userId);
|
if (userId) meetApi.executeCommand("email", userId);
|
||||||
|
@ -214,5 +231,6 @@ function joinConference() { // event handler bound in HTML
|
||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById("jitsiContainer").innerHTML = "";
|
document.getElementById("jitsiContainer").innerHTML = "";
|
||||||
|
meetApi = null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue