mirror of https://github.com/vector-im/riot-web
				
				
				
			Merge branch 'develop' into katex
						commit
						89ce904ebb
					
				| 
						 | 
				
			
			@ -38,7 +38,7 @@ For the web app:
 | 
			
		|||
 | 
			
		||||
- **Browser**: Chrome, Safari, Firefox? which version?
 | 
			
		||||
- **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:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,7 +48,7 @@ For the web app:
 | 
			
		|||
 | 
			
		||||
- **Browser**: Chrome, Safari, Firefox? which version?
 | 
			
		||||
- **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:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,7 +50,7 @@ For the web app:
 | 
			
		|||
 | 
			
		||||
- **Browser**: Chrome, Safari, Firefox? which version?
 | 
			
		||||
- **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:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										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)
 | 
			
		||||
=============================================================================================
 | 
			
		||||
[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.6...v1.7.7)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,7 +35,6 @@
 | 
			
		|||
            "matrix.org"
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    "welcomeUserId": "@riot-bot:matrix.org",
 | 
			
		||||
    "piwik": {
 | 
			
		||||
        "url": "https://piwik.riot.im/",
 | 
			
		||||
        "whitelistedHSUrls": ["https://matrix.org"],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,13 @@
 | 
			
		|||
{
 | 
			
		||||
  "name": "Riot",
 | 
			
		||||
  "name": "Element",
 | 
			
		||||
    "description": "A glossy Matrix collaboration client for the web.",
 | 
			
		||||
    "repository": {
 | 
			
		||||
      "url": "https://github.com/vector-im/riot-web",
 | 
			
		||||
      "url": "https://github.com/vector-im/element-web",
 | 
			
		||||
      "license": "Apache License 2.0"
 | 
			
		||||
    },
 | 
			
		||||
    "bugs": {
 | 
			
		||||
      "list": "https://github.com/vector-im/riot-web/issues",
 | 
			
		||||
      "report": "https://github.com/vector-im/riot-web/issues/new/choose"
 | 
			
		||||
      "list": "https://github.com/vector-im/element-web/issues",
 | 
			
		||||
      "report": "https://github.com/vector-im/element-web/issues/new/choose"
 | 
			
		||||
    },
 | 
			
		||||
    "keywords": [
 | 
			
		||||
      "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
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
* 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
 | 
			
		||||
  Riot instance)
 | 
			
		||||
  Element instance)
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +49,7 @@ When starting work on a feature, we should create a matching feature flag:
 | 
			
		|||
```js
 | 
			
		||||
    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
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
[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:
 | 
			
		||||
 | 
			
		||||
```json
 | 
			
		||||
| 
						 | 
				
			
			@ -74,9 +74,9 @@ configs:
 | 
			
		|||
## Enabling by default on staging, app, and release
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
[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.
 | 
			
		||||
 | 
			
		||||
**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:
 | 
			
		||||
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).
 | 
			
		||||
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! 🥳
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
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
 | 
			
		||||
   [develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json),
 | 
			
		||||
   [nightly](https://github.com/vector-im/riot-desktop/blob/develop/riot.im/nightly/config.json),
 | 
			
		||||
   [staging / app](https://github.com/vector-im/riot-web/blob/develop/riot.im/app/config.json),
 | 
			
		||||
   [develop](https://github.com/vector-im/element-web/blob/develop/element.io/develop/config.json),
 | 
			
		||||
   [nightly](https://github.com/vector-im/element-desktop/blob/develop/element.io/nightly/config.json),
 | 
			
		||||
   [staging / app](https://github.com/vector-im/element-web/blob/develop/element.io/app/config.json),
 | 
			
		||||
   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
 | 
			
		||||
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
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
request a link to an ad-hoc build of Element (hosted anywhere) that can be used for
 | 
			
		||||
the review. In the future, we [hope to automate
 | 
			
		||||
this](https://github.com/vector-im/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
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
hosting the Element installation.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										20
									
								
								package.json
								
								
								
								
							
							
						
						
									
										20
									
								
								package.json
								
								
								
								
							| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
{
 | 
			
		||||
  "name": "riot-web",
 | 
			
		||||
  "productName": "Riot",
 | 
			
		||||
  "version": "1.7.7",
 | 
			
		||||
  "version": "1.7.8",
 | 
			
		||||
  "description": "A feature-rich client for Matrix.org",
 | 
			
		||||
  "author": "New Vector Ltd.",
 | 
			
		||||
  "repository": {
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +46,7 @@
 | 
			
		|||
    "build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json",
 | 
			
		||||
    "build:types": "tsc --emitDeclarationOnly --jsx react",
 | 
			
		||||
    "dist": "scripts/package.sh",
 | 
			
		||||
    "start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,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: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",
 | 
			
		||||
| 
						 | 
				
			
			@ -60,13 +60,14 @@
 | 
			
		|||
    "gfm.css": "^1.1.2",
 | 
			
		||||
    "highlight.js": "^9.13.1",
 | 
			
		||||
    "jsrsasign": "^9.1.5",
 | 
			
		||||
    "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
 | 
			
		||||
    "matrix-react-sdk": "github:matrix-org/matrix-react-sdk#develop",
 | 
			
		||||
    "olm": "https://packages.matrix.org/npm/olm/olm-3.1.4.tgz",
 | 
			
		||||
    "matrix-js-sdk": "8.4.1",
 | 
			
		||||
    "matrix-react-sdk": "3.5.0",
 | 
			
		||||
    "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",
 | 
			
		||||
    "react": "^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",
 | 
			
		||||
    "url": "^0.11.0"
 | 
			
		||||
  },
 | 
			
		||||
| 
						 | 
				
			
			@ -92,6 +93,7 @@
 | 
			
		|||
    "@types/node": "^12.12.41",
 | 
			
		||||
    "@types/react": "16.9",
 | 
			
		||||
    "@types/react-dom": "^16.9.4",
 | 
			
		||||
    "@types/sanitize-html": "^1.23.3",
 | 
			
		||||
    "autoprefixer": "^9.7.3",
 | 
			
		||||
    "babel-eslint": "^10.0.3",
 | 
			
		||||
    "babel-jest": "^24.9.0",
 | 
			
		||||
| 
						 | 
				
			
			@ -112,8 +114,8 @@
 | 
			
		|||
    "file-loader": "^5.0.2",
 | 
			
		||||
    "fs-extra": "^0.30.0",
 | 
			
		||||
    "html-webpack-plugin": "^3.2.0",
 | 
			
		||||
    "jest": "^24.9.0",
 | 
			
		||||
    "jest-environment-jsdom-fourteen": "^1.0.1",
 | 
			
		||||
    "jest": "^26.5.2",
 | 
			
		||||
    "jest-environment-jsdom-sixteen": "^1.0.3",
 | 
			
		||||
    "json-loader": "^0.5.3",
 | 
			
		||||
    "loader-utils": "^1.2.3",
 | 
			
		||||
    "matrix-mock-request": "^1.2.3",
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +147,7 @@
 | 
			
		|||
    "webpack-dev-server": "^3.9.0"
 | 
			
		||||
  },
 | 
			
		||||
  "jest": {
 | 
			
		||||
    "testEnvironment": "jest-environment-jsdom-fourteen",
 | 
			
		||||
    "testEnvironment": "jest-environment-jsdom-sixteen",
 | 
			
		||||
    "testMatch": [
 | 
			
		||||
      "<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>
 | 
			
		||||
 | 
			
		||||
<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"/>
 | 
			
		||||
    </a>
 | 
			
		||||
    <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>
 | 
			
		||||
        <!-- The comments below are meant to be used by Ansible as a quick way
 | 
			
		||||
             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 -->
 | 
			
		||||
        <!-- BEGIN Ansible: Remove these lines when guest access is disabled -->
 | 
			
		||||
        <div class="mx_ButtonRow mx_WelcomePage_guestFunctions">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ my $gh = Net::GitHub->new(
 | 
			
		|||
    login => 'ara4n', pass => read_password("github password: "),
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
$gh->set_default_user_repo('vector-im', 'riot-web');
 | 
			
		||||
$gh->set_default_user_repo('vector-im', 'element-web');
 | 
			
		||||
 | 
			
		||||
#my @issues = $gh->issue->repos_issues({ state => 'all', milestone => 3 });
 | 
			
		||||
my @issues = $gh->issue->repos_issues({ state => 'all' });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#!/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)
 | 
			
		||||
# 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
 | 
			
		||||
    # 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.raise_for_status()
 | 
			
		||||
    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
 | 
			
		||||
    translate(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
 | 
			
		||||
        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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,7 +24,7 @@ const VectorAuthFooter = () => {
 | 
			
		|||
    let links = [
 | 
			
		||||
        {"text": "Blog", "url": "https://element.io/blog"},
 | 
			
		||||
        {"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) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,35 +1,36 @@
 | 
			
		|||
{
 | 
			
		||||
    "Dismiss": "تجاهل",
 | 
			
		||||
    "Dismiss": "أهمِل",
 | 
			
		||||
    "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",
 | 
			
		||||
    "Welcome to Element": "مرحبا بك في Element",
 | 
			
		||||
    "Decentralised, encrypted chat & collaboration powered by [matrix]": "دردشة مشفرة غير مركزية  &تطبيق تعاوني مدعوم بواسطة [matrix]",
 | 
			
		||||
    "Create Account": "انشاء حساب",
 | 
			
		||||
    "Explore rooms": "استكشف غرف المحادثات",
 | 
			
		||||
    "Sign In": "الدخول",
 | 
			
		||||
    "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: no default server specified.": "اعدادات خاطئة: لم يتم تحديد السيرفر الافتراضي.",
 | 
			
		||||
    "Your Element is misconfigured": "تطبيقك معد بطريقة خاطئة",
 | 
			
		||||
    "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "اعداداتك تحتوى على بنية JSON غير صحيحة. يرجى تصحيح المشكلة واعادة تحديث الصفحة.",
 | 
			
		||||
    "The message from the parser is: %(message)s": "الرسالة من المدقق هي:%(message)s",
 | 
			
		||||
    "Invalid JSON": "JSON خاطئ",
 | 
			
		||||
    "Unable to load config file: please refresh the page to try again.": "لم نستطع تحميل ملف الاعداد: يرجى تحديث الصفحة للمحاولة مرة اخرى.",
 | 
			
		||||
    "Unexpected error preparing the app. See console for details.": "حدث خطأ غير متوقع عند تجهيز التطبيق. انظر الى منصة التحكم للمزيد من التفاصيل.",
 | 
			
		||||
    "Download Completed": "تم اكتمال التحميل",
 | 
			
		||||
    "Open": "فتح",
 | 
			
		||||
    "Open user settings": "فتح اعدادات المستخدم",
 | 
			
		||||
    "Previous/next recently visited room or community": "السابقة/اللاحقة الغرفة او المجتمع الذي تمت زيارته مؤخرا",
 | 
			
		||||
    "%(brand)s Desktop (%(platformName)s)": "%(brand)s سطح المكتب (%(platformName)s)",
 | 
			
		||||
    "Go to your browser to complete Sign In": "اذهب الى المتصفح لاكمال تسجيل الدخول",
 | 
			
		||||
    "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
 | 
			
		||||
    "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 يستخدم مزايا المتصفح المتقدمة والتي لا يدعمها متصفحك الحالي.",
 | 
			
		||||
    "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.",
 | 
			
		||||
    "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": "فشل الاقلاع"
 | 
			
		||||
    "Welcome to Element": "مرحبًا بك في Element",
 | 
			
		||||
    "Decentralised, encrypted chat & collaboration powered by [matrix]": "دردشة وتعاون غير مركزي معمّى، تدعمه [matrix]",
 | 
			
		||||
    "Create Account": "أنشِئ حسابًا",
 | 
			
		||||
    "Explore rooms": "استكشِف الغرف",
 | 
			
		||||
    "Sign In": "لِج",
 | 
			
		||||
    "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: no default server specified.": "الضبط غير صالح: لم تحدّد خادومًا مبدئيًا.",
 | 
			
		||||
    "Your Element is misconfigured": "لم يُضبط تطبيق Element كما ينبغي",
 | 
			
		||||
    "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",
 | 
			
		||||
    "Invalid JSON": "تنسيق JSON غير صالح",
 | 
			
		||||
    "Unable to load config file: please refresh the page to try again.": "تعذّر تحميل ملف الضبط: من فضلك أنعِش الصفحة لمعاودة المحاولة.",
 | 
			
		||||
    "Unexpected error preparing the app. See console for details.": "حدث عُطل غير متوقع أثناء تجهيز التطبيق. طالِع المِعراض للتفاصيل.",
 | 
			
		||||
    "Download Completed": "اكتمل التنزيل",
 | 
			
		||||
    "Open": "افتح",
 | 
			
		||||
    "Open user settings": "افتح إعدادات المستخدم",
 | 
			
		||||
    "Previous/next recently visited room or community": "الغرفة أو المجتمع التالي/السابق الذي زرته حديثًا",
 | 
			
		||||
    "%(brand)s Desktop (%(platformName)s)": "%(brand)s لسطح المكتب (%(platformName)s)",
 | 
			
		||||
    "Go to your browser to complete Sign In": "افتح المتصفح لإكمال الولوج",
 | 
			
		||||
    "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s، %(osName)s)",
 | 
			
		||||
    "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 ميزات متقدمة في المتصفحات لا يدعمها متصفحك الحالي.",
 | 
			
		||||
    "Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "من فضلك ثبّت <chromeLink>كروم</chromeLink> أو <firefoxLink>فَيَرفُكس</firefoxLink> أو <safariLink>سفاري</safariLink> لأفضل تجربة.",
 | 
			
		||||
    "You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "يمكنك مواصل استعمال متصفحك الحالي ولكن قد لا تعمل بعض المزايا (أو كلها) وقد لا يظهر التطبيق كما ينبغي له أن يظهر.",
 | 
			
		||||
    "I understand the risks and wish to continue": "أفهم المخاطرة وأود المواصلة",
 | 
			
		||||
    "Go to element.io": "انتقل إلى element.io",
 | 
			
		||||
    "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ó",
 | 
			
		||||
    "Invalid configuration: no default server specified.": "Configuració no vàlida: no s'ha especificat cap servidor per defecte.",
 | 
			
		||||
    "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",
 | 
			
		||||
    "Invalid JSON": "Μη έγκυρο JSON",
 | 
			
		||||
    "Unexpected error preparing the app. See console for details.": "Απρόοπτο σφάλμα κατά την προετοιμασία της εφαρμογής. Δείτε το τερματικό για λεπτομέρειες.",
 | 
			
		||||
    "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Μη έγκυρη ρύθμιση παραμέτρων: δυνατότητα ορισμού μόνο ένα από τα default_server_config, default_server_name, ή 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.": "Μη έγκυρη ρύθμιση παραμέτρων: δεν έχει οριστεί προκαθορισμένος διακομιστής.",
 | 
			
		||||
    "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é",
 | 
			
		||||
    "Open": "Otvoriť",
 | 
			
		||||
    "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",
 | 
			
		||||
    "%(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": "打开",
 | 
			
		||||
    "Your browser can't run %(brand)s": "浏览器无法运行%(brand)s",
 | 
			
		||||
    "%(brand)s uses advanced browser features which aren't supported by your current browser.": "当前浏览器不支持%(brand)s调用的高级浏览器特性。",
 | 
			
		||||
    "Powered by Matrix": "Powered by Matrix"
 | 
			
		||||
    "Powered by Matrix": "由 Matrix 驱动"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,6 @@ window.React = React;
 | 
			
		|||
import url from 'url';
 | 
			
		||||
import * as sdk from 'matrix-react-sdk';
 | 
			
		||||
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 AutoDiscoveryUtils from 'matrix-react-sdk/src/utils/AutoDiscoveryUtils';
 | 
			
		||||
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 {MatrixClientPeg} from 'matrix-react-sdk/src/MatrixClientPeg';
 | 
			
		||||
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
 | 
			
		||||
import CallHandler from 'matrix-react-sdk/src/CallHandler';
 | 
			
		||||
 | 
			
		||||
import {parseQs, parseQsFromFragment} from './url_utils';
 | 
			
		||||
import VectorBasePlatform from "./platform/VectorBasePlatform";
 | 
			
		||||
| 
						 | 
				
			
			@ -141,7 +139,6 @@ export async function loadApp(fragParams: {}) {
 | 
			
		|||
        throw newTranslatableError(_td("Missing indexeddb worker script!"));
 | 
			
		||||
    }
 | 
			
		||||
    MatrixClientPeg.setIndexedDbWorkerScript(vectorIndexeddbWorkerScript);
 | 
			
		||||
    CallHandler.setConferenceHandler(VectorConferenceHandler);
 | 
			
		||||
 | 
			
		||||
    window.addEventListener('hashchange', onHashChange);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -160,7 +157,6 @@ export async function loadApp(fragParams: {}) {
 | 
			
		|||
    return <MatrixChat
 | 
			
		||||
        onNewScreen={onNewScreen}
 | 
			
		||||
        makeRegistrationUrl={makeRegistrationUrl}
 | 
			
		||||
        ConferenceHandler={VectorConferenceHandler}
 | 
			
		||||
        config={config}
 | 
			
		||||
        realQueryParams={params}
 | 
			
		||||
        startingFragmentQueryParams={fragParams}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,7 +85,7 @@ const supportedBrowser = checkBrowserFeatures();
 | 
			
		|||
// 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
 | 
			
		||||
// 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() {
 | 
			
		||||
    // load init.ts async so that its code is not executed immediately and we can catch any exceptions
 | 
			
		||||
    const {
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +114,7 @@ async function start() {
 | 
			
		|||
        // don't try to redirect to the native apps if we're
 | 
			
		||||
        // verifying a 3pid (but after we've loaded the config)
 | 
			
		||||
        // 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;
 | 
			
		||||
 | 
			
		||||
        if (!preventRedirect) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@
 | 
			
		|||
<div id="joinButtonContainer">
 | 
			
		||||
    <div class="joinConferenceFloating">
 | 
			
		||||
        <div class="joinConferencePrompt">
 | 
			
		||||
            <span class="icon"><!-- managed by CSS --></span>
 | 
			
		||||
            <!-- TODO: i18n -->
 | 
			
		||||
            <h2>Jitsi Video Conference</h2>
 | 
			
		||||
            <div id="widgetActionContainer">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,10 +23,11 @@ limitations under the License.
 | 
			
		|||
    src: url('~matrix-react-sdk/res/fonts/Nunito/Nunito-Regular.ttf') format('truetype');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$fg-color: #edf3ff;
 | 
			
		||||
body {
 | 
			
		||||
    font-family: Nunito, Arial, Helvetica, sans-serif;
 | 
			
		||||
    background-color: #181b21;
 | 
			
		||||
    color: #edf3ff;
 | 
			
		||||
    color: $fg-color;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body, html {
 | 
			
		||||
| 
						 | 
				
			
			@ -73,3 +74,22 @@ body, html {
 | 
			
		|||
    background-color: #03b381;
 | 
			
		||||
    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");
 | 
			
		||||
 | 
			
		||||
import * as qs from 'querystring';
 | 
			
		||||
import {Capability, WidgetApi} from 'matrix-react-sdk/src/widgets/WidgetApi';
 | 
			
		||||
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';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -38,8 +44,10 @@ let avatarUrl: string;
 | 
			
		|||
let userId: string;
 | 
			
		||||
let jitsiAuth: string;
 | 
			
		||||
let roomId: string;
 | 
			
		||||
let openIdToken: IOpenIDCredentials;
 | 
			
		||||
 | 
			
		||||
let widgetApi: WidgetApi;
 | 
			
		||||
let meetApi: any; // JitsiMeetExternalAPI
 | 
			
		||||
 | 
			
		||||
(async function() {
 | 
			
		||||
    try {
 | 
			
		||||
| 
						 | 
				
			
			@ -61,11 +69,26 @@ let widgetApi: WidgetApi;
 | 
			
		|||
        const widgetId = qsParam('widgetId', true);
 | 
			
		||||
 | 
			
		||||
        // Set this up as early as possible because Element will be hitting it almost immediately.
 | 
			
		||||
        let readyPromise: Promise<[void, void]>;
 | 
			
		||||
        if (parentUrl && widgetId) {
 | 
			
		||||
            widgetApi = new WidgetApi(qsParam('parentUrl'), qsParam('widgetId'), [
 | 
			
		||||
                Capability.AlwaysOnScreen,
 | 
			
		||||
            const parentOrigin = new URL(qsParam('parentUrl')).origin;
 | 
			
		||||
            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
 | 
			
		||||
| 
						 | 
				
			
			@ -78,39 +101,33 @@ let widgetApi: WidgetApi;
 | 
			
		|||
        roomId = qsParam('roomId', true);
 | 
			
		||||
 | 
			
		||||
        if (widgetApi) {
 | 
			
		||||
            await widgetApi.waitReady();
 | 
			
		||||
            await readyPromise;
 | 
			
		||||
            await widgetApi.setAlwaysOnScreen(false); // start off as detachable from the screen
 | 
			
		||||
 | 
			
		||||
            // See https://github.com/matrix-org/prosody-mod-auth-matrix-user-verification
 | 
			
		||||
            if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) {
 | 
			
		||||
                // Request credentials, give callback to continue when received
 | 
			
		||||
                widgetApi.requestOpenIDCredentials(credentialsResponseCallback);
 | 
			
		||||
            } else {
 | 
			
		||||
                enableJoinButton();
 | 
			
		||||
                openIdToken = await widgetApi.requestOpenIDConnectToken();
 | 
			
		||||
                console.log("Got OpenID Connect token");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // 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) {
 | 
			
		||||
        console.error("Error setting up Jitsi widget", e);
 | 
			
		||||
        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() {
 | 
			
		||||
    document.getElementById("joinButton").onclick = () => joinConference();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -140,7 +157,7 @@ function createJWTToken() {
 | 
			
		|||
        room: "*",
 | 
			
		||||
        context: {
 | 
			
		||||
            matrix: {
 | 
			
		||||
                token: widgetApi.openIDCredentials.accessToken,
 | 
			
		||||
                token: openIdToken.access_token,
 | 
			
		||||
                room_id: roomId,
 | 
			
		||||
            },
 | 
			
		||||
            user: {
 | 
			
		||||
| 
						 | 
				
			
			@ -163,7 +180,7 @@ function createJWTToken() {
 | 
			
		|||
function joinConference() { // event handler bound in HTML
 | 
			
		||||
    let jwt;
 | 
			
		||||
    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
 | 
			
		||||
            console.warn('Expected to have an OpenID credential, cannot initialize widget.');
 | 
			
		||||
            document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget";
 | 
			
		||||
| 
						 | 
				
			
			@ -199,7 +216,7 @@ function joinConference() { // event handler bound in HTML
 | 
			
		|||
        jwt: jwt,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const meetApi = new JitsiMeetExternalAPI(jitsiDomain, options);
 | 
			
		||||
    meetApi = new JitsiMeetExternalAPI(jitsiDomain, options);
 | 
			
		||||
    if (displayName) meetApi.executeCommand("displayName", displayName);
 | 
			
		||||
    if (avatarUrl) meetApi.executeCommand("avatarUrl", avatarUrl);
 | 
			
		||||
    if (userId) meetApi.executeCommand("email", userId);
 | 
			
		||||
| 
						 | 
				
			
			@ -214,5 +231,6 @@ function joinConference() { // event handler bound in HTML
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        document.getElementById("jitsiContainer").innerHTML = "";
 | 
			
		||||
        meetApi = null;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue