Compare commits
7 Commits
v1.10.13-r
...
travis/inl
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6fd28421b3 | ||
|
|
e13cb66e32 | ||
|
|
b06de25898 | ||
|
|
62a152b68a | ||
|
|
fe831dc8dd | ||
|
|
7ff2b598af | ||
|
|
1b8fe9e782 |
@@ -21,9 +21,3 @@ insert_final_newline = true
|
|||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
[*.{yml,yaml}]
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[package.json]
|
|
||||||
indent_size = 2
|
|
||||||
|
|||||||
16
.env.example
16
.env.example
@@ -1,16 +0,0 @@
|
|||||||
# To enable CSS hot-reload, set the following variable to 1.
|
|
||||||
CSS_HOT_RELOAD=1
|
|
||||||
# To use the full page error dialog, set this to 1. Please report false positives to
|
|
||||||
# the issue tracker for handling.
|
|
||||||
FULL_PAGE_ERRORS=0
|
|
||||||
# To use a single theme, uncomment the line with the theme you want to hot-reload.
|
|
||||||
MATRIX_THEMES='light'
|
|
||||||
#MATRIX_THEMES='dark'
|
|
||||||
#MATRIX_THEMES='legacy-light'
|
|
||||||
#MATRIX_THEMES='legacy-dark'
|
|
||||||
#MATRIX_THEMES='light-custom'
|
|
||||||
#MATRIX_THEMES='dark-custom'
|
|
||||||
# You can also enable multiple themes by using a comma-separated list.
|
|
||||||
# When multiple themes are enabled, switching between them may require a full page reload.
|
|
||||||
# Note that compilation times are proportional to the number of enabled themes.
|
|
||||||
#MATRIX_THEMES='light,dark'
|
|
||||||
@@ -1,3 +1,2 @@
|
|||||||
src/vector/modernizr.js
|
src/vector/modernizr.js
|
||||||
# Legacy skinning file that some people might still have
|
|
||||||
src/component-index.js
|
src/component-index.js
|
||||||
|
|||||||
73
.eslintrc.js
73
.eslintrc.js
@@ -1,68 +1,23 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
plugins: ["matrix-org"],
|
"extends": ["matrix-org", "matrix-org/react"],
|
||||||
extends: [
|
"env": {
|
||||||
"plugin:matrix-org/babel",
|
"browser": true,
|
||||||
"plugin:matrix-org/react",
|
"node": true,
|
||||||
],
|
|
||||||
env: {
|
|
||||||
browser: true,
|
|
||||||
node: true,
|
|
||||||
},
|
},
|
||||||
rules: {
|
"rules": {
|
||||||
// Things we do that break the ideal style
|
|
||||||
"quotes": "off",
|
"quotes": "off",
|
||||||
},
|
},
|
||||||
settings: {
|
"overrides": [{
|
||||||
react: {
|
"files": ["src/**/*.{ts,tsx}"],
|
||||||
version: 'detect'
|
"extends": ["matrix-org/ts", "matrix-org/react"],
|
||||||
}
|
"env": {
|
||||||
},
|
"browser": true,
|
||||||
overrides: [{
|
},
|
||||||
files: ["src/**/*.{ts,tsx}"],
|
"rules": {
|
||||||
extends: [
|
|
||||||
"plugin:matrix-org/typescript",
|
|
||||||
"plugin:matrix-org/react",
|
|
||||||
],
|
|
||||||
rules: {
|
|
||||||
// Things we do that break the ideal style
|
|
||||||
"prefer-promise-reject-errors": "off",
|
|
||||||
"quotes": "off",
|
"quotes": "off",
|
||||||
|
// While converting to ts we allow this
|
||||||
// We disable this while we're transitioning
|
|
||||||
"@typescript-eslint/no-explicit-any": "off",
|
"@typescript-eslint/no-explicit-any": "off",
|
||||||
|
"prefer-promise-reject-errors": "off",
|
||||||
// Ban matrix-js-sdk/src imports in favour of matrix-js-sdk/src/matrix imports to prevent unleashing hell.
|
|
||||||
"no-restricted-imports": ["error", {
|
|
||||||
"paths": [{
|
|
||||||
"name": "matrix-js-sdk",
|
|
||||||
"message": "Please use matrix-js-sdk/src/matrix instead",
|
|
||||||
}, {
|
|
||||||
"name": "matrix-js-sdk/",
|
|
||||||
"message": "Please use matrix-js-sdk/src/matrix instead",
|
|
||||||
}, {
|
|
||||||
"name": "matrix-js-sdk/src",
|
|
||||||
"message": "Please use matrix-js-sdk/src/matrix instead",
|
|
||||||
}, {
|
|
||||||
"name": "matrix-js-sdk/src/",
|
|
||||||
"message": "Please use matrix-js-sdk/src/matrix instead",
|
|
||||||
}, {
|
|
||||||
"name": "matrix-js-sdk/src/index",
|
|
||||||
"message": "Please use matrix-js-sdk/src/matrix instead",
|
|
||||||
}, {
|
|
||||||
"name": "matrix-react-sdk",
|
|
||||||
"message": "Please use matrix-react-sdk/src/index instead",
|
|
||||||
}, {
|
|
||||||
"name": "matrix-react-sdk/",
|
|
||||||
"message": "Please use matrix-react-sdk/src/index instead",
|
|
||||||
}],
|
|
||||||
"patterns": [{
|
|
||||||
"group": ["matrix-js-sdk/lib", "matrix-js-sdk/lib/", "matrix-js-sdk/lib/**"],
|
|
||||||
"message": "Please use matrix-js-sdk/src/* instead",
|
|
||||||
}, {
|
|
||||||
"group": ["matrix-react-sdk/lib", "matrix-react-sdk/lib/", "matrix-react-sdk/lib/**"],
|
|
||||||
"message": "Please use matrix-react-sdk/src/* instead",
|
|
||||||
}],
|
|
||||||
}],
|
|
||||||
},
|
},
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
|
|||||||
1
.github/CODEOWNERS
vendored
1
.github/CODEOWNERS
vendored
@@ -1 +0,0 @@
|
|||||||
* @vector-im/element-web
|
|
||||||
48
.github/ISSUE_TEMPLATE.md
vendored
Normal file
48
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<!-- A picture's worth a thousand words: PLEASE INCLUDE A SCREENSHOT :P -->
|
||||||
|
|
||||||
|
<!-- Please report security issues by email to security@matrix.org -->
|
||||||
|
|
||||||
|
<!-- This is a bug report template. By following the instructions below and
|
||||||
|
filling out the sections with your information, you will help the us to get all
|
||||||
|
the necessary data to fix your issue.
|
||||||
|
|
||||||
|
You can also preview your report before submitting it. You may remove sections
|
||||||
|
that aren't relevant to your particular case.
|
||||||
|
|
||||||
|
Text between <!-- and --> marks will be invisible in the report.
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Description
|
||||||
|
|
||||||
|
Describe here the problem that you are experiencing, or the feature you are requesting.
|
||||||
|
|
||||||
|
### Steps to reproduce
|
||||||
|
|
||||||
|
- For bugs, list the steps
|
||||||
|
- that reproduce the bug
|
||||||
|
- using hyphens as bullet points
|
||||||
|
|
||||||
|
Describe how what happens differs from what you expected.
|
||||||
|
|
||||||
|
Log: sent/not sent? <!-- You can send us the app's logs via the 'Report bug'
|
||||||
|
link on the 'Settings' page. Very important for hard-to-reproduce bugs. Please
|
||||||
|
file a bug here too! -->
|
||||||
|
|
||||||
|
<!-- Include screenshots if possible: you can drag and drop images below. -->
|
||||||
|
|
||||||
|
### Version information
|
||||||
|
|
||||||
|
<!-- IMPORTANT: please answer the following questions, to help us narrow down the problem -->
|
||||||
|
|
||||||
|
- **Platform**: web (in-browser) or desktop?
|
||||||
|
|
||||||
|
For the web app:
|
||||||
|
|
||||||
|
- **Browser**: Chrome, Firefox, Safari, Edge? which version?
|
||||||
|
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
||||||
|
- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web?
|
||||||
|
|
||||||
|
For the desktop app:
|
||||||
|
|
||||||
|
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
||||||
|
- **Version**: 1.x.y <!-- check the user settings panel if unsure -->
|
||||||
76
.github/ISSUE_TEMPLATE/bug-desktop.yml
vendored
76
.github/ISSUE_TEMPLATE/bug-desktop.yml
vendored
@@ -1,76 +0,0 @@
|
|||||||
name: Bug report for the Element desktop app (not in a browser)
|
|
||||||
description: File a bug report if you are using the desktop Element application.
|
|
||||||
labels: [T-Defect]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for taking the time to fill out this bug report!
|
|
||||||
|
|
||||||
Please report security issues by email to security@matrix.org
|
|
||||||
- type: textarea
|
|
||||||
id: reproduction-steps
|
|
||||||
attributes:
|
|
||||||
label: Steps to reproduce
|
|
||||||
description: Please attach screenshots, videos or logs if you can.
|
|
||||||
placeholder: Tell us what you see!
|
|
||||||
value: |
|
|
||||||
1. Where are you starting? What can you see?
|
|
||||||
2. What do you click?
|
|
||||||
3. More steps…
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: result
|
|
||||||
attributes:
|
|
||||||
label: Outcome
|
|
||||||
placeholder: Tell us what went wrong
|
|
||||||
value: |
|
|
||||||
#### What did you expect?
|
|
||||||
|
|
||||||
#### What happened instead?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: os
|
|
||||||
attributes:
|
|
||||||
label: Operating system
|
|
||||||
placeholder: Windows, macOS, Ubuntu, Arch Linux…
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: version
|
|
||||||
attributes:
|
|
||||||
label: Application version
|
|
||||||
description: You can find the version information in Settings -> Help & About.
|
|
||||||
placeholder: e.g. Element version 1.7.34, olm version 3.2.3
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: source
|
|
||||||
attributes:
|
|
||||||
label: How did you install the app?
|
|
||||||
description: Where did you install the app from? Please give a link or a description.
|
|
||||||
placeholder: e.g. From https://element.io/get-started
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: homeserver
|
|
||||||
attributes:
|
|
||||||
label: Homeserver
|
|
||||||
description: |
|
|
||||||
Which server is your account registered on? If it is a local or non-public homeserver, please tell us what is the homeserver implementation (ex: Synapse/Dendrite/etc.) and the version.
|
|
||||||
placeholder: e.g. matrix.org or Synapse 1.50.0rc1
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: dropdown
|
|
||||||
id: rageshake
|
|
||||||
attributes:
|
|
||||||
label: Will you send logs?
|
|
||||||
description: |
|
|
||||||
Did you know that you can send a /rageshake command from your application to submit logs for this issue? Trigger the defect, then type `/rageshake` into the message input area followed by a description of the problem and send the command. You will be able to add a link to this defect report and submit anonymous logs to the developers.
|
|
||||||
options:
|
|
||||||
- 'Yes'
|
|
||||||
- 'No'
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
84
.github/ISSUE_TEMPLATE/bug-web.yml
vendored
84
.github/ISSUE_TEMPLATE/bug-web.yml
vendored
@@ -1,84 +0,0 @@
|
|||||||
name: Bug report for Element Web (in browser)
|
|
||||||
description: File a bug report if you are using Element in a web browser like Firefox, Chrome, Edge, and so on.
|
|
||||||
labels: [T-Defect]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for taking the time to fill out this bug report!
|
|
||||||
|
|
||||||
Please report security issues by email to security@matrix.org
|
|
||||||
- type: textarea
|
|
||||||
id: reproduction-steps
|
|
||||||
attributes:
|
|
||||||
label: Steps to reproduce
|
|
||||||
description: Please attach screenshots, videos or logs if you can.
|
|
||||||
placeholder: Tell us what you see!
|
|
||||||
value: |
|
|
||||||
1. Where are you starting? What can you see?
|
|
||||||
2. What do you click?
|
|
||||||
3. More steps…
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: result
|
|
||||||
attributes:
|
|
||||||
label: Outcome
|
|
||||||
placeholder: Tell us what went wrong
|
|
||||||
value: |
|
|
||||||
#### What did you expect?
|
|
||||||
|
|
||||||
#### What happened instead?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: os
|
|
||||||
attributes:
|
|
||||||
label: Operating system
|
|
||||||
placeholder: Windows, macOS, Ubuntu, Arch Linux…
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: browser
|
|
||||||
attributes:
|
|
||||||
label: Browser information
|
|
||||||
description: Which browser are you using? Which version?
|
|
||||||
placeholder: e.g. Chromium Version 92.0.4515.131
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: webapp-url
|
|
||||||
attributes:
|
|
||||||
label: URL for webapp
|
|
||||||
description: Which URL are you using to access the webapp? If a private server, tell us what version of Element Web you are using.
|
|
||||||
placeholder: e.g. develop.element.io, app.element.io
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: version
|
|
||||||
attributes:
|
|
||||||
label: Application version
|
|
||||||
description: You can find the version information in Settings -> Help & About.
|
|
||||||
placeholder: e.g. Element version 1.7.34, olm version 3.2.3
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: homeserver
|
|
||||||
attributes:
|
|
||||||
label: Homeserver
|
|
||||||
description: |
|
|
||||||
Which server is your account registered on? If it is a local or non-public homeserver, please tell us what is the homeserver implementation (ex: Synapse/Dendrite/etc.) and the version.
|
|
||||||
placeholder: e.g. matrix.org or Synapse 1.50.0rc1
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: dropdown
|
|
||||||
id: rageshake
|
|
||||||
attributes:
|
|
||||||
label: Will you send logs?
|
|
||||||
description: |
|
|
||||||
Did you know that you can send a /rageshake command from the web application to submit logs for this issue? Trigger the defect, then type `/rageshake` into the message input area followed by a description of the problem and send the command. You will be able to add a link to this defect report and submit anonymous logs to the developers.
|
|
||||||
options:
|
|
||||||
- 'Yes'
|
|
||||||
- 'No'
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
58
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
58
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: ''
|
||||||
|
labels: T-Defect
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- A picture's worth a thousand words: PLEASE INCLUDE A SCREENSHOT :P -->
|
||||||
|
|
||||||
|
<!-- Please report security issues by email to security@matrix.org -->
|
||||||
|
|
||||||
|
<!-- This is a bug report template. By following the instructions below and
|
||||||
|
filling out the sections with your information, you will help the us to get all
|
||||||
|
the necessary data to fix your issue.
|
||||||
|
|
||||||
|
You can also preview your report before submitting it. You may remove sections
|
||||||
|
that aren't relevant to your particular case.
|
||||||
|
|
||||||
|
Text between <!-- and --> marks will be invisible in the report.
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Description
|
||||||
|
|
||||||
|
Describe here the problem that you are experiencing, or the feature you are requesting.
|
||||||
|
|
||||||
|
### Steps to reproduce
|
||||||
|
|
||||||
|
- For bugs, list the steps
|
||||||
|
- that reproduce the bug
|
||||||
|
- using hyphens as bullet points
|
||||||
|
|
||||||
|
Describe how what happens differs from what you expected.
|
||||||
|
|
||||||
|
<!-- Please send us logs for your bug report. They're very important for bugs
|
||||||
|
which are hard to reproduce. To do this, create this issue then go to your
|
||||||
|
account settings and click 'Submit Debug Logs' from the Help & About tab -->
|
||||||
|
Logs being sent: yes/no
|
||||||
|
|
||||||
|
<!-- Include screenshots if possible: you can drag and drop images below. -->
|
||||||
|
|
||||||
|
### Version information
|
||||||
|
|
||||||
|
<!-- IMPORTANT: please answer the following questions, to help us narrow down the problem -->
|
||||||
|
|
||||||
|
- **Platform**: web (in-browser) or desktop?
|
||||||
|
|
||||||
|
For the web app:
|
||||||
|
|
||||||
|
- **Browser**: Chrome, Firefox, Safari, Edge? which version?
|
||||||
|
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
||||||
|
- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web?
|
||||||
|
|
||||||
|
For the desktop app:
|
||||||
|
|
||||||
|
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
|
||||||
|
- **Version**: 1.x.y <!-- check the user settings panel if unsure -->
|
||||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
5
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,5 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: Questions & support
|
|
||||||
url: https://matrix.to/#/#element-web:matrix.org
|
|
||||||
about: Please ask and answer questions here.
|
|
||||||
36
.github/ISSUE_TEMPLATE/enhancement.yml
vendored
36
.github/ISSUE_TEMPLATE/enhancement.yml
vendored
@@ -1,36 +0,0 @@
|
|||||||
name: Enhancement request
|
|
||||||
description: Do you have a suggestion or feature request?
|
|
||||||
labels: [T-Enhancement]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thank you for taking the time to propose a new feature or make a suggestion.
|
|
||||||
- type: textarea
|
|
||||||
id: usecase
|
|
||||||
attributes:
|
|
||||||
label: Your use case
|
|
||||||
description: What would you like to be able to do? Please feel welcome to include screenshots or mock ups.
|
|
||||||
placeholder: Tell us what you would like to do!
|
|
||||||
value: |
|
|
||||||
#### What would you like to do?
|
|
||||||
|
|
||||||
#### Why would you like to do it?
|
|
||||||
|
|
||||||
#### How would you like to achieve it?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: alternative
|
|
||||||
attributes:
|
|
||||||
label: Have you considered any alternatives?
|
|
||||||
placeholder: A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: textarea
|
|
||||||
id: additional-context
|
|
||||||
attributes:
|
|
||||||
label: Additional context
|
|
||||||
placeholder: Is there anything else you'd like to add?
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
20
.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: Suggestion or Feature request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
title: ''
|
||||||
|
labels: T-Enhancement
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your suggestion related to a problem? Please describe.**
|
||||||
|
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
|
**Describe the solution you'd like**
|
||||||
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context or screenshots about the feature request here.
|
||||||
11
.github/PULL_REQUEST_TEMPLATE.md
vendored
11
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,11 +0,0 @@
|
|||||||
<!-- Please read https://github.com/matrix-org/matrix-js-sdk/blob/develop/CONTRIBUTING.md before submitting your pull request -->
|
|
||||||
|
|
||||||
<!-- Include a Sign-Off as described in https://github.com/matrix-org/matrix-js-sdk/blob/develop/CONTRIBUTING.md#sign-off -->
|
|
||||||
|
|
||||||
<!-- To specify text for the changelog entry (otherwise the PR title will be used):
|
|
||||||
Notes:
|
|
||||||
|
|
||||||
Changelog entries will also appear in element-desktop. For PRs that *only* affect the desktop version:
|
|
||||||
Notes: none
|
|
||||||
element-desktop notes: <notes>
|
|
||||||
-->
|
|
||||||
26
.github/workflows/build.yml
vendored
26
.github/workflows/build.yml
vendored
@@ -1,26 +0,0 @@
|
|||||||
name: Build and Package
|
|
||||||
on:
|
|
||||||
pull_request: { }
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
# develop pushes and repository_dispatch handled in build_develop.yaml
|
|
||||||
env:
|
|
||||||
# These must be set for fetchdep.sh to get the right branch
|
|
||||||
REPOSITORY: ${{ github.repository }}
|
|
||||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
name: "Build"
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
cache: 'yarn'
|
|
||||||
|
|
||||||
- name: Install Dependencies
|
|
||||||
run: "./scripts/layered.sh"
|
|
||||||
|
|
||||||
- name: Build & Package
|
|
||||||
run: "./scripts/ci_package.sh"
|
|
||||||
31
.github/workflows/build_develop.yml
vendored
31
.github/workflows/build_develop.yml
vendored
@@ -1,31 +0,0 @@
|
|||||||
# Separate to the main build workflow for access to develop
|
|
||||||
# environment secrets, largely similar to build.yaml.
|
|
||||||
name: Build and Package develop
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ develop ]
|
|
||||||
repository_dispatch:
|
|
||||||
types: [ element-web-notify ]
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
name: "Build & Upload source maps to Sentry"
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
environment: develop
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
cache: 'yarn'
|
|
||||||
|
|
||||||
- name: Install Dependencies
|
|
||||||
run: "./scripts/layered.sh"
|
|
||||||
|
|
||||||
- name: Build, Package & Upload sourcemaps
|
|
||||||
run: "./scripts/ci_package.sh"
|
|
||||||
env:
|
|
||||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
|
||||||
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
|
|
||||||
SENTRY_URL: ${{ secrets.SENTRY_URL }}
|
|
||||||
SENTRY_ORG: sentry
|
|
||||||
SENTRY_PROJECT: riot-web
|
|
||||||
25
.github/workflows/pull_request.yaml
vendored
25
.github/workflows/pull_request.yaml
vendored
@@ -1,25 +0,0 @@
|
|||||||
name: Pull Request
|
|
||||||
on:
|
|
||||||
pull_request_target:
|
|
||||||
types: [ opened, edited, labeled, unlabeled, synchronize ]
|
|
||||||
jobs:
|
|
||||||
changelog:
|
|
||||||
name: Preview Changelog
|
|
||||||
if: github.event.action != 'synchronize'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: matrix-org/allchange@main
|
|
||||||
with:
|
|
||||||
ghToken: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
enforce-label:
|
|
||||||
name: Enforce Labels
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
pull-requests: read
|
|
||||||
steps:
|
|
||||||
- uses: yogevbd/enforce-label-action@2.1.0
|
|
||||||
with:
|
|
||||||
REQUIRED_LABELS_ANY: "T-Defect,T-Enhancement,T-Task"
|
|
||||||
BANNED_LABELS: "X-Blocked"
|
|
||||||
BANNED_LABELS_DESCRIPTION: "Preventing merge whilst PR is marked blocked!"
|
|
||||||
37
.github/workflows/sonarqube.yml
vendored
37
.github/workflows/sonarqube.yml
vendored
@@ -1,37 +0,0 @@
|
|||||||
name: SonarQube
|
|
||||||
on:
|
|
||||||
workflow_run:
|
|
||||||
workflows: [ "Tests" ]
|
|
||||||
types:
|
|
||||||
- completed
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
jobs:
|
|
||||||
prdetails:
|
|
||||||
name: ℹ️ PR Details
|
|
||||||
if: github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'pull_request'
|
|
||||||
uses: matrix-org/matrix-js-sdk/.github/workflows/pr_details.yml@develop
|
|
||||||
with:
|
|
||||||
owner: ${{ github.event.workflow_run.head_repository.owner.login }}
|
|
||||||
branch: ${{ github.event.workflow_run.head_branch }}
|
|
||||||
|
|
||||||
sonarqube:
|
|
||||||
name: 🩻 SonarQube
|
|
||||||
needs: prdetails
|
|
||||||
# Only wait for prdetails if it isn't skipped
|
|
||||||
if: |
|
|
||||||
always() &&
|
|
||||||
(needs.prdetails.result == 'success' || needs.prdetails.result == 'skipped') &&
|
|
||||||
github.event.workflow_run.conclusion == 'success'
|
|
||||||
uses: matrix-org/matrix-js-sdk/.github/workflows/sonarcloud.yml@develop
|
|
||||||
with:
|
|
||||||
repo: ${{ github.event.workflow_run.head_repository.full_name }}
|
|
||||||
pr_id: ${{ needs.prdetails.outputs.pr_id }}
|
|
||||||
head_branch: ${{ needs.prdetails.outputs.head_branch || github.event.workflow_run.head_branch }}
|
|
||||||
base_branch: ${{ needs.prdetails.outputs.base_branch }}
|
|
||||||
revision: ${{ github.event.workflow_run.head_sha }}
|
|
||||||
coverage_workflow_name: tests.yml
|
|
||||||
coverage_run_id: ${{ github.event.workflow_run.id }}
|
|
||||||
secrets:
|
|
||||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
|
||||||
97
.github/workflows/static_analysis.yaml
vendored
97
.github/workflows/static_analysis.yaml
vendored
@@ -1,97 +0,0 @@
|
|||||||
name: Static Analysis
|
|
||||||
on:
|
|
||||||
pull_request: { }
|
|
||||||
push:
|
|
||||||
branches: [ develop, master ]
|
|
||||||
repository_dispatch:
|
|
||||||
types: [ element-web-notify ]
|
|
||||||
env:
|
|
||||||
# These must be set for fetchdep.sh to get the right branch
|
|
||||||
REPOSITORY: ${{ github.repository }}
|
|
||||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
||||||
jobs:
|
|
||||||
ts_lint:
|
|
||||||
name: "Typescript Syntax Check"
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
cache: 'yarn'
|
|
||||||
|
|
||||||
- name: Install Dependencies
|
|
||||||
run: "./scripts/layered.sh"
|
|
||||||
|
|
||||||
- name: Typecheck
|
|
||||||
run: "yarn run lint:types"
|
|
||||||
|
|
||||||
i18n_lint:
|
|
||||||
name: "i18n Check"
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
pull-requests: read
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: "Get modified files"
|
|
||||||
id: changed_files
|
|
||||||
if: github.event_name == 'pull_request'
|
|
||||||
uses: tj-actions/changed-files@v19
|
|
||||||
with:
|
|
||||||
files: |
|
|
||||||
src/i18n/strings/*
|
|
||||||
files_ignore: |
|
|
||||||
src/i18n/strings/en_EN.json
|
|
||||||
- name: "Assert only en_EN was modified"
|
|
||||||
if: |
|
|
||||||
github.event_name == 'pull_request' &&
|
|
||||||
github.actor != 'RiotTranslateBot' &&
|
|
||||||
steps.changed_files.outputs.any_modified == 'true'
|
|
||||||
run: |
|
|
||||||
echo "You can only modify en_EN.json, do not touch any of the other i18n files as Weblate will be confused"
|
|
||||||
exit 1
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
cache: 'yarn'
|
|
||||||
|
|
||||||
# Does not need branch matching as only analyses this layer
|
|
||||||
- name: Install Deps
|
|
||||||
run: "yarn install --pure-lockfile"
|
|
||||||
|
|
||||||
- name: i18n Check
|
|
||||||
run: "yarn run diff-i18n"
|
|
||||||
|
|
||||||
js_lint:
|
|
||||||
name: "ESLint"
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
cache: 'yarn'
|
|
||||||
|
|
||||||
# Does not need branch matching as only analyses this layer
|
|
||||||
- name: Install Deps
|
|
||||||
run: "yarn install --pure-lockfile"
|
|
||||||
|
|
||||||
- name: Run Linter
|
|
||||||
run: "yarn run lint:js"
|
|
||||||
|
|
||||||
style_lint:
|
|
||||||
name: "Style Lint"
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
cache: 'yarn'
|
|
||||||
|
|
||||||
# Does not need branch matching as only analyses this layer
|
|
||||||
- name: Install Deps
|
|
||||||
run: "yarn install --pure-lockfile"
|
|
||||||
|
|
||||||
- name: Run Linter
|
|
||||||
run: "yarn run lint:style"
|
|
||||||
37
.github/workflows/tests.yaml
vendored
37
.github/workflows/tests.yaml
vendored
@@ -1,37 +0,0 @@
|
|||||||
name: Tests
|
|
||||||
on:
|
|
||||||
pull_request: { }
|
|
||||||
push:
|
|
||||||
branches: [ develop, master ]
|
|
||||||
repository_dispatch:
|
|
||||||
types: [ element-web-notify ]
|
|
||||||
env:
|
|
||||||
# These must be set for fetchdep.sh to get the right branch
|
|
||||||
REPOSITORY: ${{ github.repository }}
|
|
||||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
||||||
jobs:
|
|
||||||
jest:
|
|
||||||
name: Jest
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Yarn cache
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
cache: 'yarn'
|
|
||||||
|
|
||||||
- name: Install Dependencies
|
|
||||||
run: "./scripts/layered.sh"
|
|
||||||
|
|
||||||
- name: Run tests with coverage
|
|
||||||
run: "yarn coverage --ci"
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
|
||||||
uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
name: coverage
|
|
||||||
path: |
|
|
||||||
coverage
|
|
||||||
!coverage/lcov-report
|
|
||||||
15
.github/workflows/triage-incoming.yml
vendored
15
.github/workflows/triage-incoming.yml
vendored
@@ -1,15 +0,0 @@
|
|||||||
name: Move new issues into Issue triage board
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [ opened ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
automate-project-columns:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488
|
|
||||||
with:
|
|
||||||
project: Issue triage
|
|
||||||
column: Incoming
|
|
||||||
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
240
.github/workflows/triage-labelled.yml
vendored
240
.github/workflows/triage-labelled.yml
vendored
@@ -1,240 +0,0 @@
|
|||||||
name: Move labelled issues to correct projects
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [ labeled ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
apply_Z-Labs_label:
|
|
||||||
name: Add Z-Labs label for features behind labs flags
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Maths') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Message-Pinning') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-New-Search-Experience') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Location-Sharing') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'Z-IA') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Themes-Custom') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Tags') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Video-Rooms')
|
|
||||||
steps:
|
|
||||||
- uses: actions/github-script@v5
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
github.rest.issues.addLabels({
|
|
||||||
issue_number: context.issue.number,
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
labels: ['Z-Labs']
|
|
||||||
})
|
|
||||||
|
|
||||||
move_needs_info_issues:
|
|
||||||
name: X-Needs-Info issues to Need info column on triage board
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: konradpabjan/move-labeled-or-milestoned-issue@219d384e03fa4b6460cd24f9f37d19eb033a4338
|
|
||||||
with:
|
|
||||||
action-token: "${{ secrets.ELEMENT_BOT_TOKEN }}"
|
|
||||||
project-url: "https://github.com/vector-im/element-web/projects/27"
|
|
||||||
column-name: "Need info"
|
|
||||||
label-name: "X-Needs-Info"
|
|
||||||
|
|
||||||
add_priority_design_issues_to_project:
|
|
||||||
name: P1 X-Needs-Design to Design project board
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
contains(github.event.issue.labels.*.name, 'X-Needs-Design') &&
|
|
||||||
(contains(github.event.issue.labels.*.name, 'S-Critical') &&
|
|
||||||
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'S-Major') &&
|
|
||||||
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A11y') &&
|
|
||||||
contains(github.event.issue.labels.*.name, 'O-Frequent'))
|
|
||||||
steps:
|
|
||||||
- uses: octokit/graphql-action@v2.x
|
|
||||||
id: add_to_project
|
|
||||||
with:
|
|
||||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
|
||||||
query: |
|
|
||||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
|
||||||
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
|
|
||||||
projectNextItem {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
projectid: ${{ env.PROJECT_ID }}
|
|
||||||
contentid: ${{ github.event.issue.node_id }}
|
|
||||||
env:
|
|
||||||
PROJECT_ID: "PN_kwDOAM0swc0sUA"
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
|
|
||||||
add_product_issues:
|
|
||||||
name: X-Needs-Product to Design project board
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
contains(github.event.issue.labels.*.name, 'X-Needs-Product')
|
|
||||||
steps:
|
|
||||||
- uses: octokit/graphql-action@v2.x
|
|
||||||
id: add_to_project
|
|
||||||
with:
|
|
||||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
|
||||||
query: |
|
|
||||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
|
||||||
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
|
|
||||||
projectNextItem {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
projectid: ${{ env.PROJECT_ID }}
|
|
||||||
contentid: ${{ github.event.issue.node_id }}
|
|
||||||
env:
|
|
||||||
PROJECT_ID: "PN_kwDOAM0swc4AAg6N"
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
|
|
||||||
Delight_issues_to_board:
|
|
||||||
name: Delight issues to project board
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-New-Search-Experience') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Spaces') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Space-Settings') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Subspaces') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'Team: Delight') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'Z-IA') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'Z-NewUserJourney')
|
|
||||||
steps:
|
|
||||||
- uses: octokit/graphql-action@v2.x
|
|
||||||
with:
|
|
||||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
|
||||||
query: |
|
|
||||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
|
||||||
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
|
|
||||||
projectNextItem {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
projectid: ${{ env.PROJECT_ID }}
|
|
||||||
contentid: ${{ github.event.issue.node_id }}
|
|
||||||
env:
|
|
||||||
PROJECT_ID: "PN_kwDOAM0swc1HvQ"
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
|
|
||||||
move_voice-message_issues:
|
|
||||||
name: A-Voice Messages to voice message board
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Voice Messages')
|
|
||||||
steps:
|
|
||||||
- uses: octokit/graphql-action@v2.x
|
|
||||||
with:
|
|
||||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
|
||||||
query: |
|
|
||||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
|
||||||
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
|
|
||||||
projectNextItem {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
projectid: ${{ env.PROJECT_ID }}
|
|
||||||
contentid: ${{ github.event.issue.node_id }}
|
|
||||||
env:
|
|
||||||
PROJECT_ID: "PN_kwDOAM0swc2KCw"
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
|
|
||||||
move_threads_issues:
|
|
||||||
name: A-Threads to Thread board
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Threads')
|
|
||||||
steps:
|
|
||||||
- uses: octokit/graphql-action@v2.x
|
|
||||||
with:
|
|
||||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
|
||||||
query: |
|
|
||||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
|
||||||
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
|
|
||||||
projectNextItem {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
projectid: ${{ env.PROJECT_ID }}
|
|
||||||
contentid: ${{ github.event.issue.node_id }}
|
|
||||||
env:
|
|
||||||
PROJECT_ID: "PN_kwDOAM0swc0rRA"
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
|
|
||||||
move_message_bubbles_issues:
|
|
||||||
name: A-Message-Bubbles to Message bubbles board
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Message-Bubbles')
|
|
||||||
steps:
|
|
||||||
- uses: octokit/graphql-action@v2.x
|
|
||||||
with:
|
|
||||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
|
||||||
query: |
|
|
||||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
|
||||||
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
|
|
||||||
projectNextItem {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
projectid: ${{ env.PROJECT_ID }}
|
|
||||||
contentid: ${{ github.event.issue.node_id }}
|
|
||||||
env:
|
|
||||||
PROJECT_ID: "PN_kwDOAM0swc3m-g"
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
|
|
||||||
move_ftue_issues:
|
|
||||||
name: Z-FTUE issues to the FTUE project board
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
contains(github.event.issue.labels.*.name, 'Z-FTUE')
|
|
||||||
steps:
|
|
||||||
- uses: octokit/graphql-action@v2.x
|
|
||||||
with:
|
|
||||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
|
||||||
query: |
|
|
||||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
|
||||||
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
|
|
||||||
projectNextItem {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
projectid: ${{ env.PROJECT_ID }}
|
|
||||||
contentid: ${{ github.event.issue.node_id }}
|
|
||||||
env:
|
|
||||||
PROJECT_ID: "PN_kwDOAM0swc4AAqVx"
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
|
|
||||||
move_WTF_issues:
|
|
||||||
name: Z-WTF issues to the WTF project board
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
contains(github.event.issue.labels.*.name, 'Z-WTF')
|
|
||||||
steps:
|
|
||||||
- uses: octokit/graphql-action@v2.x
|
|
||||||
with:
|
|
||||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
|
||||||
query: |
|
|
||||||
mutation add_to_project($projectid:ID!,$contentid:ID!) {
|
|
||||||
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
|
|
||||||
projectNextItem {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
projectid: ${{ env.PROJECT_ID }}
|
|
||||||
contentid: ${{ github.event.issue.node_id }}
|
|
||||||
env:
|
|
||||||
PROJECT_ID: "PN_kwDOAM0swc4AArk0"
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
139
.github/workflows/triage-move-review-requests.yml
vendored
139
.github/workflows/triage-move-review-requests.yml
vendored
@@ -1,139 +0,0 @@
|
|||||||
name: Move pull requests asking for review to the relevant project
|
|
||||||
on:
|
|
||||||
pull_request_target:
|
|
||||||
types: [ review_requested ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
add_design_pr_to_project:
|
|
||||||
name: Move PRs asking for design review to the design board
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: octokit/graphql-action@v2.x
|
|
||||||
id: find_team_members
|
|
||||||
with:
|
|
||||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
|
||||||
query: |
|
|
||||||
query find_team_members($team: String!) {
|
|
||||||
organization(login: "vector-im") {
|
|
||||||
team(slug: $team) {
|
|
||||||
members {
|
|
||||||
nodes {
|
|
||||||
login
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
team: ${{ env.TEAM }}
|
|
||||||
env:
|
|
||||||
TEAM: "design"
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
- id: any_matching_reviewers
|
|
||||||
run: |
|
|
||||||
# Fetch requested reviewers, and people who are on the team
|
|
||||||
echo '${{ tojson(fromjson(steps.find_team_members.outputs.data).organization.team.members.nodes[*].login) }}' | tee /tmp/team_members.json
|
|
||||||
echo '${{ tojson(github.event.pull_request.requested_reviewers[*].login) }}' | tee /tmp/reviewers.json
|
|
||||||
jq --raw-output .[] < /tmp/team_members.json | sort | tee /tmp/team_members.txt
|
|
||||||
jq --raw-output .[] < /tmp/reviewers.json | sort | tee /tmp/reviewers.txt
|
|
||||||
|
|
||||||
# Fetch requested team reviewers, and the name of the team
|
|
||||||
echo '${{ tojson(github.event.pull_request.requested_teams[*].slug) }}' | tee /tmp/team_reviewers.json
|
|
||||||
jq --raw-output .[] < /tmp/team_reviewers.json | sort | tee /tmp/team_reviewers.txt
|
|
||||||
echo '${{ env.TEAM }}' | tee /tmp/team.txt
|
|
||||||
|
|
||||||
# If either a reviewer matches a team member, or a team matches our team, say "true"
|
|
||||||
if [ $(join /tmp/team_members.txt /tmp/reviewers.txt | wc -l) != 0 ]; then
|
|
||||||
echo "::set-output name=match::true"
|
|
||||||
elif [ $(join /tmp/team.txt /tmp/team_reviewers.txt | wc -l) != 0 ]; then
|
|
||||||
echo "::set-output name=match::true"
|
|
||||||
else
|
|
||||||
echo "::set-output name=match::false"
|
|
||||||
fi
|
|
||||||
env:
|
|
||||||
TEAM: "design"
|
|
||||||
- uses: octokit/graphql-action@v2.x
|
|
||||||
id: add_to_project
|
|
||||||
if: steps.any_matching_reviewers.outputs.match == 'true'
|
|
||||||
with:
|
|
||||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
|
||||||
query: |
|
|
||||||
mutation add_to_project($projectid:ID!, $contentid:ID!) {
|
|
||||||
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
|
|
||||||
projectNextItem {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
projectid: ${{ env.PROJECT_ID }}
|
|
||||||
contentid: ${{ github.event.pull_request.node_id }}
|
|
||||||
env:
|
|
||||||
PROJECT_ID: "PN_kwDOAM0swc0sUA"
|
|
||||||
TEAM: "design"
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
|
|
||||||
add_product_pr_to_project:
|
|
||||||
name: Move PRs asking for design review to the design board
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: octokit/graphql-action@v2.x
|
|
||||||
id: find_team_members
|
|
||||||
with:
|
|
||||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
|
||||||
query: |
|
|
||||||
query find_team_members($team: String!) {
|
|
||||||
organization(login: "vector-im") {
|
|
||||||
team(slug: $team) {
|
|
||||||
members {
|
|
||||||
nodes {
|
|
||||||
login
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
team: ${{ env.TEAM }}
|
|
||||||
env:
|
|
||||||
TEAM: "product"
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
- id: any_matching_reviewers
|
|
||||||
run: |
|
|
||||||
# Fetch requested reviewers, and people who are on the team
|
|
||||||
echo '${{ tojson(fromjson(steps.find_team_members.outputs.data).organization.team.members.nodes[*].login) }}' | tee /tmp/team_members.json
|
|
||||||
echo '${{ tojson(github.event.pull_request.requested_reviewers[*].login) }}' | tee /tmp/reviewers.json
|
|
||||||
jq --raw-output .[] < /tmp/team_members.json | sort | tee /tmp/team_members.txt
|
|
||||||
jq --raw-output .[] < /tmp/reviewers.json | sort | tee /tmp/reviewers.txt
|
|
||||||
|
|
||||||
# Fetch requested team reviewers, and the name of the team
|
|
||||||
echo '${{ tojson(github.event.pull_request.requested_teams[*].slug) }}' | tee /tmp/team_reviewers.json
|
|
||||||
jq --raw-output .[] < /tmp/team_reviewers.json | sort | tee /tmp/team_reviewers.txt
|
|
||||||
echo '${{ env.TEAM }}' | tee /tmp/team.txt
|
|
||||||
|
|
||||||
# If either a reviewer matches a team member, or a team matches our team, say "true"
|
|
||||||
if [ $(join /tmp/team_members.txt /tmp/reviewers.txt | wc -l) != 0 ]; then
|
|
||||||
echo "::set-output name=match::true"
|
|
||||||
elif [ $(join /tmp/team.txt /tmp/team_reviewers.txt | wc -l) != 0 ]; then
|
|
||||||
echo "::set-output name=match::true"
|
|
||||||
else
|
|
||||||
echo "::set-output name=match::false"
|
|
||||||
fi
|
|
||||||
env:
|
|
||||||
TEAM: "product"
|
|
||||||
- uses: octokit/graphql-action@v2.x
|
|
||||||
id: add_to_project
|
|
||||||
if: steps.any_matching_reviewers.outputs.match == 'true'
|
|
||||||
with:
|
|
||||||
headers: '{"GraphQL-Features": "projects_next_graphql"}'
|
|
||||||
query: |
|
|
||||||
mutation add_to_project($projectid:ID!, $contentid:ID!) {
|
|
||||||
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
|
|
||||||
projectNextItem {
|
|
||||||
id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
projectid: ${{ env.PROJECT_ID }}
|
|
||||||
contentid: ${{ github.event.pull_request.node_id }}
|
|
||||||
env:
|
|
||||||
PROJECT_ID: "PN_kwDOAM0swc4AAg6N"
|
|
||||||
TEAM: "product"
|
|
||||||
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
56
.github/workflows/triage-priority-bugs.yml
vendored
56
.github/workflows/triage-priority-bugs.yml
vendored
@@ -1,56 +0,0 @@
|
|||||||
name: Move P1 bugs to boards
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [ labeled, unlabeled ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
p1_issues_to_team_workboard:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
(!contains(github.event.issue.labels.*.name, 'A-E2EE') &&
|
|
||||||
!contains(github.event.issue.labels.*.name, 'A-E2EE-Cross-Signing') &&
|
|
||||||
!contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') &&
|
|
||||||
!contains(github.event.issue.labels.*.name, 'A-E2EE-Key-Backup') &&
|
|
||||||
!contains(github.event.issue.labels.*.name, 'A-E2EE-SAS-Verification') &&
|
|
||||||
!contains(github.event.issue.labels.*.name, 'A-Spaces') &&
|
|
||||||
!contains(github.event.issue.labels.*.name, 'A-Spaces-Settings') &&
|
|
||||||
!contains(github.event.issue.labels.*.name, 'A-Subspaces')) &&
|
|
||||||
(contains(github.event.issue.labels.*.name, 'T-Defect') &&
|
|
||||||
contains(github.event.issue.labels.*.name, 'S-Critical') &&
|
|
||||||
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'S-Major') &&
|
|
||||||
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A11y') &&
|
|
||||||
contains(github.event.issue.labels.*.name, 'O-Frequent'))
|
|
||||||
steps:
|
|
||||||
- uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488
|
|
||||||
with:
|
|
||||||
project: Web App Team
|
|
||||||
column: P1
|
|
||||||
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
|
|
||||||
P1_issues_to_crypto_team_workboard:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
contains(github.event.issue.labels.*.name, 'Z-UISI') ||
|
|
||||||
(contains(github.event.issue.labels.*.name, 'A-E2EE') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-E2EE-Cross-Signing') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-E2EE-Key-Backup') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-E2EE-SAS-Verification')) &&
|
|
||||||
(contains(github.event.issue.labels.*.name, 'T-Defect') &&
|
|
||||||
contains(github.event.issue.labels.*.name, 'S-Critical') &&
|
|
||||||
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'S-Major') &&
|
|
||||||
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A11y') &&
|
|
||||||
contains(github.event.issue.labels.*.name, 'O-Frequent'))
|
|
||||||
steps:
|
|
||||||
- uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488
|
|
||||||
with:
|
|
||||||
project: Crypto Team
|
|
||||||
column: Ready
|
|
||||||
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
70
.github/workflows/triage-unlabelled.yml
vendored
70
.github/workflows/triage-unlabelled.yml
vendored
@@ -1,70 +0,0 @@
|
|||||||
name: Move unlabelled from needs info columns to triaged
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [ unlabeled ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Move_Unabeled_Issue_On_Project_Board:
|
|
||||||
name: Move no longer X-Needs-Info issues to Triaged
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
${{
|
|
||||||
!contains(github.event.issue.labels.*.name, 'X-Needs-Info') }}
|
|
||||||
env:
|
|
||||||
BOARD_NAME: "Issue triage"
|
|
||||||
OWNER: ${{ github.repository_owner }}
|
|
||||||
REPO: ${{ github.event.repository.name }}
|
|
||||||
ISSUE: ${{ github.event.issue.number }}
|
|
||||||
steps:
|
|
||||||
- name: Check if issue is already in "${{ env.BOARD_NAME }}"
|
|
||||||
run: |
|
|
||||||
json=$(curl -s -H 'Content-Type: application/json' -H "Authorization: bearer ${{ secrets.GITHUB_TOKEN }}" -X POST -d '{"query": "query($issue: Int!, $owner: String!, $repo: String!) { repository(owner: $owner, name: $repo) { issue(number: $issue) { projectCards { nodes { project { name } isArchived } } } } } ", "variables" : "{ \"issue\": '${ISSUE}', \"owner\": \"'${OWNER}'\", \"repo\": \"'${REPO}'\" }" }' https://api.github.com/graphql)
|
|
||||||
if echo $json | jq '.data.repository.issue.projectCards.nodes | length'; then
|
|
||||||
if [[ $(echo $json | jq '.data.repository.issue.projectCards.nodes[0].project.name') =~ "${BOARD_NAME}" ]]; then
|
|
||||||
if [[ $(echo $json | jq '.data.repository.issue.projectCards.nodes[0].isArchived') == 'true' ]]; then
|
|
||||||
echo "Issue is already in Project '$BOARD_NAME', but is archived - skipping workflow";
|
|
||||||
echo "SKIP_ACTION=true" >> $GITHUB_ENV
|
|
||||||
else
|
|
||||||
echo "Issue is already in Project '$BOARD_NAME', proceeding";
|
|
||||||
echo "ALREADY_IN_BOARD=true" >> $GITHUB_ENV
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Issue is not in project '$BOARD_NAME', cancelling this workflow"
|
|
||||||
echo "ALREADY_IN_BOARD=false" >> $GITHUB_ENV
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
- name: Move issue
|
|
||||||
uses: alex-page/github-project-automation-plus@bb266ff4dde9242060e2d5418e120a133586d488
|
|
||||||
if: ${{ env.ALREADY_IN_BOARD == 'true' && env.SKIP_ACTION != 'true' }}
|
|
||||||
with:
|
|
||||||
project: Issue triage
|
|
||||||
column: Triaged
|
|
||||||
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
|
|
||||||
remove_Z-Labs_label:
|
|
||||||
name: Remove Z-Labs label when features behind labs flags are removed
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: >
|
|
||||||
!(contains(github.event.issue.labels.*.name, 'A-Maths') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Message-Pinning') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Threads') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Polls') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Location-Sharing') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Message-Bubbles') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'Z-IA') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Themes-Custom') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Tags') ||
|
|
||||||
contains(github.event.issue.labels.*.name, 'A-Video-Rooms')) &&
|
|
||||||
contains(github.event.issue.labels.*.name, 'Z-Labs')
|
|
||||||
steps:
|
|
||||||
- uses: actions/github-script@v5
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
github.rest.issues.removeLabel({
|
|
||||||
issue_number: context.issue.number,
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
name: ['Z-Labs']
|
|
||||||
})
|
|
||||||
8
.github/workflows/upgrade_dependencies.yml
vendored
8
.github/workflows/upgrade_dependencies.yml
vendored
@@ -1,8 +0,0 @@
|
|||||||
name: Upgrade Dependencies
|
|
||||||
on:
|
|
||||||
workflow_dispatch: { }
|
|
||||||
jobs:
|
|
||||||
upgrade:
|
|
||||||
uses: matrix-org/matrix-js-sdk/.github/workflows/upgrade_dependencies.yml@develop
|
|
||||||
secrets:
|
|
||||||
ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -16,10 +16,6 @@ electron/pub
|
|||||||
/config.json
|
/config.json
|
||||||
/config.json.*
|
/config.json.*
|
||||||
/config.local*.json
|
/config.local*.json
|
||||||
# Legacy skinning file that some people might still have
|
|
||||||
/src/component-index.js
|
/src/component-index.js
|
||||||
/.tmp
|
/.tmp
|
||||||
/webpack-stats.json
|
/webpack-stats.json
|
||||||
.vscode
|
|
||||||
.vscode/
|
|
||||||
.env
|
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
{
|
{
|
||||||
"minify": true,
|
"minify": true,
|
||||||
"enableClasses": false,
|
"classPrefix": "modernizr_",
|
||||||
|
"options": [
|
||||||
|
"setClasses"
|
||||||
|
],
|
||||||
"feature-detects": [
|
"feature-detects": [
|
||||||
"test/css/animations",
|
"test/css/animations",
|
||||||
"test/css/displaytable",
|
"test/css/displaytable",
|
||||||
@@ -30,7 +33,6 @@
|
|||||||
"test/iframe/sandbox",
|
"test/iframe/sandbox",
|
||||||
"test/json",
|
"test/json",
|
||||||
"test/network/fetch",
|
"test/network/fetch",
|
||||||
"test/storage/localstorage",
|
"test/storage/localstorage"
|
||||||
"test/window/resizeobserver"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
2488
CHANGELOG.md
2488
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@@ -1,4 +0,0 @@
|
|||||||
Contributing code to Element
|
|
||||||
============================
|
|
||||||
|
|
||||||
Element follows the same pattern as the [matrix-js-sdk](https://github.com/matrix-org/matrix-js-sdk/blob/develop/CONTRIBUTING.md).
|
|
||||||
4
CONTRIBUTING.rst
Normal file
4
CONTRIBUTING.rst
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
Contributing code to Element
|
||||||
|
============================
|
||||||
|
|
||||||
|
Element follows the same pattern as https://github.com/matrix-org/matrix-js-sdk/blob/master/CONTRIBUTING.rst.
|
||||||
17
Dockerfile
17
Dockerfile
@@ -9,19 +9,25 @@ ARG REACT_SDK_BRANCH="master"
|
|||||||
ARG JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git"
|
ARG JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git"
|
||||||
ARG JS_SDK_BRANCH="master"
|
ARG JS_SDK_BRANCH="master"
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y git dos2unix
|
RUN apt-get update && apt-get install -y git dos2unix \
|
||||||
|
# These packages are required for building Canvas on architectures like Arm
|
||||||
|
# See https://www.npmjs.com/package/canvas#compiling
|
||||||
|
build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
|
||||||
|
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
|
|
||||||
COPY . /src
|
COPY . /src
|
||||||
RUN dos2unix /src/scripts/docker-link-repos.sh && bash /src/scripts/docker-link-repos.sh
|
RUN dos2unix /src/scripts/docker-link-repos.sh && bash /src/scripts/docker-link-repos.sh
|
||||||
RUN yarn --network-timeout=100000 install
|
RUN yarn --network-timeout=100000 install
|
||||||
|
RUN yarn build
|
||||||
RUN dos2unix /src/scripts/docker-package.sh && bash /src/scripts/docker-package.sh
|
|
||||||
|
|
||||||
# Copy the config now so that we don't create another layer in the app image
|
# Copy the config now so that we don't create another layer in the app image
|
||||||
RUN cp /src/config.sample.json /src/webapp/config.json
|
RUN cp /src/config.sample.json /src/webapp/config.json
|
||||||
|
|
||||||
|
# Ensure we populate the version file
|
||||||
|
RUN dos2unix /src/scripts/docker-write-version.sh && bash /src/scripts/docker-write-version.sh
|
||||||
|
|
||||||
|
|
||||||
# App
|
# App
|
||||||
FROM nginx:alpine
|
FROM nginx:alpine
|
||||||
|
|
||||||
@@ -30,8 +36,5 @@ COPY --from=builder /src/webapp /app
|
|||||||
# Insert wasm type into Nginx mime.types file so they load correctly.
|
# Insert wasm type into Nginx mime.types file so they load correctly.
|
||||||
RUN sed -i '3i\ \ \ \ application/wasm wasm\;' /etc/nginx/mime.types
|
RUN sed -i '3i\ \ \ \ application/wasm wasm\;' /etc/nginx/mime.types
|
||||||
|
|
||||||
# Override default nginx config
|
|
||||||
COPY /nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf
|
|
||||||
|
|
||||||
RUN rm -rf /usr/share/nginx/html \
|
RUN rm -rf /usr/share/nginx/html \
|
||||||
&& ln -s /app /usr/share/nginx/html
|
&& ln -s /app /usr/share/nginx/html
|
||||||
|
|||||||
203
README.md
203
README.md
@@ -1,12 +1,3 @@
|
|||||||
[](https://matrix.to/#/#element-web:matrix.org)
|
|
||||||

|
|
||||||

|
|
||||||
[](https://translate.element.io/engage/element-web/)
|
|
||||||
[](https://sonarcloud.io/summary/new_code?id=element-web)
|
|
||||||
[](https://sonarcloud.io/summary/new_code?id=element-web)
|
|
||||||
[](https://sonarcloud.io/summary/new_code?id=element-web)
|
|
||||||
[](https://sonarcloud.io/summary/new_code?id=element-web)
|
|
||||||
|
|
||||||
Element
|
Element
|
||||||
=======
|
=======
|
||||||
|
|
||||||
@@ -39,23 +30,23 @@ and [element-ios](https://github.com/vector-im/element-ios).
|
|||||||
Getting Started
|
Getting Started
|
||||||
===============
|
===============
|
||||||
|
|
||||||
The easiest way to test Element is to just use the hosted copy at <https://app.element.io>.
|
The easiest way to test Element is to just use the hosted copy at https://app.element.io.
|
||||||
The `develop` branch is continuously deployed to <https://develop.element.io>
|
The `develop` branch is continuously deployed to https://develop.element.io
|
||||||
for those who like living dangerously.
|
for those who like living dangerously.
|
||||||
|
|
||||||
To host your own copy of Element, the quickest bet is to use a pre-built
|
To host your own copy of Element, the quickest bet is to use a pre-built
|
||||||
released version of Element:
|
released version of Element:
|
||||||
|
|
||||||
1. Download the latest version from <https://github.com/vector-im/element-web/releases>
|
1. Download the latest version from https://github.com/vector-im/element-web/releases
|
||||||
1. Untar the tarball on your web server
|
1. Untar the tarball on your web server
|
||||||
1. Move (or symlink) the `element-x.x.x` directory to an appropriate name
|
1. Move (or symlink) the `element-x.x.x` directory to an appropriate name
|
||||||
1. Configure the correct caching headers in your webserver (see below)
|
1. Configure the correct caching headers in your webserver (see below)
|
||||||
1. Configure the app by copying `config.sample.json` to `config.json` and
|
1. If desired, copy `config.sample.json` to `config.json` and edit it
|
||||||
modifying it. See the [configuration docs](docs/config.md) for details.
|
as desired. See the [configuration docs](docs/config.md) for details.
|
||||||
1. Enter the URL into your browser and log into Element!
|
1. Enter the URL into your browser and log into Element!
|
||||||
|
|
||||||
Releases are signed using gpg and the OpenPGP standard, and can be checked against the public key located
|
Releases are signed using gpg and the OpenPGP standard, and can be checked against the public key located
|
||||||
at <https://packages.riot.im/element-release-key.asc>.
|
at https://packages.riot.im/element-release-key.asc.
|
||||||
|
|
||||||
Note that for the security of your chats will need to serve Element
|
Note that for the security of your chats will need to serve Element
|
||||||
over HTTPS. Major browsers also do not allow you to use VoIP/video
|
over HTTPS. Major browsers also do not allow you to use VoIP/video
|
||||||
@@ -81,7 +72,7 @@ access to Element (or other apps) due to sharing the same domain.
|
|||||||
|
|
||||||
We have put some coarse mitigations into place to try to protect against this
|
We have put some coarse mitigations into place to try to protect against this
|
||||||
situation, but it's still not good practice to do it in the first place. See
|
situation, but it's still not good practice to do it in the first place. See
|
||||||
<https://github.com/vector-im/element-web/issues/1977> for more details.
|
https://github.com/vector-im/element-web/issues/1977 for more details.
|
||||||
|
|
||||||
Configuration best practices
|
Configuration best practices
|
||||||
----------------------------
|
----------------------------
|
||||||
@@ -89,15 +80,15 @@ Configuration best practices
|
|||||||
Unless you have special requirements, you will want to add the following to
|
Unless you have special requirements, you will want to add the following to
|
||||||
your web server configuration when hosting Element Web:
|
your web server configuration when hosting Element Web:
|
||||||
|
|
||||||
* The `X-Frame-Options: SAMEORIGIN` header, to prevent Element Web from being
|
- The `X-Frame-Options: SAMEORIGIN` header, to prevent Element Web from being
|
||||||
framed and protect from [clickjacking][owasp-clickjacking].
|
framed and protect from [clickjacking][owasp-clickjacking].
|
||||||
* The `frame-ancestors 'none'` directive to your `Content-Security-Policy`
|
- The `frame-ancestors 'none'` directive to your `Content-Security-Policy`
|
||||||
header, as the modern replacement for `X-Frame-Options` (though both should be
|
header, as the modern replacement for `X-Frame-Options` (though both should be
|
||||||
included since not all browsers support it yet, see
|
included since not all browsers support it yet, see
|
||||||
[this][owasp-clickjacking-csp]).
|
[this][owasp-clickjacking-csp]).
|
||||||
* The `X-Content-Type-Options: nosniff` header, to [disable MIME
|
- The `X-Content-Type-Options: nosniff` header, to [disable MIME
|
||||||
sniffing][mime-sniffing].
|
sniffing][mime-sniffing].
|
||||||
* The `X-XSS-Protection: 1; mode=block;` header, for basic XSS protection in
|
- The `X-XSS-Protection: 1; mode=block;` header, for basic XSS protection in
|
||||||
legacy browsers.
|
legacy browsers.
|
||||||
|
|
||||||
[mime-sniffing]:
|
[mime-sniffing]:
|
||||||
@@ -131,15 +122,15 @@ Ensure you have the latest LTS version of Node.js installed.
|
|||||||
Using `yarn` instead of `npm` is recommended. Please see the Yarn [install
|
Using `yarn` instead of `npm` is recommended. Please see the Yarn [install
|
||||||
guide](https://classic.yarnpkg.com/en/docs/install) if you do not have it already.
|
guide](https://classic.yarnpkg.com/en/docs/install) if you do not have it already.
|
||||||
|
|
||||||
1. Install or update `node.js` so that your `node` is at least the current recommended LTS.
|
1. Install or update `node.js` so that your `node` is at least v10.x.
|
||||||
1. Install `yarn` if not present already.
|
1. Install `yarn` if not present already.
|
||||||
1. Clone the repo: `git clone https://github.com/vector-im/element-web.git`.
|
1. Clone the repo: `git clone https://github.com/vector-im/element-web.git`.
|
||||||
1. Switch to the element-web directory: `cd element-web`.
|
1. Switch to the element-web directory: `cd element-web`.
|
||||||
1. Install the prerequisites: `yarn install`.
|
1. Install the prerequisites: `yarn install`.
|
||||||
* If you're using the `develop` branch, then it is recommended to set up a
|
* If you're using the `develop` branch, then it is recommended to set up a
|
||||||
proper development environment (see [Setting up a dev
|
proper development environment (see [Setting up a dev
|
||||||
environment](#setting-up-a-dev-environment) below). Alternatively, you
|
environment](#setting-up-a-dev-environment) below). Alternatively, you
|
||||||
can use <https://develop.element.io> - the continuous integration release of
|
can use https://develop.element.io - the continuous integration release of
|
||||||
the develop branch.
|
the develop branch.
|
||||||
1. Configure the app by copying `config.sample.json` to `config.json` and
|
1. Configure the app by copying `config.sample.json` to `config.json` and
|
||||||
modifying it. See the [configuration docs](docs/config.md) for details.
|
modifying it. See the [configuration docs](docs/config.md) for details.
|
||||||
@@ -157,16 +148,15 @@ Running as a Desktop app
|
|||||||
========================
|
========================
|
||||||
|
|
||||||
Element can also be run as a desktop app, wrapped in Electron. You can download a
|
Element can also be run as a desktop app, wrapped in Electron. You can download a
|
||||||
pre-built version from <https://element.io/get-started> or, if you prefer,
|
pre-built version from https://element.io/get-started or, if you prefer,
|
||||||
build it yourself.
|
build it yourself.
|
||||||
|
|
||||||
To build it yourself, follow the instructions at <https://github.com/vector-im/element-desktop>.
|
To build it yourself, follow the instructions at https://github.com/vector-im/element-desktop.
|
||||||
|
|
||||||
Many thanks to @aviraldg for the initial work on the Electron integration.
|
Many thanks to @aviraldg for the initial work on the Electron integration.
|
||||||
|
|
||||||
Other options for running as a desktop app:
|
Other options for running as a desktop app:
|
||||||
|
* @asdf:matrix.org points out that you can use nativefier and it just works(tm)
|
||||||
* @asdf:matrix.org points out that you can use nativefier and it just works(tm)
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn global add nativefier
|
yarn global add nativefier
|
||||||
@@ -181,7 +171,6 @@ Running from Docker
|
|||||||
|
|
||||||
The Docker image can be used to serve element-web as a web server. The easiest way to use
|
The Docker image can be used to serve element-web as a web server. The easiest way to use
|
||||||
it is to use the prebuilt image:
|
it is to use the prebuilt image:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -p 80:80 vectorim/element-web
|
docker run -p 80:80 vectorim/element-web
|
||||||
```
|
```
|
||||||
@@ -189,13 +178,11 @@ docker run -p 80:80 vectorim/element-web
|
|||||||
To supply your own custom `config.json`, map a volume to `/app/config.json`. For example,
|
To supply your own custom `config.json`, map a volume to `/app/config.json`. For example,
|
||||||
if your custom config was located at `/etc/element-web/config.json` then your Docker command
|
if your custom config was located at `/etc/element-web/config.json` then your Docker command
|
||||||
would be:
|
would be:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -p 80:80 -v /etc/element-web/config.json:/app/config.json vectorim/element-web
|
docker run -p 80:80 -v /etc/element-web/config.json:/app/config.json vectorim/element-web
|
||||||
```
|
```
|
||||||
|
|
||||||
To build the image yourself:
|
To build the image yourself:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/vector-im/element-web.git element-web
|
git clone https://github.com/vector-im/element-web.git element-web
|
||||||
cd element-web
|
cd element-web
|
||||||
@@ -205,7 +192,6 @@ docker build .
|
|||||||
|
|
||||||
If you're building a custom branch, or want to use the develop branch, check out the appropriate
|
If you're building a custom branch, or want to use the develop branch, check out the appropriate
|
||||||
element-web branch and then run:
|
element-web branch and then run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker build -t \
|
docker build -t \
|
||||||
--build-arg USE_CUSTOM_SDKS=true \
|
--build-arg USE_CUSTOM_SDKS=true \
|
||||||
@@ -216,12 +202,6 @@ docker build -t \
|
|||||||
.
|
.
|
||||||
```
|
```
|
||||||
|
|
||||||
Running in Kubernetes
|
|
||||||
=====================
|
|
||||||
|
|
||||||
The provided element-web docker image can also be run from within a Kubernetes cluster.
|
|
||||||
See the [Kubernetes example](docs/kubernetes.md) for more details.
|
|
||||||
|
|
||||||
config.json
|
config.json
|
||||||
===========
|
===========
|
||||||
|
|
||||||
@@ -238,7 +218,6 @@ Caching requirements
|
|||||||
====================
|
====================
|
||||||
|
|
||||||
Element requires the following URLs not to be cached, when/if you are serving Element from your own webserver:
|
Element requires the following URLs not to be cached, when/if you are serving Element from your own webserver:
|
||||||
|
|
||||||
```
|
```
|
||||||
/config.*.json
|
/config.*.json
|
||||||
/i18n
|
/i18n
|
||||||
@@ -247,11 +226,6 @@ Element requires the following URLs not to be cached, when/if you are serving El
|
|||||||
/index.html
|
/index.html
|
||||||
```
|
```
|
||||||
|
|
||||||
We also recommend that you force browsers to re-validate any cached copy of Element on page load by configuring your
|
|
||||||
webserver to return `Cache-Control: no-cache` for `/`. This ensures the browser will fetch a new version of Element on
|
|
||||||
the next page load after it's been deployed. Note that this is already configured for you in the nginx config of our
|
|
||||||
Dockerfile.
|
|
||||||
|
|
||||||
Development
|
Development
|
||||||
===========
|
===========
|
||||||
|
|
||||||
@@ -259,11 +233,10 @@ Before attempting to develop on Element you **must** read the [developer guide
|
|||||||
for `matrix-react-sdk`](https://github.com/matrix-org/matrix-react-sdk#developer-guide), which
|
for `matrix-react-sdk`](https://github.com/matrix-org/matrix-react-sdk#developer-guide), which
|
||||||
also defines the design, architecture and style for Element too.
|
also defines the design, architecture and style for Element too.
|
||||||
|
|
||||||
Read the [Choosing an issue](docs/choosing-an-issue.md) page for some guidance
|
Before starting work on a feature, it's best to ensure your plan aligns well
|
||||||
about where to start. Before starting work on a feature, it's best to ensure
|
with our vision for Element. Please chat with the team in
|
||||||
your plan aligns well with our vision for Element. Please chat with the team in
|
[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) before you
|
||||||
[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) before
|
start so we can ensure it's something we'd be willing to merge.
|
||||||
you start so we can ensure it's something we'd be willing to merge.
|
|
||||||
|
|
||||||
You should also familiarise yourself with the ["Here be Dragons" guide
|
You should also familiarise yourself with the ["Here be Dragons" guide
|
||||||
](https://docs.google.com/document/d/12jYzvkidrp1h7liEuLIe6BMdU0NUjndUYI971O06ooM)
|
](https://docs.google.com/document/d/12jYzvkidrp1h7liEuLIe6BMdU0NUjndUYI971O06ooM)
|
||||||
@@ -274,15 +247,14 @@ top of the underlying `matrix-react-sdk`. `matrix-react-sdk` provides both the
|
|||||||
higher and lower level React components useful for building Matrix communication
|
higher and lower level React components useful for building Matrix communication
|
||||||
apps using React.
|
apps using React.
|
||||||
|
|
||||||
|
After creating a new component you must run `yarn reskindex` to regenerate
|
||||||
|
the `component-index.js` for the app (used in future for skinning).
|
||||||
|
|
||||||
Please note that Element is intended to run correctly without access to the public
|
Please note that Element is intended to run correctly without access to the public
|
||||||
internet. So please don't depend on resources (JS libs, CSS, images, fonts)
|
internet. So please don't depend on resources (JS libs, CSS, images, fonts)
|
||||||
hosted by external CDNs or servers but instead please package all dependencies
|
hosted by external CDNs or servers but instead please package all dependencies
|
||||||
into Element itself.
|
into Element itself.
|
||||||
|
|
||||||
CSS hot-reload is available as an opt-in development feature. You can enable it
|
|
||||||
by defining a `CSS_HOT_RELOAD` environment variable, in a `.env` file in the root
|
|
||||||
of the repository. See `.env.example` for documentation and an example.
|
|
||||||
|
|
||||||
Setting up a dev environment
|
Setting up a dev environment
|
||||||
============================
|
============================
|
||||||
|
|
||||||
@@ -312,39 +284,38 @@ yarn install
|
|||||||
popd
|
popd
|
||||||
```
|
```
|
||||||
|
|
||||||
Clone the repo and switch to the `element-web` directory:
|
Finally, build and start Element itself:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/vector-im/element-web.git
|
git clone https://github.com/vector-im/element-web.git
|
||||||
cd element-web
|
cd element-web
|
||||||
```
|
|
||||||
|
|
||||||
Configure the app by copying `config.sample.json` to `config.json` and
|
|
||||||
modifying it. See the [configuration docs](docs/config.md) for details.
|
|
||||||
|
|
||||||
Finally, build and start Element itself:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
yarn link matrix-js-sdk
|
yarn link matrix-js-sdk
|
||||||
yarn link matrix-react-sdk
|
yarn link matrix-react-sdk
|
||||||
yarn install
|
yarn install
|
||||||
yarn start
|
yarn start
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
Wait a few seconds for the initial build to finish; you should see something like:
|
Wait a few seconds for the initial build to finish; you should see something like:
|
||||||
|
|
||||||
```
|
```
|
||||||
[element-js] <s> [webpack.Progress] 100%
|
Hash: b0af76309dd56d7275c8
|
||||||
[element-js]
|
Version: webpack 1.12.14
|
||||||
[element-js] ℹ 「wdm」: 1840 modules
|
Time: 14533ms
|
||||||
[element-js] ℹ 「wdm」: Compiled successfully.
|
Asset Size Chunks Chunk Names
|
||||||
|
bundle.js 4.2 MB 0 [emitted] main
|
||||||
|
bundle.css 91.5 kB 0 [emitted] main
|
||||||
|
bundle.js.map 5.29 MB 0 [emitted] main
|
||||||
|
bundle.css.map 116 kB 0 [emitted] main
|
||||||
|
+ 1013 hidden modules
|
||||||
```
|
```
|
||||||
|
|
||||||
Remember, the command will not terminate since it runs the web server
|
Remember, the command will not terminate since it runs the web server
|
||||||
and rebuilds source files when they change. This development server also
|
and rebuilds source files when they change. This development server also
|
||||||
disables caching, so do NOT use it in production.
|
disables caching, so do NOT use it in production.
|
||||||
|
|
||||||
Open <http://127.0.0.1:8080/> in your browser to see your newly built Element.
|
Configure the app by copying `config.sample.json` to `config.json` and
|
||||||
|
modifying it. See the [configuration docs](docs/config.md) for details.
|
||||||
|
|
||||||
|
Open http://127.0.0.1:8080/ in your browser to see your newly built Element.
|
||||||
|
|
||||||
**Note**: The build script uses inotify by default on Linux to monitor directories
|
**Note**: The build script uses inotify by default on Linux to monitor directories
|
||||||
for changes. If the inotify limits are too low your build will fail silently or with
|
for changes. If the inotify limits are too low your build will fail silently or with
|
||||||
@@ -375,6 +346,9 @@ ___
|
|||||||
When you make changes to `matrix-react-sdk` or `matrix-js-sdk` they should be
|
When you make changes to `matrix-react-sdk` or `matrix-js-sdk` they should be
|
||||||
automatically picked up by webpack and built.
|
automatically picked up by webpack and built.
|
||||||
|
|
||||||
|
If you add or remove any components from the Element skin, you will need to rebuild
|
||||||
|
the skin's index by running, `yarn reskindex`.
|
||||||
|
|
||||||
If any of these steps error with, `file table overflow`, you are probably on a mac
|
If any of these steps error with, `file table overflow`, you are probably on a mac
|
||||||
which has a very low limit on max open files. Run `ulimit -Sn 1024` and try again.
|
which has a very low limit on max open files. Run `ulimit -Sn 1024` and try again.
|
||||||
You'll need to do this in each new terminal you open before building Element.
|
You'll need to do this in each new terminal you open before building Element.
|
||||||
@@ -383,15 +357,24 @@ Running the tests
|
|||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
There are a number of application-level tests in the `tests` directory; these
|
There are a number of application-level tests in the `tests` directory; these
|
||||||
are designed to run with Jest and JSDOM. To run them
|
are designed to run in a browser instance under the control of
|
||||||
|
[karma](https://karma-runner.github.io). To run them:
|
||||||
|
|
||||||
```
|
* Make sure you have Chrome installed (a recent version, like 59)
|
||||||
yarn test
|
* Make sure you have `matrix-js-sdk` and `matrix-react-sdk` installed and
|
||||||
```
|
built, as above
|
||||||
|
* `yarn test`
|
||||||
|
|
||||||
|
The above will run the tests under Chrome in a `headless` mode.
|
||||||
|
|
||||||
|
You can also tell karma to run the tests in a loop (every time the source
|
||||||
|
changes), in an instance of Chrome on your desktop, with `yarn
|
||||||
|
test-multi`. This also gives you the option of running the tests in 'debug'
|
||||||
|
mode, which is useful for stepping through the tests in the developer tools.
|
||||||
|
|
||||||
### End-to-End tests
|
### End-to-End tests
|
||||||
|
|
||||||
See [matrix-react-sdk](https://github.com/matrix-org/matrix-react-sdk/#end-to-end-tests) for how to run the end-to-end tests.
|
See [matrix-react-sdk](https://github.com/matrix-org/matrix-react-sdk/#end-to-end-tests) how to run the end-to-end tests.
|
||||||
|
|
||||||
Translations
|
Translations
|
||||||
============
|
============
|
||||||
@@ -405,6 +388,76 @@ For a developer guide, see the [translating dev doc](docs/translating-dev.md).
|
|||||||
Triaging issues
|
Triaging issues
|
||||||
===============
|
===============
|
||||||
|
|
||||||
Issues are triaged by community members and the Web App Team, following the [triage process](https://github.com/vector-im/element-meta/wiki/Triage-process).
|
We strive to completely cover all applicable issues with these core labels:
|
||||||
|
|
||||||
We use [issue labels](https://github.com/vector-im/element-meta/wiki/Issue-labelling) to sort all incoming issues.
|
1. __Type__ — Every issue is assigned a type:
|
||||||
|
- __[T-Defect](https://github.com/vector-im/element-web/labels/T-Defect):__
|
||||||
|
Bugs, crashes, hangs, vulnerabilities, or other reported problems
|
||||||
|
- __[T-Enhancement](https://github.com/vector-im/element-web/labels/T-Enhancement):__
|
||||||
|
New features, changes in functionality, performance boosts, user-facing
|
||||||
|
improvements
|
||||||
|
- __[T-Task](https://github.com/vector-im/element-web/labels/T-Task):__
|
||||||
|
Refactoring, enabling or disabling functionality, other engineering tasks
|
||||||
|
- __[T-Other](https://github.com/vector-im/element-web/labels/T-Other):__
|
||||||
|
Questions, user support, anything else
|
||||||
|
|
||||||
|
2. __Severity__ — All issues labeled `T-Defect` are also assigned a severity:
|
||||||
|
* __[S-Critical](https://github.com/vector-im/element-web/labels/S-Critical):__
|
||||||
|
Prevents work, causes data loss, affects many users, and/or has no
|
||||||
|
workaround
|
||||||
|
* __[S-Major](https://github.com/vector-im/element-web/labels/S-Major):__
|
||||||
|
Severely degrades major functionality or product features, with no
|
||||||
|
satisfactory workaround
|
||||||
|
* __[S-Minor](https://github.com/vector-im/element-web/labels/S-Minor):__
|
||||||
|
Impairs non-critical functionality, or suitable workarounds exist
|
||||||
|
* __[S-Tolerable](https://github.com/vector-im/element-web/labels/S-Tolerable):__
|
||||||
|
Purely cosmetic or low / no impact to users
|
||||||
|
|
||||||
|
3. __Priority__ — All issues which are not `T-Other` are assigned a priority:
|
||||||
|
* __[P1](https://github.com/vector-im/element-web/labels/P1):__ Next
|
||||||
|
* __[P2](https://github.com/vector-im/element-web/labels/P2):__ Later
|
||||||
|
* __[P3](https://github.com/vector-im/element-web/labels/P3):__ Eventually
|
||||||
|
* __[P4](https://github.com/vector-im/element-web/labels/P4):__ Interesting —
|
||||||
|
Not yet scheduled, will accept patches
|
||||||
|
* __[P5](https://github.com/vector-im/element-web/labels/P5):__ Dubious —
|
||||||
|
Will not schedule, would consider patches
|
||||||
|
|
||||||
|
4. __Area__ — Most issues are assigned one or several "areas" using one of the
|
||||||
|
many `A-` prefixed labels, e.g. `A-Composer` or `A-Spaces`. Each area label
|
||||||
|
maps to a group of features or portion of the UI surface in the app.
|
||||||
|
|
||||||
|
### Other common labels
|
||||||
|
|
||||||
|
We have a handful of other labels which are added on an as-needed basis, and not expected to be exhaustive:
|
||||||
|
|
||||||
|
* __Exceptions__ — Special flags for issues and pull requests:
|
||||||
|
* __[X-Needs-Info](https://github.com/vector-im/element-web/labels/X-Needs-Info):__
|
||||||
|
This issue is blocked pending further information from the reporter
|
||||||
|
* __[X-Regression](https://github.com/vector-im/element-web/labels/X-Regression):__
|
||||||
|
Denotes things breaking which previously worked
|
||||||
|
* __[X-Release-Blocker](https://github.com/vector-im/element-web/labels/X-Release-Blocker):__
|
||||||
|
Issues which must be resolved before making a release
|
||||||
|
|
||||||
|
* __[Easy](https://github.com/vector-im/element-web/labels/Easy)__ / __[Help
|
||||||
|
Wanted](https://github.com/vector-im/element-web/labels/Help%20Wanted)__ —
|
||||||
|
Well-defined issues which are suitable for folks new to the codebase
|
||||||
|
|
||||||
|
* __[A11y](https://github.com/vector-im/element-web/labels/A11y)__ /
|
||||||
|
__[Meta](https://github.com/vector-im/element-web/labels/Meta)__ /
|
||||||
|
__[I18n](https://github.com/vector-im/element-web/labels/I18n)__ /
|
||||||
|
__[Privacy](https://github.com/vector-im/element-web/labels/Privacy)__ /
|
||||||
|
__[Security](https://github.com/vector-im/element-web/labels/Security)__ —
|
||||||
|
Issues which fall under these conceptual themes (which apply to many software
|
||||||
|
projects and are not specific to Element)
|
||||||
|
|
||||||
|
* __[Sponsored](https://github.com/vector-im/element-web/labels/Sponsored)__ —
|
||||||
|
Used internally by Element to denote issues with external funding
|
||||||
|
|
||||||
|
### Ad hoc labels (`Z-`)
|
||||||
|
|
||||||
|
We have reserved the `Z-` prefix for ad hoc labels.
|
||||||
|
|
||||||
|
Any member of the core team is welcome to create labels beginning with `Z-` for
|
||||||
|
any purpose, such as tracking personal areas of interest or providing a common
|
||||||
|
way to label cross-repo initiatives. The prefix avoids interference with the
|
||||||
|
project's main labels.
|
||||||
|
|||||||
@@ -10,15 +10,18 @@ module.exports = {
|
|||||||
],
|
],
|
||||||
}],
|
}],
|
||||||
"@babel/preset-typescript",
|
"@babel/preset-typescript",
|
||||||
|
"@babel/preset-flow",
|
||||||
"@babel/preset-react",
|
"@babel/preset-react",
|
||||||
],
|
],
|
||||||
"plugins": [
|
"plugins": [
|
||||||
|
["@babel/plugin-proposal-decorators", {legacy: true}],
|
||||||
"@babel/plugin-proposal-export-default-from",
|
"@babel/plugin-proposal-export-default-from",
|
||||||
"@babel/plugin-proposal-numeric-separator",
|
"@babel/plugin-proposal-numeric-separator",
|
||||||
"@babel/plugin-proposal-class-properties",
|
"@babel/plugin-proposal-class-properties",
|
||||||
"@babel/plugin-proposal-object-rest-spread",
|
"@babel/plugin-proposal-object-rest-spread",
|
||||||
"@babel/plugin-proposal-optional-chaining",
|
"@babel/plugin-proposal-optional-chaining",
|
||||||
"@babel/plugin-proposal-nullish-coalescing-operator",
|
"@babel/plugin-proposal-nullish-coalescing-operator",
|
||||||
|
"@babel/plugin-transform-flow-comments",
|
||||||
"@babel/plugin-syntax-dynamic-import",
|
"@babel/plugin-syntax-dynamic-import",
|
||||||
"@babel/plugin-transform-runtime",
|
"@babel/plugin-transform-runtime",
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"src/components/views/auth/AuthFooter.tsx": "src/components/views/auth/VectorAuthFooter.tsx",
|
|
||||||
"src/components/views/auth/AuthHeaderLogo.tsx": "src/components/views/auth/VectorAuthHeaderLogo.tsx",
|
|
||||||
"src/components/views/auth/AuthPage.tsx": "src/components/views/auth/VectorAuthPage.tsx"
|
|
||||||
}
|
|
||||||
@@ -23,32 +23,32 @@
|
|||||||
"https://scalar-staging.riot.im/scalar/api"
|
"https://scalar-staging.riot.im/scalar/api"
|
||||||
],
|
],
|
||||||
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
||||||
"uisi_autorageshake_app": "element-auto-uisi",
|
"defaultCountryCode": "GB",
|
||||||
"default_country_code": "GB",
|
"showLabsSettings": false,
|
||||||
"show_labs_settings": false,
|
"features": {
|
||||||
"features": { },
|
"feature_new_spinner": false
|
||||||
|
},
|
||||||
"default_federate": true,
|
"default_federate": true,
|
||||||
"default_theme": "light",
|
"default_theme": "light",
|
||||||
"room_directory": {
|
"roomDirectory": {
|
||||||
"servers": [
|
"servers": [
|
||||||
"matrix.org"
|
"matrix.org"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"piwik": {
|
"piwik": {
|
||||||
"url": "https://piwik.riot.im/",
|
"url": "https://piwik.riot.im/",
|
||||||
"whitelisted_hs_urls": ["https://matrix.org"],
|
"whitelistedHSUrls": ["https://matrix.org"],
|
||||||
"whitelisted_is_urls": ["https://vector.im", "https://matrix.org"],
|
"whitelistedISUrls": ["https://vector.im", "https://matrix.org"],
|
||||||
"siteId": 1
|
"siteId": 1
|
||||||
},
|
},
|
||||||
"enable_presence_by_hs_url": {
|
"enable_presence_by_hs_url": {
|
||||||
"https://matrix.org": false,
|
"https://matrix.org": false,
|
||||||
"https://matrix-client.matrix.org": false
|
"https://matrix-client.matrix.org": false
|
||||||
},
|
},
|
||||||
"setting_defaults": {
|
"settingDefaults": {
|
||||||
"breadcrumbs": true
|
"breadcrumbs": true
|
||||||
},
|
},
|
||||||
"jitsi": {
|
"jitsi": {
|
||||||
"preferred_domain": "meet.element.io"
|
"preferredDomain": "jitsi.riot.im"
|
||||||
},
|
}
|
||||||
"map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
# App load order
|
# App load order
|
||||||
|
|
||||||
**Dev note**: As of March 2022, the skin is no longer part of the app load order at all. The document's graphs have
|
|
||||||
been kept untouched for posterity.
|
|
||||||
|
|
||||||
Old slow flow:
|
Old slow flow:
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -1,81 +0,0 @@
|
|||||||
# Choosing an issue to work on
|
|
||||||
|
|
||||||
So you want to contribute to Element Web? That is awesome!
|
|
||||||
|
|
||||||
If you're not sure where to start, make sure you read
|
|
||||||
[CONTRIBUTING.md](../CONTRIBUTING.md), and the
|
|
||||||
[Development](../README.md#development) and
|
|
||||||
[Setting up a dev environment](../README.md#setting-up-a-dev-environment)
|
|
||||||
sections of the README.
|
|
||||||
|
|
||||||
Maybe you've got something specific you'd like to work on? If so, make sure you
|
|
||||||
create an issue and
|
|
||||||
[discuss it with the developers](https://matrix.to/#/#element-dev:matrix.org)
|
|
||||||
before you put a lot of time into it.
|
|
||||||
|
|
||||||
If you're looking for inspiration on where to start, keep reading!
|
|
||||||
|
|
||||||
## Finding a good first issue
|
|
||||||
|
|
||||||
All the issues for Element Web live in the
|
|
||||||
[element-web](https://github.com/vector-im/element-web) repository, including
|
|
||||||
issues that actually need fixing in `matrix-react-sdk` or one of the related
|
|
||||||
repos.
|
|
||||||
|
|
||||||
The first place to look is for
|
|
||||||
[issues tagged with "good first issue"](https://github.com/vector-im/element-web/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22).
|
|
||||||
|
|
||||||
Look through that list and find something that catches your interest. If there
|
|
||||||
is nothing, there, try gently asking in
|
|
||||||
[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) for
|
|
||||||
someone to add something.
|
|
||||||
|
|
||||||
When you're looking through the list, here are some things that might make an
|
|
||||||
issue a **GOOD** choice:
|
|
||||||
|
|
||||||
* It is a problem or feature you care about.
|
|
||||||
* It concerns a type of code you know a little about.
|
|
||||||
* You think you can understand what's needed.
|
|
||||||
* It already has approval from Element Web's designers (look for comments from
|
|
||||||
members of the
|
|
||||||
[Product](https://github.com/orgs/vector-im/teams/product/members) or
|
|
||||||
[Design](https://github.com/orgs/vector-im/teams/design/members) teams).
|
|
||||||
|
|
||||||
Here are some things that might make it a **BAD** choice:
|
|
||||||
|
|
||||||
* You don't understand it (maybe add a comment asking a clarifying question).
|
|
||||||
* It sounds difficult, or is part of a larger change you don't know about.
|
|
||||||
* **It is tagged with `X-Needs-Design` or `X-Needs-Product`.**
|
|
||||||
|
|
||||||
**Element Web's Design and Product teams tend to be very busy**, so if you make
|
|
||||||
changes that require approval from one of those teams, you will probably have
|
|
||||||
to wait a very long time. The kind of change affected by this is changing the
|
|
||||||
way the product works, or how it looks in a specific area.
|
|
||||||
|
|
||||||
## Finding a good second issue
|
|
||||||
|
|
||||||
Once you've fixed a few small things, you can consider taking on something a
|
|
||||||
little larger. This should mostly be driven by what you find interesting, but
|
|
||||||
you may also find the
|
|
||||||
[Help Wanted](https://github.com/vector-im/element-web/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22Help+Wanted%22)
|
|
||||||
label useful.
|
|
||||||
|
|
||||||
Note that the same comment applies as in the previous section: if you want to
|
|
||||||
work in areas that require Design or Product approval, you should look to join
|
|
||||||
existing work that is already designed, as getting approval for your random
|
|
||||||
change will take a very long time.
|
|
||||||
|
|
||||||
So you should **always avoid issues tagged with `X-Needs-Design` or
|
|
||||||
`X-Needs-Product`**.
|
|
||||||
|
|
||||||
## Asking questions
|
|
||||||
|
|
||||||
Feel free to ask questions about the issues or how to choose them in the
|
|
||||||
[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) Matrix
|
|
||||||
room.
|
|
||||||
|
|
||||||
## Thank you
|
|
||||||
|
|
||||||
Thank you again for contributing to Element Web. We welcome your contributions
|
|
||||||
and are grateful for your work. We find working on it great fun, and we hope
|
|
||||||
you do too!
|
|
||||||
615
docs/config.md
615
docs/config.md
@@ -1,468 +1,134 @@
|
|||||||
# Configuration
|
Configuration
|
||||||
|
=============
|
||||||
You can configure the app by copying `config.sample.json` to `config.json` and customising it. The possible options are
|
|
||||||
described here. If you run into issues, please visit [#element-web:matrix.org](https://matrix.to/#/#element-web:matrix.org)
|
You can configure the app by copying `config.sample.json` to
|
||||||
on Matrix.
|
`config.json` and customising it:
|
||||||
|
|
||||||
For a good example of a production-tuned config, see https://app.element.io/config.json
|
For a good example, see https://develop.element.io/config.json.
|
||||||
|
|
||||||
For an example of a development/beta-tuned config, see https://develop.element.io/config.json
|
1. `default_server_config` sets the default homeserver and identity server URL for
|
||||||
|
Element to use. The object is the same as returned by [https://<server_name>/.well-known/matrix/client](https://matrix.org/docs/spec/client_server/latest.html#get-well-known-matrix-client),
|
||||||
After changing the config, the app will need to be reloaded. For web browsers this is a simple page refresh, however
|
with added support for a `server_name` under the `m.homeserver` section to display
|
||||||
for the desktop app the application will need to be exited fully (including via the task tray) and re-started.
|
a custom homeserver name. Alternatively, the config can contain a `default_server_name`
|
||||||
|
instead which is where Element will go to get that same object, although this option is
|
||||||
## Homeserver configuration
|
deprecated - see the `.well-known` link above for more information on using this option.
|
||||||
|
Note that the `default_server_name` is used to get a complete server configuration
|
||||||
In order for Element to even start you will need to tell it what homeserver to connect to *by default*. Users will be
|
whereas the `server_name` in the `default_server_config` is for display purposes only.
|
||||||
able to use a different homeserver if they like, though this can be disabled with `"disable_custom_urls": true` in your
|
* *Note*: The URLs can also be individually specified as `default_hs_url` and
|
||||||
config.
|
`default_is_url`, however these are deprecated. They are maintained for backwards
|
||||||
|
compatibility with older configurations. `default_is_url` is respected only
|
||||||
One of the following options **must** be supplied:
|
if `default_hs_url` is used.
|
||||||
|
* Element will fail to load if a mix of `default_server_config`, `default_server_name`, or
|
||||||
1. `default_server_config`: The preferred method of setting the homeserver connection information. Simply copy/paste
|
`default_hs_url` is specified. When multiple sources are specified, it is unclear
|
||||||
your [`/.well-known/matrix/client`](https://spec.matrix.org/latest/client-server-api/#getwell-knownmatrixclient)
|
which should take priority and therefore the application cannot continue.
|
||||||
into this field. For example:
|
* As of Element 1.4.0, identity servers are optional. See [Identity servers](#identity-servers) below.
|
||||||
```json
|
1. `features`: Lookup of optional features that may be force-enabled (`true`) or force-disabled (`false`).
|
||||||
{
|
When features are not listed here, their defaults will be used, and users can turn them on/off if `showLabsSettings`
|
||||||
"default_server_config": {
|
allows them to. The available optional experimental features vary from release to release and are
|
||||||
"m.homeserver": {
|
[documented](labs.md). The feature flag process is [documented](feature-flags.md) as well.
|
||||||
"base_url": "https://matrix-client.matrix.org"
|
1. `showLabsSettings`: Shows the "labs" tab of user settings. Useful to allow users to turn on experimental features
|
||||||
},
|
they might not otherwise have access to.
|
||||||
"m.identity_server": {
|
1. `brand`: String to pass to your homeserver when configuring email notifications, to let the
|
||||||
"base_url": "https://vector.im"
|
homeserver know what email template to use when talking to you.
|
||||||
}
|
1. `branding`: Configures various branding and logo details, such as:
|
||||||
}
|
1. `welcomeBackgroundUrl`: An image to use as a wallpaper outside the app
|
||||||
}
|
during authentication flows. If an array is passed, an image is chosen randomly for each visit.
|
||||||
```
|
1. `authHeaderLogoUrl`: An logo image that is shown in the header during
|
||||||
2. `default_server_name`: A different method of connecting to the homeserver by looking up the connection information
|
authentication flows
|
||||||
using `.well-known`. When using this option, simply use your server's domain name (the part at the end of user IDs):
|
1. `authFooterLinks`: a list of links to show in the authentication page footer:
|
||||||
`"default_server_name": "matrix.org"`
|
`[{"text": "Link text", "url": "https://link.target"}, {"text": "Other link", ...}]`
|
||||||
3. <del>`default_hs_url` and (optionally) `default_is_url`</del>: A very deprecated method of defining the connection
|
1. `reportEvent`: Configures the dialog for reporting content to the homeserver
|
||||||
information. These are the same values seen as `base_url` in the `default_server_config` example, with `default_is_url`
|
admin.
|
||||||
being optional.
|
1. `adminMessageMD`: An extra message to show on the reporting dialog to
|
||||||
|
mention homeserver-specific policies. Accepts Markdown.
|
||||||
If a combination of these three methods is used then Element will fail to load. This is because it is unclear which
|
1. `integrations_ui_url`: URL to the web interface for the integrations server. The integrations
|
||||||
should be considered "first".
|
server is not Element and normally not your homeserver either. The integration server settings
|
||||||
|
may be left blank to disable integrations.
|
||||||
## Labs flags
|
1. `integrations_rest_url`: URL to the REST interface for the integrations server.
|
||||||
|
1. `integrations_widgets_urls`: list of URLs to the REST interface for the widget integrations server.
|
||||||
Labs flags are optional, typically beta or in-development, features that can be turned on or off. The full range of
|
1. `bug_report_endpoint_url`: endpoint to send bug reports to (must be running a
|
||||||
labs flags and their development status are documented [here](./labs.md). If interested, the feature flag process is
|
https://github.com/matrix-org/rageshake server). Bug reports are sent when a user clicks
|
||||||
documented [here](./feature-flags.md).
|
"Send Logs" within the application. Bug reports can be disabled/hidden by leaving the
|
||||||
|
`bug_report_endpoint_url` out of your config file.
|
||||||
To force a labs flag on or off, use the following:
|
1. `roomDirectory`: config for the public room directory. This section is optional.
|
||||||
|
1. `roomDirectory.servers`: List of other homeservers' directories to include in the drop
|
||||||
```json
|
down list. Optional.
|
||||||
{
|
1. `default_theme`: name of theme to use by default (e.g. 'light')
|
||||||
"features": {
|
1. `update_base_url` (electron app only): HTTPS URL to a web server to download
|
||||||
"feature_you_want_to_turn_on": true,
|
updates from. This should be the path to the directory containing `macos`
|
||||||
"feature_you_want_to_keep_off": false
|
and `win32` (for update packages, not installer packages).
|
||||||
}
|
1. `piwik`: Analytics can be disabled by setting `piwik: false` or by leaving the piwik config
|
||||||
}
|
option out of your config file. If you want to enable analytics, set `piwik` to be an object
|
||||||
```
|
containing the following properties:
|
||||||
|
1. `url`: The URL of the Piwik instance to use for collecting analytics
|
||||||
If you'd like the user to be able to self-select which labs flags they can turn on, add `"show_labs_settings": true` to
|
1. `whitelistedHSUrls`: a list of HS URLs to not redact from the analytics
|
||||||
your config. This will turn on the tab in user settings.
|
1. `whitelistedISUrls`: a list of IS URLs to not redact from the analytics
|
||||||
|
1. `siteId`: The Piwik Site ID to use when sending analytics to the Piwik server configured above
|
||||||
**Note**: Feature support varies release-by-release. Check the [labs flag documentation](./labs.md) frequently if enabling
|
1. `welcomeUserId`: the user ID of a bot to invite whenever users register that can give them a tour
|
||||||
the functionality.
|
1. `embeddedPages`: Configures the pages displayed in portions of Element that
|
||||||
|
embed static files, such as:
|
||||||
## Default settings
|
1. `welcomeUrl`: Initial content shown on the outside of the app when not
|
||||||
|
logged in. Defaults to `welcome.html` supplied with Element.
|
||||||
Some settings additionally support being specified at the config level to affect the user experience of your Element Web
|
1. `homeUrl`: Content shown on the inside of the app when a specific room is
|
||||||
instance. As of writing those settings are not fully documented, however a few are:
|
not selected. By default, no home page is configured. If one is set, a
|
||||||
|
button to access it will be shown in the top left menu.
|
||||||
1. `default_federate`: When `true` (default), rooms will be marked as "federatable" during creation. Typically this setting
|
1. `defaultCountryCode`: The ISO 3166 alpha2 country code to use when showing
|
||||||
shouldn't be used as the federation capabilities of a room **cannot** be changed after the room is created.
|
country selectors, like the phone number input on the registration page.
|
||||||
2. `default_country_code`: An optional ISO 3166 alpha2 country code (eg: `GB`, the default) to use when showing phone number
|
Defaults to `GB` if the given code is unknown or not provided.
|
||||||
inputs.
|
1. `settingDefaults`: Defaults for settings that support the `config` level,
|
||||||
3. `room_directory`: Optionally defines how the room directory component behaves. Currently only a single property, `servers`
|
as an object mapping setting name to value (note that the "theme" setting
|
||||||
is supported to add additional servers to the dropdown. For example:
|
is special cased to the `default_theme` in the config file).
|
||||||
```json
|
1. `disable_custom_urls`: disallow the user to change the
|
||||||
{
|
default homeserver when signing up or logging in.
|
||||||
"room_directory": {
|
1. `permalinkPrefix`: Used to change the URL that Element generates permalinks with.
|
||||||
"servers": ["matrix.org", "example.org"]
|
By default, this is "https://matrix.to" to generate matrix.to (spec) permalinks.
|
||||||
}
|
Set this to your Element instance URL if you run an unfederated server (eg:
|
||||||
}
|
"https://element.example.org").
|
||||||
```
|
1. `jitsi`: Used to change the default conference options. Learn more about the
|
||||||
4. `setting_defaults`: Optional configuration for settings which are not described by this document and support the `config`
|
Jitsi options at [jitsi.md](./jitsi.md).
|
||||||
level. This list is incomplete. For example:
|
1. `preferredDomain`: The domain name of the preferred Jitsi instance. Defaults
|
||||||
```json
|
to `jitsi.riot.im`. This is used whenever a user clicks on the voice/video
|
||||||
{
|
call buttons - integration managers may use a different domain.
|
||||||
"setting_defaults": {
|
1. `enable_presence_by_hs_url`: The property key should be the URL of the homeserver
|
||||||
"MessageComposerInput.showStickersButton": false,
|
and its value defines whether to enable/disable the presence status display
|
||||||
"MessageComposerInput.showPollsButton": false
|
from that homeserver. If no options are configured, presence is shown for all
|
||||||
}
|
homeservers.
|
||||||
}
|
1. `disable_guests`: Disables guest access tokens and auto-guest registrations.
|
||||||
```
|
Defaults to false (guests are allowed).
|
||||||
These values will take priority over the hardcoded defaults for the settings. For a list of available settings, see
|
1. `disable_login_language_selector`: Disables the login language selector. Defaults
|
||||||
[Settings.tsx](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.tsx).
|
to false (language selector is shown).
|
||||||
|
1. `disable_3pid_login`: Disables 3rd party identity options on login and registration form
|
||||||
## Customisation & branding
|
Defaults to false (3rd party identity options are shown).
|
||||||
|
1. `default_federate`: Default option for room federation when creating a room
|
||||||
<!-- Author's note: https://english.stackexchange.com/questions/570116/alternative-ways-of-saying-white-labeled -->
|
Defaults to true (room federation enabled).
|
||||||
|
1. `desktopBuilds`: Used to alter promotional links to the desktop app. By default
|
||||||
Element supports some customisation of the user experience through various branding and theme options. While it doesn't support
|
the builds are considered available and accessible from https://element.io. This
|
||||||
complete re-branding/private labeling, a more personalised experience can be achieved for your users.
|
config option is typically used in the context of encouraging encrypted message
|
||||||
|
search capabilities (Seshat). All the options listed below are required if this
|
||||||
1. `default_theme`: Typically either `light` (the default) or `dark`, this is the optional name of the colour theme to use.
|
option is specified.
|
||||||
If using custom themes, this can be a theme name from that as well.
|
1. `available`: When false, the desktop app will not be promoted to the user.
|
||||||
2. `default_device_display_name`: Optional public name for devices created by login and registration, instead of the default
|
1. `logo`: An HTTP URL to the avatar for the desktop build. Should be 24x24, ideally
|
||||||
templated string. Note that this option does not support templating, currently.
|
an SVG.
|
||||||
3. `brand`: Optional name for the app. Defaults to `Element`. This is used throughout the application in various strings/locations.
|
1. `url`: An HTTP URL for where to send the user to download the desktop build.
|
||||||
4. `permalink_prefix`: An optional URL pointing to an Element Web deployment. For example, `https://app.element.io`. This will
|
1. `mobileGuideToast`: Whether to show a toast a startup which nudges users on
|
||||||
change all permalinks (via the "Share" menus) to point at the Element Web deployment rather than `matrix.to`.
|
iOS and Android towards the native mobile apps. The toast redirects to the
|
||||||
5. `desktop_builds`: Optional. Where the desktop builds for the application are, if available. This is explained in more detail
|
mobile guide if they accept. Defaults to false.
|
||||||
down below.
|
1. `audioStreamUrl`: If supplied, show an option on Jitsi widgets to stream
|
||||||
6. `mobile_builds`: Optional. Like `desktop_builds`, except for the mobile apps. Also described in more detail down below.
|
audio using Jitsi's live streaming feature. This option is experimental and
|
||||||
7. `mobile_guide_toast`: When `true` (default), users accessing the Element Web instance from a mobile device will be prompted to
|
may be removed at any time without notice.
|
||||||
download the app instead.
|
|
||||||
8. `update_base_url`: For the desktop app only, the URL where to acquire update packages. If specified, must be a path to a directory
|
Note that `index.html` also has an og:image meta tag that is set to an image
|
||||||
containing `macos` and `win32` directories, with the update packages within. Defaults to `https://packages.element.io/desktop/update/`
|
hosted on riot.im. This is the image used if links to your copy of Element
|
||||||
in production.
|
appear in some websites like Facebook, and indeed Element itself. This has to be
|
||||||
9. `map_style_url`: Map tile server style URL for location sharing. e.g. `https://api.maptiler.com/maps/streets/style.json?key=YOUR_KEY_GOES_HERE`
|
static in the HTML and an absolute URL (and HTTP rather than HTTPS), so it's
|
||||||
This setting is ignored if your homeserver provides `/.well-known/matrix/client` in its well-known location, and the JSON file
|
not possible for this to be an option in config.json. If you'd like to change
|
||||||
at that location has a key `m.tile_server` (or the unstable version `org.matrix.msc3488.tile_server`). In this case, the
|
it, you can build Element, but run
|
||||||
configuration found in the well-known location is used instead.
|
`RIOT_OG_IMAGE_URL="http://example.com/logo.png" yarn build`.
|
||||||
10. `welcome_user_id`: An optional user ID to start a DM with after creating an account. Defaults to nothing (no DM created).
|
Alternatively, you can edit the `og:image` meta tag in `index.html` directly
|
||||||
11. `custom_translations_url`: An optional URL to allow overriding of translatable strings. The JSON file must be in a format of
|
each time you download a new version of Element.
|
||||||
`{"affected string": {"languageCode": "new string"}}`. See https://github.com/matrix-org/matrix-react-sdk/pull/7886 for details.
|
|
||||||
12. `branding`: Options for configuring various assets used within the app. Described in more detail down below.
|
Identity servers
|
||||||
13. `embedded_pages`: Further optional URLs for various assets used within the app. Described in more detail down below.
|
================
|
||||||
14. `disable_3pid_login`: When `false` (default), **enables** the options to log in with email address or phone number. Set to
|
|
||||||
`true` to hide these options.
|
|
||||||
15. `disable_login_language_selector`: When `false` (default), **enables** the language selector on the login pages. Set to `true`
|
|
||||||
to hide this dropdown.
|
|
||||||
16. `disable_guests`: When `false` (default), **enable** guest-related functionality (peeking/previewing rooms, etc) for unregistered
|
|
||||||
users. Set to `true` to disable this functionality.
|
|
||||||
|
|
||||||
### `desktop_builds` and `mobile_builds`
|
|
||||||
|
|
||||||
These two options describe the various availability for the application. When the app needs to promote an alternative download,
|
|
||||||
such as trying to get the user to use an Android app or the desktop app for encrypted search, the config options will be looked
|
|
||||||
at to see if the link should be to somewhere else.
|
|
||||||
|
|
||||||
Starting with `desktop_builds`, the following subproperties are available:
|
|
||||||
|
|
||||||
1. `available`: Required. When `true`, the desktop app can be downloaded from somewhere.
|
|
||||||
2. `logo`: Required. A URL to a logo (SVG), intended to be shown at 24x24 pixels.
|
|
||||||
3. `url`: Required. The download URL for the app. This is used as a hyperlink.
|
|
||||||
|
|
||||||
When `desktop_builds` is not specified at all, the app will assume desktop downloads are available from https://element.io
|
|
||||||
|
|
||||||
For `mobile_builds`, the following subproperties are available:
|
|
||||||
|
|
||||||
1. `ios`: The URL for where to download the iOS app, such as an App Store link. When explicitly `null`, the app will assume the
|
|
||||||
iOS app cannot be downloaded. When not provided, the default Element app will be assumed available.
|
|
||||||
2. `android`: The same as `ios`, except for Android instead.
|
|
||||||
3. `fdroid`: The same as `android`, except for FDroid instead.
|
|
||||||
|
|
||||||
Together, these two options might look like the following in your config:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"desktop_builds": {
|
|
||||||
"available": true,
|
|
||||||
"logo": "https://example.org/assets/logo-small.svg",
|
|
||||||
"url": "https://example.org/not_element/download"
|
|
||||||
},
|
|
||||||
"mobile_builds": {
|
|
||||||
"ios": null,
|
|
||||||
"android": "https://example.org/not_element/android",
|
|
||||||
"fdroid": "https://example.org/not_element/fdroid"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### `branding` and `embedded_pages`
|
|
||||||
|
|
||||||
These two options point at various URLs for changing different internal pages (like the welcome page) and logos within the
|
|
||||||
application.
|
|
||||||
|
|
||||||
Starting with `branding`, the following subproperties are available:
|
|
||||||
|
|
||||||
1. `welcome_background_url`: When a string, the URL for the full-page image background of the login, registration, and welcome
|
|
||||||
pages. This property can additionally be an array to have the app choose an image at random from the selections.
|
|
||||||
2. `auth_header_logo_url`: A URL to the logo used on the login, registration, etc pages.
|
|
||||||
3. `auth_footer_links`: A list of links to add to the footer during login, registration, etc. Each entry must have a `text` and
|
|
||||||
`url` property.
|
|
||||||
|
|
||||||
`embedded_pages` can be configured as such:
|
|
||||||
|
|
||||||
1. `welcome_url`: A URL to an HTML page to show as a welcome page (landing on `#/welcome`). When not specified, the default
|
|
||||||
`welcome.html` that ships with Element will be used instead.
|
|
||||||
2. `home_url`: A URL to an HTML page to show within the app as the "home" page. When the app doesn't have a room/screen to
|
|
||||||
show the user, it will use the home page instead. The home page is additionally accessible from the user menu. By default,
|
|
||||||
no home page is set and therefore a hardcoded landing screen is used.
|
|
||||||
3. `login_for_welcome`: When `true` (default `false`), the app will use the login form as a welcome page instead of the welcome
|
|
||||||
page itself. This disables use of `welcome_url` and all welcome page functionality.
|
|
||||||
|
|
||||||
Together, the options might look like this in your config:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"branding": {
|
|
||||||
"welcome_background_url": "https://example.org/assets/background.jpg",
|
|
||||||
"auth_header_logo_url": "https://example.org/assets/logo.svg",
|
|
||||||
"auth_footer_links": [
|
|
||||||
{"text": "FAQ", "url": "https://example.org/faq"},
|
|
||||||
{"text": "Donate", "url": "https://example.org/donate"},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"embedded_pages": {
|
|
||||||
"welcome_url": "https://example.org/assets/welcome.html",
|
|
||||||
"home_url": "https://example.org/assets/home.html"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Note that `index.html` also has an og:image meta tag that is set to an image hosted on element.io. This is the image used if
|
|
||||||
links to your copy of Element appear in some websites like Facebook, and indeed Element itself. This has to be static in the HTML
|
|
||||||
and an absolute URL (and HTTP rather than HTTPS), so it's not possible for this to be an option in config.json. If you'd like to
|
|
||||||
change it, you can build Element, but run `RIOT_OG_IMAGE_URL="http://example.com/logo.png" yarn build`. Alternatively, you can edit
|
|
||||||
the `og:image` meta tag in `index.html` directly each time you download a new version of Element.
|
|
||||||
|
|
||||||
## SSO setup
|
|
||||||
|
|
||||||
When Element is deployed alongside a homeserver with SSO-only login, some options to ease the user experience might want to be set:
|
|
||||||
|
|
||||||
1. `logout_redirect_url`: Optional URL to redirect the user to after they have logged out. Some SSO systems support a page that the
|
|
||||||
user can be sent to in order to log them out of that system too, making logout symmetric between Element and the SSO system.
|
|
||||||
2. `sso_redirect_options`: Options to define how to handle unauthenticated users. If the object contains `"immediate": true`, then
|
|
||||||
all unauthenticated users will be automatically redirected to the SSO system to start their login. If instead you'd only like to
|
|
||||||
have users which land on the welcome page to be redirected, use `"on_welcome_page": true`. As an example:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"sso_redirect_options": {
|
|
||||||
"immediate": false,
|
|
||||||
"on_welcome_page": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
It is most common to use the `immediate` flag instead of `on_welcome_page`.
|
|
||||||
|
|
||||||
## VoIP / Jitsi calls
|
|
||||||
|
|
||||||
Currently, Element uses Jitsi to offer conference calls in rooms. A set of defaults are applied, pointing at our Jitsi instance,
|
|
||||||
to ensure conference calling works, however you can point Element at your own Jitsi if you prefer.
|
|
||||||
|
|
||||||
More information about the Jitsi setup can be found [here](./jitsi.md).
|
|
||||||
|
|
||||||
The VoIP and Jitsi options are:
|
|
||||||
|
|
||||||
1. `jitsi`: Optional configuration for how to start Jitsi conferences. Currently can only contain a single `preferred_domain`
|
|
||||||
value which points at the domain of the Jitsi instance. Defaults to `meet.element.io`. This is *not* used if the Jitsi widget
|
|
||||||
was created by an integration manager, or if the homeserver provides Jitsi information in `/.well-known/matrix/client`. For
|
|
||||||
example:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"jitsi": {
|
|
||||||
"preferred_domain": "meet.jit.si"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
2. `jitsi_widget`: Optional configuration for the built-in Jitsi widget. Currently can only contain a single `skip_built_in_welcome_screen`
|
|
||||||
value, denoting whether the "Join Conference" button should be shown. When `true` (default `false`), Jitsi calls will skip to
|
|
||||||
the call instead of having a screen with a single button on it. This is most useful if the Jitsi instance being used already
|
|
||||||
has a landing page for users to test audio and video before joining the call, otherwise users will automatically join the call.
|
|
||||||
For example:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"jitsi_widget": {
|
|
||||||
"skip_built_in_welcome_screen": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
3. `voip`: Optional configuration for various VoIP features. Currently can only contain a single `obey_asserted_identity` value to
|
|
||||||
send MSC3086-style asserted identity messages during VoIP calls in the room corresponding to the asserted identity. This *must*
|
|
||||||
only be set in trusted environments. The option defaults to `false`. For example:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"voip": {
|
|
||||||
"obey_asserted_identity": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
4. `widget_build_url`: Optional URL to have Element make a request to when a user presses the voice/video call buttons in the app,
|
|
||||||
if a call would normally be started by the action. The URL will be called with a `roomId` query parameter to identify the room
|
|
||||||
being called in. The URL must respond with a JSON object similar to the following:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"widget_id": "$arbitrary_string",
|
|
||||||
"widget": {
|
|
||||||
"creatorUserId": "@user:example.org",
|
|
||||||
"id": "$the_same_widget_id",
|
|
||||||
"type": "m.custom",
|
|
||||||
"waitForIframeLoad": true,
|
|
||||||
"name": "My Widget Name Here",
|
|
||||||
"avatar_url": "mxc://example.org/abc123",
|
|
||||||
"url": "https://example.org/widget.html",
|
|
||||||
"data": {
|
|
||||||
"title": "Subtitle goes here"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"layout": {
|
|
||||||
"container": "top",
|
|
||||||
"index": 0,
|
|
||||||
"width": 65,
|
|
||||||
"height": 50
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
The `widget` is the `content` of a normal widget state event. The `layout` is the layout specifier for the widget being created,
|
|
||||||
as defined by the `io.element.widgets.layout` state event.
|
|
||||||
5. `audio_stream_url`: Optional URL to pass to Jitsi to enable live streaming. This option is considered experimental and may be removed
|
|
||||||
at any time without notice.
|
|
||||||
|
|
||||||
## Bug reporting
|
|
||||||
|
|
||||||
If you run your own rageshake server to collect bug reports, the following options may be of interest:
|
|
||||||
|
|
||||||
1. `bug_report_endpoint_url`: URL for where to submit rageshake logs to. Rageshakes include feedback submissions and bug reports. When
|
|
||||||
not present in the config, the app will disable all rageshake functionality. Set to `https://element.io/bugreports/submit` to submit
|
|
||||||
rageshakes to us, or use your own rageshake server.
|
|
||||||
2. `uisi_autorageshake_app`: If a user has enabled the "automatically send debug logs on decryption errors" flag, this option will be sent
|
|
||||||
alongside the rageshake so the rageshake server can filter them by app name. By default, this will be `element-web`, as with any other
|
|
||||||
rageshake submitted by the app.
|
|
||||||
|
|
||||||
If you are using the element.io rageshake server, please set this to `element-auto-uisi` so we can better filter them.
|
|
||||||
|
|
||||||
If you would like to use [Sentry](https://sentry.io/) for rageshake data, add a `sentry` object to your config with the following values:
|
|
||||||
|
|
||||||
1. `dsn`: The Sentry [DSN](https://docs.sentry.io/product/sentry-basics/dsn-explainer/).
|
|
||||||
2. `environment`: Optional [environment](https://docs.sentry.io/product/sentry-basics/environments/) to pass to Sentry.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"sentry": {
|
|
||||||
"dsn": "dsn-goes-here",
|
|
||||||
"environment": "production"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Integration managers
|
|
||||||
|
|
||||||
Integration managers are embedded applications within Element to help the user configure bots, bridges, and widgets. An integration manager
|
|
||||||
is a separate piece of software not typically available with your homeserver. To disable integrations, leave the options defined here out of
|
|
||||||
your config.
|
|
||||||
|
|
||||||
1. `integrations_ui_url`: The UI URL for the integration manager.
|
|
||||||
2. `integrations_rest_url`: The REST interface URL for the integration manager.
|
|
||||||
3. `integrations_widgets_urls`: A list of URLs the integration manager uses to host widgets.
|
|
||||||
|
|
||||||
If you would like to use Scalar, the integration manager maintained by Element, the following options would apply:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"integrations_ui_url": "https://scalar.vector.im/",
|
|
||||||
"integrations_rest_url": "https://scalar.vector.im/api",
|
|
||||||
"integrations_widgets_urls": [
|
|
||||||
"https://scalar.vector.im/_matrix/integrations/v1",
|
|
||||||
"https://scalar.vector.im/api",
|
|
||||||
"https://scalar-staging.vector.im/_matrix/integrations/v1",
|
|
||||||
"https://scalar-staging.vector.im/api",
|
|
||||||
"https://scalar-staging.riot.im/scalar/api"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Administrative options
|
|
||||||
|
|
||||||
If you would like to include a custom message when someone is reporting an event, set the following Markdown-capable field:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"report_event": {
|
|
||||||
"admin_message_md": "Please be sure to review our [terms of service](https://example.org/terms) before reporting a message."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
To add additional "terms and conditions" links throughout the app, use the following template:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"terms_and_conditions_links": [
|
|
||||||
{ "text": "Code of conduct", "url": "https://example.org/code-of-conduct" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Analytics
|
|
||||||
|
|
||||||
Analytics are currently possible with two systems: `posthog` (preferred) and <del>`piwik`</del> (matomo; deprecated). When
|
|
||||||
these configuration options are not present, analytics are deemed impossible and the user won't be asked to opt-in to the
|
|
||||||
system.
|
|
||||||
|
|
||||||
To configure [Posthog](https://posthog.com/), add the following under `posthog` in your config:
|
|
||||||
|
|
||||||
1. `api_host`: The hostname of the posthog server.
|
|
||||||
2. `project_api_key`: The API key from posthog.
|
|
||||||
|
|
||||||
To configure Piwik (***DEPRECATED***), add the following under `piwik` in your config:
|
|
||||||
|
|
||||||
1. `url`: The URL of the piwik server.
|
|
||||||
2. `site_id`: The site ID to use.
|
|
||||||
3. `policy_url`: URL to the analytics collection policy.
|
|
||||||
4. `whitelisted_hs_urls`: A list of homeserver client-server URLs to *not* redact from analytics.
|
|
||||||
|
|
||||||
Additionally, you may set `"piwik": false` to disable piwik configuration too. An `analytics_owner` can also be specified in your
|
|
||||||
config to replace the company name used in dialogs talking about analytics - this defaults to `brand`, and is useful when the
|
|
||||||
provider of analytics is different from the provider of the Element instance.
|
|
||||||
|
|
||||||
## Server hosting links
|
|
||||||
|
|
||||||
If you would like to encourage matrix.org users to sign up for a service like [Element Matrix Services](https://element.io/matrix-services/server-hosting),
|
|
||||||
the following configuration options can be set. Note that if the options are missing from the configuration then the hosting prompts
|
|
||||||
will not be shown to the user.
|
|
||||||
|
|
||||||
1. `hosting_signup_link`: Optional URL to link the user to when talking about "Upgrading your account". Will contain a query parameter
|
|
||||||
of `utm_campaign` to denote which link the user clicked on within the app. Only ever applies to matrix.org users specifically.
|
|
||||||
2. `host_signup`: Optional configuration for an account importer to your hosting platform. The API surface of this is not documented
|
|
||||||
at the moment, but can be configured with the following subproperties:
|
|
||||||
1. `brand`: The brand name to use.
|
|
||||||
2. `url`: The iframe URL for the importer.
|
|
||||||
3. `domains`: The homeserver domains to show the importer to.
|
|
||||||
4. `cookie_policy_url`: The URL to the cookie policy for the importer.
|
|
||||||
5. `privacy_policy_url`: The URL to the privacy policy for the importer.
|
|
||||||
6. `terms_of_service_url`: The URL to the terms of service for the importer.
|
|
||||||
|
|
||||||
If you're looking to mirror a setup from our production/development environments, the following config should be used:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web",
|
|
||||||
"host_signup": {
|
|
||||||
"brand": "Element Home",
|
|
||||||
"domains": [ "matrix.org" ],
|
|
||||||
"url": "https://ems.element.io/element-home/in-app-loader",
|
|
||||||
"cookie_policy_url": "https://element.io/cookie-policy",
|
|
||||||
"privacy_policy_url": "https://element.io/privacy",
|
|
||||||
"terms_of_service_url": "https://element.io/terms-of-service"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Miscellaneous
|
|
||||||
|
|
||||||
Element supports other options which don't quite fit into other sections of this document.
|
|
||||||
|
|
||||||
To configure whether presence UI is shown for a given homeserver, set `enable_presence_by_hs_url`. It is recommended to
|
|
||||||
set this value to the following at a minimum:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"enable_presence_by_hs_url": {
|
|
||||||
"https://matrix.org": false,
|
|
||||||
"https://matrix-client.matrix.org": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Identity servers
|
|
||||||
|
|
||||||
The identity server is used for inviting other users to a room via third party
|
The identity server is used for inviting other users to a room via third party
|
||||||
identifiers like emails and phone numbers. It is not used to store your password
|
identifiers like emails and phone numbers. It is not used to store your password
|
||||||
@@ -489,14 +155,16 @@ Currently, the only two public identity servers are https://vector.im and
|
|||||||
https://matrix.org, however in the future identity servers will be
|
https://matrix.org, however in the future identity servers will be
|
||||||
decentralised.
|
decentralised.
|
||||||
|
|
||||||
## Desktop app configuration
|
Desktop app configuration
|
||||||
|
=========================
|
||||||
|
|
||||||
See https://github.com/vector-im/element-desktop#user-specified-configjson
|
See https://github.com/vector-im/element-desktop#user-specified-configjson
|
||||||
|
|
||||||
## UI Features
|
UI Features
|
||||||
|
===========
|
||||||
|
|
||||||
Parts of the UI can be disabled using UI features. These are settings which appear
|
Parts of the UI can be disabled using UI features. These are settings which appear
|
||||||
under `setting_defaults` and can only be `true` (default) or `false`. When `false`,
|
under `settingDefaults` and can only be `true` (default) or `false`. When `false`,
|
||||||
parts of the UI relating to that feature will be disabled regardless of the user's
|
parts of the UI relating to that feature will be disabled regardless of the user's
|
||||||
preferences.
|
preferences.
|
||||||
|
|
||||||
@@ -532,14 +200,3 @@ Currently, the following UI feature flags are supported:
|
|||||||
user.
|
user.
|
||||||
* `UIFeature.roomHistorySettings` - Whether or not the room history settings are shown to the user.
|
* `UIFeature.roomHistorySettings` - Whether or not the room history settings are shown to the user.
|
||||||
This should only be used if the room history visibility options are managed by the server.
|
This should only be used if the room history visibility options are managed by the server.
|
||||||
* `UIFeature.TimelineEnableRelativeDates` - Display relative date separators (eg: 'Today', 'Yesterday') in the
|
|
||||||
timeline for recent messages. When false day dates will be used.
|
|
||||||
|
|
||||||
## Undocumented / developer options
|
|
||||||
|
|
||||||
The following are undocumented or intended for developer use only.
|
|
||||||
|
|
||||||
1. `fallback_hs_url`
|
|
||||||
2. `sync_timeline_limit`
|
|
||||||
3. `dangerously_allow_unsafe_and_insecure_passwords`
|
|
||||||
4. `latex_maths_delims`: An optional setting to override the default delimiters used for maths parsing. See https://github.com/matrix-org/matrix-react-sdk/pull/5939 for details. Only used when `feature_latex_maths` is enabled.
|
|
||||||
|
|||||||
@@ -16,53 +16,19 @@ the React SDK, you can still override it from the Element Web layer:
|
|||||||
`element-web/src/customisations/YourNameSecurity.ts`
|
`element-web/src/customisations/YourNameSecurity.ts`
|
||||||
2. Edit customisations points and make sure export the ones you actually want to
|
2. Edit customisations points and make sure export the ones you actually want to
|
||||||
activate
|
activate
|
||||||
3. Create/add an entry to `customisations.json` next to the webpack config:
|
3. Tweak the Element build process to use the customised module instead of the
|
||||||
|
default by adding this to the `additionalPlugins` array in `webpack.config.js`:
|
||||||
|
|
||||||
```json
|
```js
|
||||||
{
|
new webpack.NormalModuleReplacementPlugin(
|
||||||
"src/customisations/Security.ts": "src/customisations/YourNameSecurity.ts"
|
/src[\/\\]customisations[\/\\]Security\.ts/,
|
||||||
}
|
path.resolve(__dirname, 'src/customisations/YourNameSecurity.ts'),
|
||||||
|
),
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If we add more customisation modules in the future, we'll likely improve these
|
||||||
|
steps to remove the need for build changes like the above.
|
||||||
|
|
||||||
By isolating customisations to their own module, this approach should remove the
|
By isolating customisations to their own module, this approach should remove the
|
||||||
chance of merge conflicts when updating your fork, and thus simplify ongoing
|
chance of merge conflicts when updating your fork, and thus simplify ongoing
|
||||||
maintenance.
|
maintenance.
|
||||||
|
|
||||||
**Note**: The project deliberately does not exclude `customisations.json` from Git.
|
|
||||||
This is to ensure that in shared projects it's possible to have a common config. By
|
|
||||||
default, Element Web does *not* ship with this file to prevent conflicts.
|
|
||||||
|
|
||||||
### Custom components
|
|
||||||
|
|
||||||
Maintainers can use the above system to override components if they wish. Maintenance and API surface compatibility are
|
|
||||||
left as a responsibility for the project - the layering in Element Web (including the react-sdk) do not make guarantees
|
|
||||||
that properties/state machines won't change.
|
|
||||||
|
|
||||||
### Component visibility customisation
|
|
||||||
|
|
||||||
UI for some actions can be hidden via the ComponentVisibility customisation:
|
|
||||||
- inviting users to rooms and spaces,
|
|
||||||
- creating rooms,
|
|
||||||
- creating spaces,
|
|
||||||
|
|
||||||
To customise visibility create a customisation module from [ComponentVisibility](https://github.com/matrix-org/matrix-react-sdk/blob/master/src/customisations/ComponentVisibility.ts) following the instructions above.
|
|
||||||
|
|
||||||
`shouldShowComponent` determines whether the active MatrixClient user should be able to use
|
|
||||||
the given UI component. When `shouldShowComponent` returns falsy all UI components for that feature will be hidden.
|
|
||||||
If shown, the user might still not be able to use the
|
|
||||||
component depending on their contextual permissions. For example, invite options
|
|
||||||
might be shown to the user, but they won't have permission to invite users to
|
|
||||||
the current room: the button will appear disabled.
|
|
||||||
|
|
||||||
For example, to only allow users who meet a certain condition to create spaces:
|
|
||||||
```typescript
|
|
||||||
function shouldShowComponent(component: UIComponent): boolean {
|
|
||||||
if (component === UIComponent.CreateSpaces) {
|
|
||||||
// customConditionCheck() is a function of your own creation
|
|
||||||
const userMeetsCondition = customConditionCheck(MatrixClientPeg.get().getUserId());
|
|
||||||
return userMeetsCondition;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
In this example, all UI related to creating a space will be hidden unless the users meets the custom condition.
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ clients commit to doing the associated clean up work once a feature stabilises.
|
|||||||
When starting work on a feature, we should create a matching feature flag:
|
When starting work on a feature, we should create a matching feature flag:
|
||||||
|
|
||||||
1. Add a new
|
1. Add a new
|
||||||
[setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.tsx)
|
[setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts)
|
||||||
of the form:
|
of the form:
|
||||||
```js
|
```js
|
||||||
"feature_cats": {
|
"feature_cats": {
|
||||||
@@ -81,7 +81,7 @@ 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
|
||||||
Desktop builds. It will not be enabled for self-hosted installed, custom desktop builds, etc. To
|
Desktop builds. It will not be enabled for self-hosted installed, custom desktop builds, etc. To
|
||||||
cover these cases, change the setting's `default` in `Settings.tsx` to `true`.
|
cover these cases, change the setting's `default` in `Settings.ts` to `true`.
|
||||||
|
|
||||||
## Feature deployed successfully
|
## Feature deployed successfully
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ Element uses [Jitsi](https://jitsi.org/) for conference calls, which provides op
|
|||||||
self-hosting your own server and supports most major platforms.
|
self-hosting your own server and supports most major platforms.
|
||||||
|
|
||||||
1:1 calls, or calls between you and one other person, do not use Jitsi. Instead, those
|
1:1 calls, or calls between you and one other person, do not use Jitsi. Instead, those
|
||||||
calls work directly between clients or via TURN servers configured on the respective
|
calls work directly between clients or via TURN servers configured on the respective
|
||||||
homeservers.
|
homeservers.
|
||||||
|
|
||||||
There's a number of ways to start a Jitsi call: the easiest way is to click on the
|
There's a number of ways to start a Jitsi call: the easiest way is to click on the
|
||||||
voice or video buttons near the message composer in a room with more than 2 people. This
|
voice or video buttons near the message composer in a room with more than 2 people. This
|
||||||
will add a Jitsi widget which allows anyone in the room to join.
|
will add a Jitsi widget which allows anyone in the room to join.
|
||||||
|
|
||||||
@@ -16,10 +16,6 @@ provide their own approaches for adding Jitsi widgets.
|
|||||||
|
|
||||||
## Configuring Element to use your self-hosted Jitsi server
|
## Configuring Element to use your self-hosted Jitsi server
|
||||||
|
|
||||||
You can host your own Jitsi server to use with Element. It's usually advisable to use a recent
|
|
||||||
version of Jitsi. In particular, versions older than around 6826 will cause problems with
|
|
||||||
Element 1.9.10 or newer.
|
|
||||||
|
|
||||||
Element will use the Jitsi server that is embedded in the widget, even if it is not the
|
Element will use the Jitsi server that is embedded in the widget, even if it is not the
|
||||||
one you configured. This is because conference calls must be held on a single Jitsi
|
one you configured. This is because conference calls must be held on a single Jitsi
|
||||||
server and cannot be split over multiple servers.
|
server and cannot be split over multiple servers.
|
||||||
@@ -34,17 +30,17 @@ to your [config](./config.md) the following:
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Element's default is `meet.element.io` (a free service offered by Element). `meet.jit.si`
|
The default is `jitsi.riot.im` (a free service offered by Element), and the demo site for
|
||||||
is an instance hosted by Jitsi themselves and is also free to use.
|
Jitsi uses `meet.jit.si` (also free).
|
||||||
|
|
||||||
Once you've applied the config change, refresh Element and press the call button. This
|
Once you've applied the config change, refresh Element and press the call button. This
|
||||||
should start a new conference on your Jitsi server.
|
should start a new conference on your Jitsi server.
|
||||||
|
|
||||||
**Note**: The widget URL will point to a `jitsi.html` page hosted by Element. The Jitsi
|
**Note**: The widget URL will point to a `jitsi.html` page hosted by Element. The Jitsi
|
||||||
domain will appear later in the URL as a configuration parameter.
|
domain will appear later in the URL as a configuration parameter.
|
||||||
|
|
||||||
**Hint**: If you want everyone on your homeserver to use the same Jitsi server by
|
**Hint**: If you want everyone on your homeserver to use the same Jitsi server by
|
||||||
default, and you are using element-web 1.6 or newer, set the following on your homeserver's
|
default, and you are using element-web 1.6 or newer, set the following on your homeserver's
|
||||||
`/.well-known/matrix/client` config:
|
`/.well-known/matrix/client` config:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -59,12 +55,19 @@ default, and you are using element-web 1.6 or newer, set the following on your h
|
|||||||
Element Android (1.0.5+) supports custom Jitsi domains, similar to Element Web above.
|
Element Android (1.0.5+) supports custom Jitsi domains, similar to Element Web above.
|
||||||
|
|
||||||
1:1 calls, or calls between you and one other person, do not use Jitsi. Instead, those
|
1:1 calls, or calls between you and one other person, do not use Jitsi. Instead, those
|
||||||
calls work directly between clients or via TURN servers configured on the respective
|
calls work directly between clients or via TURN servers configured on the respective
|
||||||
homeservers.
|
homeservers.
|
||||||
|
|
||||||
For rooms with more than 2 joined members, when creating a Jitsi conference via call/video buttons of the toolbar (not via integration manager), Element Android will create a widget using the [wrapper](https://github.com/vector-im/element-web/blob/develop/docs/jitsi-dev.md) hosted on `app.element.io`.
|
For rooms with more than 2 joined members, when creating a Jitsi conference via call/video buttons of the toolbar (not via integration manager), Element Android will create a widget using the [wrapper](https://github.com/vector-im/element-web/blob/develop/docs/jitsi-dev.md) hosted on `app.element.io`.
|
||||||
The domain used is the one specified by the `/.well-known/matrix/client` endpoint, and if not present it uses the fallback defined in `config.json` (meet.element.io)
|
The domain used is the one specified by the `/.well-known/matrix/client` endpoint, and if not present it uses the fallback defined in `config.xml` (jitsi.riot.im)
|
||||||
|
|
||||||
For active Jitsi widgets in the room, a native Jitsi widget UI is created and points to the instance specified in the `domain` key of the widget content data.
|
For active Jitsi widgets in the room, a native Jitsi widget UI is created and points to the instance specified in the `domain` key of the widget content data.
|
||||||
|
|
||||||
Element Android manages allowed native widgets permissions a bit differently than web widgets (as the data shared are different and never shared with the widget URL). For Jitsi widgets, permissions are requested only once per domain (consent saved in account data).
|
Element Android manages allowed native widgets permissions a bit differently than web widgets (as the data shared are different and never shared with the widget URL). For Jitsi widgets, permissions are requested only once per domain (consent saved in account data).
|
||||||
|
|
||||||
|
## Element iOS
|
||||||
|
|
||||||
|
Currently the Element mobile apps do not support custom Jitsi servers and will instead
|
||||||
|
use the default `jitsi.riot.im` server. When users on the mobile apps join the call,
|
||||||
|
they will be joining a different conference which has the same name, but not the same
|
||||||
|
participants. This is a known bug and which needs to be fixed.
|
||||||
|
|||||||
@@ -1,187 +0,0 @@
|
|||||||
Running in Kubernetes
|
|
||||||
=====================
|
|
||||||
|
|
||||||
In case you would like to deploy element-web in a kubernetes cluster you can use
|
|
||||||
the provided Kubernetes example below as a starting point. Note that this example assumes the
|
|
||||||
Nginx ingress to be installed.
|
|
||||||
|
|
||||||
Note that the content of the required `config.json` is defined inside this yaml because it needs
|
|
||||||
to be put in your Kubernetes cluster as a `ConfigMap`.
|
|
||||||
|
|
||||||
So to use it you must create a file with this content as a starting point and modify it so it meets
|
|
||||||
the requirements of your environment.
|
|
||||||
|
|
||||||
Then you can deploy it to your cluster with something like `kubectl apply -f my-element-web.yaml`.
|
|
||||||
|
|
||||||
# This is an example of a POSSIBLE config for deploying a single element-web instance in Kubernetes
|
|
||||||
|
|
||||||
# Use the element-web namespace to put it all in.
|
|
||||||
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: element-web
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# The config.json file is to be put into Kubernetes as a config file in such a way that
|
|
||||||
# the element web instance can read it.
|
|
||||||
# The code below shows how this can be done with the config.sample.json content.
|
|
||||||
|
|
||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: element-config
|
|
||||||
namespace: element-web
|
|
||||||
data:
|
|
||||||
config.json: |
|
|
||||||
{
|
|
||||||
"default_server_config": {
|
|
||||||
"m.homeserver": {
|
|
||||||
"base_url": "https://matrix-client.matrix.org",
|
|
||||||
"server_name": "matrix.org"
|
|
||||||
},
|
|
||||||
"m.identity_server": {
|
|
||||||
"base_url": "https://vector.im"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"disable_custom_urls": false,
|
|
||||||
"disable_guests": false,
|
|
||||||
"disable_login_language_selector": false,
|
|
||||||
"disable_3pid_login": false,
|
|
||||||
"brand": "Element",
|
|
||||||
"integrations_ui_url": "https://scalar.vector.im/",
|
|
||||||
"integrations_rest_url": "https://scalar.vector.im/api",
|
|
||||||
"integrations_widgets_urls": [
|
|
||||||
"https://scalar.vector.im/_matrix/integrations/v1",
|
|
||||||
"https://scalar.vector.im/api",
|
|
||||||
"https://scalar-staging.vector.im/_matrix/integrations/v1",
|
|
||||||
"https://scalar-staging.vector.im/api",
|
|
||||||
"https://scalar-staging.riot.im/scalar/api"
|
|
||||||
],
|
|
||||||
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
|
||||||
"defaultCountryCode": "GB",
|
|
||||||
"show_labs_settings": false,
|
|
||||||
"features": { },
|
|
||||||
"default_federate": true,
|
|
||||||
"default_theme": "light",
|
|
||||||
"room_directory": {
|
|
||||||
"servers": [
|
|
||||||
"matrix.org"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"piwik": {
|
|
||||||
"url": "https://piwik.riot.im/",
|
|
||||||
"whitelistedHSUrls": ["https://matrix.org"],
|
|
||||||
"whitelistedISUrls": ["https://vector.im", "https://matrix.org"],
|
|
||||||
"siteId": 1
|
|
||||||
},
|
|
||||||
"enable_presence_by_hs_url": {
|
|
||||||
"https://matrix.org": false,
|
|
||||||
"https://matrix-client.matrix.org": false
|
|
||||||
},
|
|
||||||
"setting_defaults": {
|
|
||||||
"breadcrumbs": true
|
|
||||||
},
|
|
||||||
"jitsi": {
|
|
||||||
"preferred_domain": "meet.element.io"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# A deployment of the element-web for a single instance
|
|
||||||
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: element
|
|
||||||
namespace: element-web
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: element
|
|
||||||
replicas: 1
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: element
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: element
|
|
||||||
image: vectorim/element-web:latest
|
|
||||||
volumeMounts:
|
|
||||||
- name: config-volume
|
|
||||||
mountPath: /app/config.json
|
|
||||||
subPath: config.json
|
|
||||||
ports:
|
|
||||||
- containerPort: 80
|
|
||||||
name: element
|
|
||||||
protocol: TCP
|
|
||||||
readinessProbe:
|
|
||||||
httpGet:
|
|
||||||
path: /
|
|
||||||
port: element
|
|
||||||
initialDelaySeconds: 2
|
|
||||||
periodSeconds: 3
|
|
||||||
livenessProbe:
|
|
||||||
httpGet:
|
|
||||||
path: /
|
|
||||||
port: element
|
|
||||||
initialDelaySeconds: 10
|
|
||||||
periodSeconds: 10
|
|
||||||
volumes:
|
|
||||||
- name: config-volume
|
|
||||||
configMap:
|
|
||||||
name: element-config
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Wrap it all in a Service
|
|
||||||
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: element
|
|
||||||
namespace: element-web
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
app: element
|
|
||||||
ports:
|
|
||||||
- name: default
|
|
||||||
protocol: TCP
|
|
||||||
port: 80
|
|
||||||
targetPort: 80
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# An ingress definition to expose the service via a hostname
|
|
||||||
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: Ingress
|
|
||||||
metadata:
|
|
||||||
name: element
|
|
||||||
namespace: element-web
|
|
||||||
annotations:
|
|
||||||
kubernetes.io/ingress.class: nginx
|
|
||||||
nginx.ingress.kubernetes.io/configuration-snippet: |
|
|
||||||
add_header X-Frame-Options SAMEORIGIN;
|
|
||||||
add_header X-Content-Type-Options nosniff;
|
|
||||||
add_header X-XSS-Protection "1; mode=block";
|
|
||||||
add_header Content-Security-Policy "frame-ancestors 'none'";
|
|
||||||
spec:
|
|
||||||
rules:
|
|
||||||
- host: element.example.nl
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- pathType: Prefix
|
|
||||||
path: /
|
|
||||||
backend:
|
|
||||||
service:
|
|
||||||
name: element
|
|
||||||
port:
|
|
||||||
number: 80
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
123
docs/labs.md
123
docs/labs.md
@@ -7,32 +7,38 @@ to `Settings->Labs`. This list is non-exhaustive and subject to change, chat in
|
|||||||
**Be warned! Labs features are not finalised, they may be fragile, they may change, they may be
|
**Be warned! Labs features are not finalised, they may be fragile, they may change, they may be
|
||||||
dropped. Ask in the room if you are unclear about any details here.**
|
dropped. Ask in the room if you are unclear about any details here.**
|
||||||
|
|
||||||
## Submit Abuse Report to Moderators [MSC3215](https://github.com/matrix-org/matrix-doc/pull/3215) support (`feature_report_to_moderators`)
|
## Matrix Spaces [MSC1772](https://github.com/matrix-org/matrix-doc/pull/1772) support (`feature_spaces`)
|
||||||
|
|
||||||
A new version of the "Report" dialog that lets users send abuse reports directly to room moderators,
|
Enables showing, using, creating, and managing spaces. Create Spaces from the all new Space Panel (to left of Room List).
|
||||||
if the room supports it.
|
|
||||||
|
Incompatible with (will disable) `feature_custom_tags`, `feature_communities_v2_prototypes` and stable Communities/Groups support.
|
||||||
|
|
||||||
|
Still in heavy development.
|
||||||
|
|
||||||
## Render LaTeX maths in messages (`feature_latex_maths`)
|
## Render LaTeX maths in messages (`feature_latex_maths`)
|
||||||
|
|
||||||
Enables rendering of LaTeX maths in messages using [KaTeX](https://katex.org/). LaTeX between single dollar-signs is interpreted as inline maths and double dollar-signs as display maths (i.e. centred on its own line).
|
Enables rendering of LaTeX maths in messages using [KaTeX](https://katex.org/). LaTeX between single dollar-signs is interpreted as inline maths and double dollar-signs as display maths (i.e. centred on its own line).
|
||||||
|
|
||||||
|
## New spinner design (`feature_new_spinner`)
|
||||||
|
|
||||||
|
Replaces the old spinner image with a new, svg-based one featuring a sleeker design.
|
||||||
|
|
||||||
## Message pinning (`feature_pinning`)
|
## Message pinning (`feature_pinning`)
|
||||||
|
|
||||||
Allows you to pin messages in the room. To pin a message, use the 3 dots to the right of the message
|
Allows you to pin messages in the room. To pin a message, use the 3 dots to the right of the message
|
||||||
and select "Pin".
|
and select "Pin".
|
||||||
|
|
||||||
## Jump to date (`feature_jump_to_date`)
|
## Custom status (`feature_custom_status`)
|
||||||
|
|
||||||
Note: This labs feature is only visible when your homeserver has MSC3030 enabled
|
An experimental approach for supporting custom status messages across DMs. To set a status, click on
|
||||||
(in Synapse, add `experimental_features` -> `msc3030_enabled` to your
|
your avatar next to the message composer.
|
||||||
`homeserver.yaml`) which means `GET /_matrix/client/versions` responds with
|
|
||||||
`org.matrix.msc3030` under the `unstable_features` key.
|
|
||||||
|
|
||||||
Adds a dropdown menu to the date separator headers in the timeline which allows
|
## Custom tags (`feature_custom_tags`)
|
||||||
you to jump to last week, last month, the beginning of the room, or choose a
|
|
||||||
date from the calendar.
|
|
||||||
|
|
||||||
Also adds the `/jumptodate 2022-01-31` slash command.
|
An experimental approach for dealing with custom tags. Custom tags will appear in the bottom portion
|
||||||
|
of the community filter panel.
|
||||||
|
|
||||||
|
Setting custom tags is not supported by Element.
|
||||||
|
|
||||||
## Render simple counters in room header (`feature_state_counters`)
|
## Render simple counters in room header (`feature_state_counters`)
|
||||||
|
|
||||||
@@ -57,6 +63,10 @@ Once enabled, send a custom state event to a room to set values:
|
|||||||
|
|
||||||
That's it. Now should see your new counter under the header.
|
That's it. Now should see your new counter under the header.
|
||||||
|
|
||||||
|
## Multiple integration managers (`feature_many_integration_managers`)
|
||||||
|
|
||||||
|
Exposes a way to access all the integration managers known to Element. This is an implementation of [MSC1957](https://github.com/matrix-org/matrix-doc/pull/1957).
|
||||||
|
|
||||||
## New ways to ignore people (`feature_mjolnir`)
|
## New ways to ignore people (`feature_mjolnir`)
|
||||||
|
|
||||||
When enabled, a new settings tab appears for users to be able to manage their ban lists.
|
When enabled, a new settings tab appears for users to be able to manage their ban lists.
|
||||||
@@ -67,6 +77,13 @@ Ban lists are rooms within Matrix, proposed as [MSC2313](https://github.com/matr
|
|||||||
[Mjolnir](https://github.com/matrix-org/mjolnir) is a set of moderation tools which support
|
[Mjolnir](https://github.com/matrix-org/mjolnir) is a set of moderation tools which support
|
||||||
ban lists.
|
ban lists.
|
||||||
|
|
||||||
|
## Inline widgets
|
||||||
|
|
||||||
|
`feature_inline_widgets` allows rendering and sending of inline widgets. Inline
|
||||||
|
widgets are typically polls or rich embedded content in rooms.
|
||||||
|
|
||||||
|
[#riot-web:matrix.org]: https://matrix.to/#/#riot-web:matrix.org
|
||||||
|
|
||||||
## Verifications in DMs (`feature_dm_verification`)
|
## Verifications in DMs (`feature_dm_verification`)
|
||||||
|
|
||||||
An implementation of [MSC2241](https://github.com/matrix-org/matrix-doc/pull/2241). When enabled, verification might not work with devices which don't support MSC2241.
|
An implementation of [MSC2241](https://github.com/matrix-org/matrix-doc/pull/2241). When enabled, verification might not work with devices which don't support MSC2241.
|
||||||
@@ -99,83 +116,17 @@ For some sample themes, check out [aaronraimist/element-themes](https://github.c
|
|||||||
|
|
||||||
## Message preview tweaks
|
## Message preview tweaks
|
||||||
|
|
||||||
To enable message previews in the left panel for reactions in all rooms, enable `feature_roomlist_preview_reactions_all`.
|
To enable message previews for reactions in all rooms, enable `feature_roomlist_preview_reactions_all`.
|
||||||
|
To enable message previews for reactions in DMs, enable `feature_roomlist_preview_reactions_dms`, ignored when it is enabled for all rooms.
|
||||||
|
|
||||||
To enable message previews for reactions in DMs only, enable `feature_roomlist_preview_reactions_dms`. This is ignored when it is enabled for all rooms.
|
## Communities v2 prototyping (`feature_communities_v2_prototypes`) [In Development]
|
||||||
|
|
||||||
|
**This is a highly experimental implementation for parts of the communities v2 experience.** It does not
|
||||||
|
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`)
|
## Dehydrated devices (`feature_dehydration`)
|
||||||
|
|
||||||
Allows users to receive encrypted messages by creating a device that is stored
|
Allows users to receive encrypted messages by creating a device that is stored
|
||||||
encrypted on the server, as described in [MSC2697](https://github.com/matrix-org/matrix-doc/pull/2697).
|
encrypted on the server, as described in [MSC2697](https://github.com/matrix-org/matrix-doc/pull/2697).
|
||||||
|
|
||||||
## Hidden read receipts (`feature_hidden_read_receipts`)
|
|
||||||
|
|
||||||
Enables sending hidden read receipts as per [MSC2285](https://github.com/matrix-org/matrix-doc/pull/2285)
|
|
||||||
|
|
||||||
## Breadcrumbs v2 (`feature_breadcrumbs_v2`)
|
|
||||||
|
|
||||||
Instead of showing the horizontal list of breadcrumbs under the filter field, the new UX is an interactive context menu
|
|
||||||
triggered by the button to the right of the filter field.
|
|
||||||
|
|
||||||
## Spotlight search (`feature_spotlight`) [In Development]
|
|
||||||
|
|
||||||
Switches to a new room search experience.
|
|
||||||
|
|
||||||
## Extensible events rendering (`feature_extensible_events`) [In Development]
|
|
||||||
|
|
||||||
*Intended for developer use only at the moment.*
|
|
||||||
|
|
||||||
Extensible Events are a [new event format](https://github.com/matrix-org/matrix-doc/pull/1767) which
|
|
||||||
supports graceful fallback in unknown event types. Instead of rendering nothing or a blank space, events
|
|
||||||
can define a series of other events which represent the event's information but in different ways. The
|
|
||||||
base of these fallbacks being text.
|
|
||||||
|
|
||||||
Turning this flag on indicates that, when possible, the extensible events structure should be parsed on
|
|
||||||
supported event types. This should lead to zero perceptual change in the timeline except in cases where
|
|
||||||
the sender is using unknown/unrecognised event types.
|
|
||||||
|
|
||||||
Sending events with extensible events structure is always enabled - this should not affect any downstream
|
|
||||||
client.
|
|
||||||
|
|
||||||
## Right panel stays open (`feature_right_panel_default_open`)
|
|
||||||
|
|
||||||
This is an experimental default open right panel mode as a quick fix for those
|
|
||||||
who prefer to have the right panel open consistently across rooms.
|
|
||||||
|
|
||||||
If no right panel state is known for the room or it was closed on the last room
|
|
||||||
visit, it will default to the room member list. Otherwise, the saved card last
|
|
||||||
used in that room is shown.
|
|
||||||
|
|
||||||
## Show current profile of users on historical messages (`feature_use_only_current_profiles`)
|
|
||||||
|
|
||||||
An experimental flag to determine how the app would behave if a user's current display
|
|
||||||
name and avatar (profile) were shown on historical messages instead of the profile details
|
|
||||||
at the time when the message was sent.
|
|
||||||
|
|
||||||
When enabled, historical messages will use the current profile for the sender.
|
|
||||||
|
|
||||||
## Pin drop location sharing (`feature_location_share_pin_drop`) [In Development]
|
|
||||||
|
|
||||||
Enables sharing a pin drop location to the timeline.
|
|
||||||
|
|
||||||
## Live location sharing (`feature_location_share_live`) [In Development]
|
|
||||||
|
|
||||||
Enables sharing your current location to the timeline, with live updates.
|
|
||||||
|
|
||||||
## Threaded Messaging (`feature_thread`)
|
|
||||||
|
|
||||||
Threading allows users to branch out a new conversation from the main timeline of a room. This is particularly useful in high traffic rooms where multiple conversations can happen in parallel or when a single discussion might stretch over a very long period of time.
|
|
||||||
|
|
||||||
Threads can be access by clicking their summary below the root event on the room timeline. Users can find a comprehensive list of threads by click the icon on the room header button.
|
|
||||||
|
|
||||||
This feature might work in degraded mode if the homeserver a user is connected to does not advertise support for the unstable feature `org.matrix.msc3440` when calling the `/versions` API endpoint.
|
|
||||||
|
|
||||||
## Right-click Message Context Menu (`feature_message_right_click_context_menu`)
|
|
||||||
|
|
||||||
Enables showing a right-click context menu when right-clicking messages in the
|
|
||||||
timeline. This menu shows options that can usually be found in the message
|
|
||||||
action bar or in the message options.
|
|
||||||
|
|
||||||
## Voice & video rooms (`feature_video_rooms`) [In Development]
|
|
||||||
|
|
||||||
Enables support for creating and joining video rooms, which are persistent video chats that users can jump in and out of.
|
|
||||||
|
|||||||
@@ -1,3 +1,60 @@
|
|||||||
# Native Node Modules
|
# Native Node Modules
|
||||||
|
|
||||||
This documentation moved to the [`element-desktop`](https://github.com/vector-im/element-desktop/blob/develop/docs/native-node-modules.md) repository.
|
For some features, the desktop version of Element can make use of native Node
|
||||||
|
modules. These allow Riot to integrate with the desktop in ways that a browser
|
||||||
|
cannot.
|
||||||
|
|
||||||
|
While native modules enable powerful new features, they must be complied for
|
||||||
|
each operating system. For official Element releases, we will always build these
|
||||||
|
modules from source to ensure we can trust the compiled output. In the future,
|
||||||
|
we may offer a pre-compiled path for those who want to use these features in a
|
||||||
|
custom build of Element without installing the various build tools required.
|
||||||
|
|
||||||
|
Do note that compiling a module for a particular operating system
|
||||||
|
(Linux/macOS/Windows) will need to be done on that operating system.
|
||||||
|
Cross-compiling from a host OS for a different target OS may be possible, but
|
||||||
|
we don't support this flow with Element dependencies at this time.
|
||||||
|
|
||||||
|
At the moment, we need to make some changes to the Element release process before
|
||||||
|
we can support native Node modules at release time, so these features are
|
||||||
|
currently disabled by default until that is resolved. The following sections
|
||||||
|
explain the manual steps you can use with a custom build of Element to enable
|
||||||
|
these features if you'd like to try them out.
|
||||||
|
|
||||||
|
## Adding Seshat for search in E2E encrypted rooms
|
||||||
|
|
||||||
|
Seshat is a native Node module that adds support for local event indexing and
|
||||||
|
full text search in E2E encrypted rooms.
|
||||||
|
|
||||||
|
Since Seshat is written in Rust, the Rust compiler and related tools need to be
|
||||||
|
installed before installing Seshat itself. To install Rust please consult the
|
||||||
|
official Rust [documentation](https://www.rust-lang.org/tools/install).
|
||||||
|
|
||||||
|
Seshat also depends on the SQLCipher library to store its data in encrypted form
|
||||||
|
on disk. You'll need to install it via your OS package manager.
|
||||||
|
|
||||||
|
After installing the Rust compiler and SQLCipher, Seshat support can be added
|
||||||
|
using yarn inside the `electron_app/` directory:
|
||||||
|
|
||||||
|
yarn add matrix-seshat
|
||||||
|
|
||||||
|
You will have to rebuild the native libraries against electron's version of
|
||||||
|
of node rather than your system node, using the `electron-build-env` tool.
|
||||||
|
This is also needed to when pulling in changes to Seshat using `yarn link`.
|
||||||
|
Again from the `electron_app/` directory:
|
||||||
|
|
||||||
|
yarn add electron-build-env
|
||||||
|
|
||||||
|
Recompiling Seshat itself can be done like so:
|
||||||
|
|
||||||
|
yarn run electron-build-env -- --electron 6.1.1 -- neon build matrix-seshat --release
|
||||||
|
|
||||||
|
Please make sure to include all the `--` as well as the `--release` command line
|
||||||
|
switch at the end. Modify your electron version accordingly depending on the
|
||||||
|
version that is installed on your system.
|
||||||
|
|
||||||
|
After this is done the Electron version of Element can be run from the main folder
|
||||||
|
as usual using:
|
||||||
|
|
||||||
|
yarn electron
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,10 @@ automatically set up a preview site with a full deployment of Element with the
|
|||||||
changes from the pull request added in so that anyone can easily test and review
|
changes from the pull request added in so that anyone can easily test and review
|
||||||
them. This is especially useful for checking visual and interactive changes.
|
them. This is especially useful for checking visual and interactive changes.
|
||||||
|
|
||||||
To access the preview site, click the link in the description of the PR.
|
To access the preview site, scroll down to the bottom of the PR where the
|
||||||
|
various CI results are displayed:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
The checks section could be collapsed at first, so you may need to click "Show
|
The checks section could be collapsed at first, so you may need to click "Show
|
||||||
all checks" to reveal them. Look for an entry that mentions `deploy-preview`. It
|
all checks" to reveal them. Look for an entry that mentions `deploy-preview`. It
|
||||||
|
|||||||
@@ -58,43 +58,6 @@ When reviewing code, here are some things we look for and also things we avoid:
|
|||||||
* Assign issues only when in progress to indicate to others what can be picked
|
* Assign issues only when in progress to indicate to others what can be picked
|
||||||
up
|
up
|
||||||
|
|
||||||
## Code Quality
|
|
||||||
|
|
||||||
In the past, we have occasionally written different kinds of tests for
|
|
||||||
Element and the SDKs, but it hasn't been a consistent focus. Going forward, we'd
|
|
||||||
like to change that.
|
|
||||||
|
|
||||||
* For new features, code reviewers will expect some form of automated testing to
|
|
||||||
be included by default
|
|
||||||
* For bug fixes, regression tests are of course great to have, but we don't want
|
|
||||||
to block fixes on this, so we won't require them at this time
|
|
||||||
|
|
||||||
The above policy is not a strict rule, but instead it's meant to be a
|
|
||||||
conversation between the author and reviewer. As an author, try to think about
|
|
||||||
writing a test when making your next change. As a reviewer, try to think about
|
|
||||||
how you might test the area of code you are reviewing. If the reviewer agrees
|
|
||||||
it would be quite difficult to test some new feature, then it's okay for them to
|
|
||||||
accept the change without tests for now, but we'd eventually like to be more
|
|
||||||
strict about this further down the road.
|
|
||||||
|
|
||||||
If you do spot areas that are quite hard to test today, please let us know in
|
|
||||||
[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org). We can
|
|
||||||
work on improving the app architecture and testing helpers so that future tests
|
|
||||||
are easier for everyone to write, but we won't know which parts are difficult
|
|
||||||
unless people shout when stumbling through them.
|
|
||||||
|
|
||||||
We recognise that this testing policy will slow things down a bit, but overall
|
|
||||||
it should encourage better long-term health of the app and give everyone more
|
|
||||||
confidence when making changes as coverage increases over time.
|
|
||||||
|
|
||||||
For changes guarded by a feature flag, we currently lean towards prioritising
|
|
||||||
our ability to evolve quickly using such flags and thus we will not currently
|
|
||||||
require tests to appear at the same time as the initial landing of features
|
|
||||||
guarded by flags, as long as (for new flagged features going forward) the
|
|
||||||
feature author understands that they are effectively deferring part of their
|
|
||||||
work (adding tests) until later and tests are expected to appear before the
|
|
||||||
feature can be enabled by default.
|
|
||||||
|
|
||||||
## Design and Product Review
|
## Design and Product Review
|
||||||
|
|
||||||
We want to ensure that all changes to Element fit with our design and product
|
We want to ensure that all changes to Element fit with our design and product
|
||||||
@@ -116,5 +79,5 @@ easily.
|
|||||||
|
|
||||||
Before starting work on a feature, it's best to ensure your plan aligns well
|
Before starting work on a feature, it's best to ensure your plan aligns well
|
||||||
with our vision for Element. Please chat with the team in
|
with our vision for Element. Please chat with the team in
|
||||||
[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) before
|
[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) before you
|
||||||
you start so we can ensure it's something we'd be willing to merge.
|
start so we can ensure it's something we'd be willing to merge.
|
||||||
|
|||||||
68
docs/skinning thoughts.md
Normal file
68
docs/skinning thoughts.md
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
== Skinning refactor ==
|
||||||
|
|
||||||
|
matrix-react-sdk
|
||||||
|
- base images
|
||||||
|
- base CSS
|
||||||
|
- all the components needed to build a workable app (including the top layer)
|
||||||
|
|
||||||
|
element-web: the Element skin
|
||||||
|
- Element-specific classes (e.g. login header/footer)
|
||||||
|
- Element-specific themes
|
||||||
|
- light
|
||||||
|
- dark
|
||||||
|
|
||||||
|
i.e. the only things which should go into element-web are bits which apply vector-specific skinning
|
||||||
|
specifically "Stuff that any other brand would not want to use. (e.g. Element logos, links, T&Cs)"
|
||||||
|
- Questions:
|
||||||
|
- Electron app? (should probably be a separate repo in its own right? but might as well go here for now)
|
||||||
|
- index.html & index.js? (should be in matrix-react-sdk, given the SDK is useless without them?)
|
||||||
|
|
||||||
|
ideally matrix-react-sdk itself should ship with a default skin which actually works built in.
|
||||||
|
|
||||||
|
status skin (can go in the same app for now)
|
||||||
|
- has status theme
|
||||||
|
- which inherits from Element light theme
|
||||||
|
- how do we share graphics between skins?
|
||||||
|
- shove them into react-sdk, or...
|
||||||
|
- guess we do ../../vector/img
|
||||||
|
- this means keeping the skin name in the images (unless /img is a shortcut to the right skin's images)
|
||||||
|
|
||||||
|
out of scope:
|
||||||
|
- making the components more independent, so they can be used in isolation.
|
||||||
|
- that said, the bits which should probably be used by being embeded into a different app:
|
||||||
|
- login/reg
|
||||||
|
- RoomView + RoomSettings
|
||||||
|
- MessageComposer
|
||||||
|
- RoomList
|
||||||
|
- MemberList
|
||||||
|
- MemberInfo
|
||||||
|
- Voip UI
|
||||||
|
- UserSettings
|
||||||
|
- sharing different js-sdks between the different isolated modules
|
||||||
|
|
||||||
|
other changes:
|
||||||
|
- how do we handle i18n?
|
||||||
|
- each skin should really be its own i18n project. As long as all the commonality stuff is in matrix-react-sdk this shouldn't be too bad.
|
||||||
|
- ability to associate components with a given skin
|
||||||
|
- skins/vector/src <-- components
|
||||||
|
- skins/vector/css
|
||||||
|
- skins/vector/img
|
||||||
|
- skins/vector/fonts
|
||||||
|
- gather together themes (per skin) into a single place too
|
||||||
|
- skins/vector/themes/foo/css
|
||||||
|
- skins/vector/themes/foo/img
|
||||||
|
- skins/vector/themes/foo/fonts
|
||||||
|
- ideally element-web would contain almost nothing but skins/vector directory.
|
||||||
|
- ability to entirely replace CSS rather than override it for a given theme
|
||||||
|
- e.g. if we replace `Login.js` with `StatusLogin.js`, then we should similarly be able to replace `_Login.scss` with `_StatusLogin.scss`.
|
||||||
|
|
||||||
|
random thoughts;
|
||||||
|
- should we be able to change the entire skin at runtime (more like wordpress) - to the extent of replacing entire components?
|
||||||
|
- might pose security issues if a theme can be swapped out to replace MatrixChat or other fundamental functionality at runtime
|
||||||
|
- if so, perhaps skins & themes should converge...
|
||||||
|
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Immediate plan for Status:
|
||||||
|
* Implement it as a theme for the Element skin
|
||||||
|
* Ideally move skins to a sensible level (possibly even including src?)
|
||||||
@@ -6,7 +6,7 @@ Element app via CSS & custom imagery.
|
|||||||
|
|
||||||
They are *NOT* co be confused with 'skins', which describe apps which sit on top
|
They are *NOT* co be confused with 'skins', which describe apps which sit on top
|
||||||
of matrix-react-sdk - e.g. in theory Element itself is a react-sdk skin.
|
of matrix-react-sdk - e.g. in theory Element itself is a react-sdk skin.
|
||||||
As of March 2022, skins are not fully supported; Element is the only available skin.
|
As of Jan 2017, skins are not fully supported; Element is the only available skin.
|
||||||
|
|
||||||
To define a theme for Element:
|
To define a theme for Element:
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ default theme, you would use `default_theme: "custom-Electric Blue"`.
|
|||||||
eg. in config.json:
|
eg. in config.json:
|
||||||
|
|
||||||
```
|
```
|
||||||
"setting_defaults": {
|
"settingDefaults": {
|
||||||
"custom_themes": [
|
"custom_themes": [
|
||||||
{
|
{
|
||||||
"name": "Electric Blue",
|
"name": "Electric Blue",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
- A working [Development Setup](../README.md#setting-up-a-dev-environment)
|
- A working [Development Setup](../../#setting-up-a-dev-environment)
|
||||||
- Including up-to-date versions of matrix-react-sdk and matrix-js-sdk
|
- Including up-to-date versions of matrix-react-sdk and matrix-js-sdk
|
||||||
- Latest LTS version of Node.js installed
|
- Latest LTS version of Node.js installed
|
||||||
- Be able to understand English
|
- Be able to understand English
|
||||||
@@ -30,7 +30,7 @@ function getColorName(hex) {
|
|||||||
|
|
||||||
## Adding new strings
|
## Adding new strings
|
||||||
|
|
||||||
1. Check if the import ``import { _t } from 'matrix-react-sdk/src/languageHandler';`` is present. If not add it to the other import statements. Also import `_td` if needed.
|
1. Check if the import ``import { _t } from 'matrix-react-sdk/lib/languageHandler';`` is present. If not add it to the other import statements. Also import `_td` if needed.
|
||||||
1. Add ``_t()`` to your string. (Don't forget curly braces when you assign an expression to JSX attributes in the render method). If the string is introduced at a point before the translation system has not yet been initialized, use `_td()` instead, and call `_t()` at the appropriate time.
|
1. Add ``_t()`` to your string. (Don't forget curly braces when you assign an expression to JSX attributes in the render method). If the string is introduced at a point before the translation system has not yet been initialized, use `_td()` instead, and call `_t()` at the appropriate time.
|
||||||
1. Run `yarn i18n` to update ``src/i18n/strings/en_EN.json``
|
1. Run `yarn i18n` to update ``src/i18n/strings/en_EN.json``
|
||||||
1. If you added a string with a plural, you can add other English plural variants to ``src/i18n/strings/en_EN.json`` (remeber to edit the one in the same project as the source file containing your new translation).
|
1. If you added a string with a plural, you can add other English plural variants to ``src/i18n/strings/en_EN.json`` (remeber to edit the one in the same project as the source file containing your new translation).
|
||||||
|
|||||||
@@ -8,9 +8,8 @@
|
|||||||
|
|
||||||
## Step 0: Join #element-translations:matrix.org
|
## Step 0: Join #element-translations:matrix.org
|
||||||
|
|
||||||
1. Come and join https://matrix.to/#/#element-translations:matrix.org for general discussion
|
1. Come and join https://matrix.to/#/#element-translations:matrix.org
|
||||||
2. Join https://matrix.to/#/#element-translators:matrix.org for language-specific rooms
|
2. Read scrollback and/or ask if anyone else is working on your language, and co-ordinate if needed. In general little-or-no coordination is needed though :)
|
||||||
3. Read scrollback and/or ask if anyone else is working on your language, and co-ordinate if needed. In general little-or-no coordination is needed though :)
|
|
||||||
|
|
||||||
## Step 1: Preparing your Weblate Profile
|
## Step 1: Preparing your Weblate Profile
|
||||||
|
|
||||||
@@ -18,6 +17,7 @@
|
|||||||
2. After registering check if you got an email to verify your account and click the link (if there is none head to step 1.4)
|
2. After registering check if you got an email to verify your account and click the link (if there is none head to step 1.4)
|
||||||
3. Log into weblate
|
3. Log into weblate
|
||||||
4. Head to https://translate.element.io/accounts/profile/ and select the languages you know and maybe another language you know too.
|
4. Head to https://translate.element.io/accounts/profile/ and select the languages you know and maybe another language you know too.
|
||||||
|
6. Head to https://translate.element.io/accounts/profile/#subscriptions and select Element Web as Project
|
||||||
|
|
||||||
## How to check if your language already is being translated
|
## How to check if your language already is being translated
|
||||||
|
|
||||||
@@ -61,4 +61,4 @@ You can use inside the translation field "Review needed" checkbox. It will be sh
|
|||||||
|
|
||||||
### Further reading
|
### Further reading
|
||||||
|
|
||||||
The official Weblate doc provides some more in-depth explanation on how to do translations and talks about do and don'ts. You can find it at: https://docs.weblate.org/en/latest/user/translating.html
|
The official Weblate doc provides some more in-deepth explanation on how to do translations and talks about do and don'ts. You can find it at: https://docs.weblate.org/en/latest/user/translating.html
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
],
|
],
|
||||||
"hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web",
|
"hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web",
|
||||||
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
||||||
"uisi_autorageshake_app": "element-auto-uisi",
|
|
||||||
"showLabsSettings": false,
|
"showLabsSettings": false,
|
||||||
"piwik": {
|
"piwik": {
|
||||||
"url": "https://piwik.riot.im/",
|
"url": "https://piwik.riot.im/",
|
||||||
@@ -22,8 +21,7 @@
|
|||||||
"roomDirectory": {
|
"roomDirectory": {
|
||||||
"servers": [
|
"servers": [
|
||||||
"matrix.org",
|
"matrix.org",
|
||||||
"gitter.im",
|
"gitter.im"
|
||||||
"libera.chat"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"enable_presence_by_hs_url": {
|
"enable_presence_by_hs_url": {
|
||||||
@@ -49,10 +47,5 @@
|
|||||||
"privacyPolicyUrl": "https://element.io/privacy",
|
"privacyPolicyUrl": "https://element.io/privacy",
|
||||||
"termsOfServiceUrl": "https://element.io/terms-of-service",
|
"termsOfServiceUrl": "https://element.io/terms-of-service",
|
||||||
"url": "https://ems.element.io/element-home/in-app-loader"
|
"url": "https://ems.element.io/element-home/in-app-loader"
|
||||||
},
|
}
|
||||||
"posthog": {
|
|
||||||
"projectApiKey": "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
|
|
||||||
"apiHost": "https://posthog.element.io"
|
|
||||||
},
|
|
||||||
"map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"default_server_name": "matrix.org",
|
"default_server_name": "matrix.org",
|
||||||
"brand": "Element",
|
"brand": "Element",
|
||||||
"integrations_ui_url": "https://scalar.vector.im/",
|
"integrations_ui_url": "https://scalar-staging.vector.im/",
|
||||||
"integrations_rest_url": "https://scalar.vector.im/api",
|
"integrations_rest_url": "https://scalar-staging.vector.im/api",
|
||||||
"integrations_widgets_urls": [
|
"integrations_widgets_urls": [
|
||||||
"https://scalar.vector.im/_matrix/integrations/v1",
|
"https://scalar.vector.im/_matrix/integrations/v1",
|
||||||
"https://scalar.vector.im/api",
|
"https://scalar.vector.im/api",
|
||||||
@@ -12,7 +12,6 @@
|
|||||||
],
|
],
|
||||||
"hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web",
|
"hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web",
|
||||||
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
||||||
"uisi_autorageshake_app": "element-auto-uisi",
|
|
||||||
"showLabsSettings": true,
|
"showLabsSettings": true,
|
||||||
"piwik": {
|
"piwik": {
|
||||||
"url": "https://piwik.riot.im/",
|
"url": "https://piwik.riot.im/",
|
||||||
@@ -22,8 +21,7 @@
|
|||||||
"roomDirectory": {
|
"roomDirectory": {
|
||||||
"servers": [
|
"servers": [
|
||||||
"matrix.org",
|
"matrix.org",
|
||||||
"gitter.im",
|
"gitter.im"
|
||||||
"libera.chat"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"enable_presence_by_hs_url": {
|
"enable_presence_by_hs_url": {
|
||||||
@@ -49,17 +47,5 @@
|
|||||||
"privacyPolicyUrl": "https://element.io/privacy",
|
"privacyPolicyUrl": "https://element.io/privacy",
|
||||||
"termsOfServiceUrl": "https://element.io/terms-of-service",
|
"termsOfServiceUrl": "https://element.io/terms-of-service",
|
||||||
"url": "https://ems.element.io/element-home/in-app-loader"
|
"url": "https://ems.element.io/element-home/in-app-loader"
|
||||||
},
|
}
|
||||||
"sentry": {
|
|
||||||
"dsn": "https://029a0eb289f942508ae0fb17935bd8c5@sentry.matrix.org/6",
|
|
||||||
"environment": "develop"
|
|
||||||
},
|
|
||||||
"posthog": {
|
|
||||||
"projectApiKey": "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
|
|
||||||
"apiHost": "https://posthog.element.io"
|
|
||||||
},
|
|
||||||
"features": {
|
|
||||||
"feature_spotlight": true
|
|
||||||
},
|
|
||||||
"map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
server {
|
|
||||||
listen 80;
|
|
||||||
listen [::]:80;
|
|
||||||
server_name localhost;
|
|
||||||
|
|
||||||
root /usr/share/nginx/html;
|
|
||||||
index index.html;
|
|
||||||
|
|
||||||
# Set no-cache for the version, config and index.html
|
|
||||||
# so that browsers always check for a new copy of Element Web.
|
|
||||||
# NB http://your-domain/ and http://your-domain/? are also covered by this
|
|
||||||
|
|
||||||
location = /index.html {
|
|
||||||
add_header Cache-Control "no-cache";
|
|
||||||
}
|
|
||||||
location = /version {
|
|
||||||
add_header Cache-Control "no-cache";
|
|
||||||
}
|
|
||||||
# covers config.json and config.hostname.json requests as it is prefix.
|
|
||||||
location /config {
|
|
||||||
add_header Cache-Control "no-cache";
|
|
||||||
}
|
|
||||||
# redirect server error pages to the static page /50x.html
|
|
||||||
#
|
|
||||||
error_page 500 502 503 504 /50x.html;
|
|
||||||
}
|
|
||||||
|
|
||||||
130
package.json
130
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "element-web",
|
"name": "element-web",
|
||||||
"version": "1.10.13-rc.1",
|
"version": "1.7.23",
|
||||||
"description": "A feature-rich client for Matrix.org",
|
"description": "A feature-rich client for Matrix.org",
|
||||||
"author": "New Vector Ltd.",
|
"author": "New Vector Ltd.",
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -29,110 +29,105 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"i18n": "matrix-gen-i18n",
|
"i18n": "matrix-gen-i18n",
|
||||||
"prunei18n": "matrix-prune-i18n",
|
"prunei18n": "matrix-prune-i18n",
|
||||||
"diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && matrix-gen-i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json",
|
"diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && yarn i18n && node scripts/compare-file.js src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json",
|
||||||
|
"reskindex": "reskindex -h src/header",
|
||||||
|
"reskindex:watch": "reskindex -h src/header -w",
|
||||||
|
"reskindex:watch-react": "node scripts/yarn-sub.js matrix-react-sdk reskindex:watch",
|
||||||
"clean": "rimraf lib webapp",
|
"clean": "rimraf lib webapp",
|
||||||
"build": "yarn clean && yarn build:genfiles && yarn build:bundle",
|
"build": "yarn clean && yarn build:genfiles && yarn build:bundle",
|
||||||
"build-stats": "yarn clean && yarn build:genfiles && yarn build:bundle-stats",
|
"build-stats": "yarn clean && yarn build:genfiles && yarn build:bundle-stats",
|
||||||
"build:jitsi": "node scripts/build-jitsi.js",
|
"build:jitsi": "node scripts/build-jitsi.js",
|
||||||
"build:res": "node scripts/copy-res.js",
|
"build:res": "node scripts/copy-res.js",
|
||||||
"build:genfiles": "yarn build:res && yarn build:jitsi",
|
"build:genfiles": "yarn reskindex && yarn build:res && yarn build:jitsi",
|
||||||
"build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js",
|
"build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js",
|
||||||
"build:bundle": "webpack --progress --bail --mode production",
|
"build:bundle": "webpack --progress --bail --mode production",
|
||||||
"build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json",
|
"build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json",
|
||||||
"dist": "scripts/package.sh",
|
"dist": "scripts/package.sh",
|
||||||
"start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js\"",
|
"start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"",
|
||||||
"start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js --https\"",
|
|
||||||
"start:res": "yarn build:jitsi && node scripts/copy-res.js -w",
|
"start:res": "yarn build:jitsi && node scripts/copy-res.js -w",
|
||||||
"start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --mode development --disable-host-check --hot",
|
"start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development",
|
||||||
"lint": "yarn lint:types && yarn lint:js && yarn lint:style",
|
"lint": "yarn lint:types && yarn lint:js && yarn lint:style",
|
||||||
"lint:js": "eslint --max-warnings 0 src",
|
"lint:js": "eslint src",
|
||||||
"lint:js-fix": "eslint --fix src",
|
|
||||||
"lint:types": "tsc --noEmit --jsx react",
|
"lint:types": "tsc --noEmit --jsx react",
|
||||||
"lint:style": "stylelint \"res/css/**/*.scss\"",
|
"lint:style": "stylelint 'res/css/**/*.scss'",
|
||||||
"test": "jest",
|
"test": "jest"
|
||||||
"coverage": "yarn test --coverage"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz",
|
|
||||||
"browser-request": "^0.3.3",
|
"browser-request": "^0.3.3",
|
||||||
"gfm.css": "^1.1.2",
|
"gfm.css": "^1.1.2",
|
||||||
"jsrsasign": "^10.2.0",
|
"highlight.js": "^10.5.0",
|
||||||
|
"jsrsasign": "^10.1.5",
|
||||||
"katex": "^0.12.0",
|
"katex": "^0.12.0",
|
||||||
"matrix-js-sdk": "18.0.0-rc.1",
|
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
|
||||||
"matrix-react-sdk": "3.45.0-rc.2",
|
"matrix-react-sdk": "github:matrix-org/matrix-react-sdk#develop",
|
||||||
"matrix-widget-api": "^0.1.0-beta.18",
|
"matrix-widget-api": "^0.1.0-beta.13",
|
||||||
|
"olm": "https://packages.matrix.org/npm/olm/olm-3.2.1.tgz",
|
||||||
"prop-types": "^15.7.2",
|
"prop-types": "^15.7.2",
|
||||||
"react": "17.0.2",
|
"random-string": "^0.2.0",
|
||||||
"react-dom": "17.0.2",
|
"react": "^16.14.0",
|
||||||
"sanitize-html": "^2.3.2",
|
"react-dom": "^16.14.0",
|
||||||
"ua-parser-js": "^0.7.24"
|
"sanitize-html": "github:apostrophecms/sanitize-html#3c7f93f2058f696f5359e3e58d464161647226db",
|
||||||
|
"ua-parser-js": "^0.7.23"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.12.10",
|
"@babel/core": "^7.12.10",
|
||||||
"@babel/eslint-parser": "^7.12.10",
|
|
||||||
"@babel/eslint-plugin": "^7.12.10",
|
|
||||||
"@babel/plugin-proposal-class-properties": "^7.12.1",
|
"@babel/plugin-proposal-class-properties": "^7.12.1",
|
||||||
|
"@babel/plugin-proposal-decorators": "^7.12.12",
|
||||||
"@babel/plugin-proposal-export-default-from": "^7.12.1",
|
"@babel/plugin-proposal-export-default-from": "^7.12.1",
|
||||||
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
|
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
|
||||||
"@babel/plugin-proposal-numeric-separator": "^7.12.7",
|
"@babel/plugin-proposal-numeric-separator": "^7.12.7",
|
||||||
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
|
"@babel/plugin-proposal-object-rest-spread": "^7.12.1",
|
||||||
"@babel/plugin-proposal-optional-chaining": "^7.12.7",
|
"@babel/plugin-proposal-optional-chaining": "^7.12.7",
|
||||||
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
||||||
|
"@babel/plugin-transform-flow-comments": "^7.12.1",
|
||||||
"@babel/plugin-transform-runtime": "^7.12.10",
|
"@babel/plugin-transform-runtime": "^7.12.10",
|
||||||
"@babel/preset-env": "^7.12.11",
|
"@babel/preset-env": "^7.12.11",
|
||||||
|
"@babel/preset-flow": "^7.12.1",
|
||||||
"@babel/preset-react": "^7.12.10",
|
"@babel/preset-react": "^7.12.10",
|
||||||
"@babel/preset-typescript": "^7.12.7",
|
"@babel/preset-typescript": "^7.12.7",
|
||||||
"@babel/register": "^7.12.10",
|
"@babel/register": "^7.12.10",
|
||||||
"@babel/runtime": "^7.12.5",
|
"@babel/runtime": "^7.12.5",
|
||||||
"@principalstudio/html-webpack-inject-preload": "^1.2.7",
|
|
||||||
"@sentry/webpack-plugin": "^1.18.1",
|
|
||||||
"@svgr/webpack": "^5.5.0",
|
|
||||||
"@types/flux": "^3.1.9",
|
"@types/flux": "^3.1.9",
|
||||||
"@types/jest": "^27.0.2",
|
|
||||||
"@types/modernizr": "^3.5.3",
|
"@types/modernizr": "^3.5.3",
|
||||||
"@types/node": "^14.14.22",
|
"@types/node": "^14.14.22",
|
||||||
"@types/react": "17.0.14",
|
"@types/react": "^16.9",
|
||||||
"@types/react-dom": "17.0.9",
|
"@types/react-dom": "^16.9.10",
|
||||||
"@types/sanitize-html": "^2.3.1",
|
"@types/sanitize-html": "^1.27.1",
|
||||||
"@types/ua-parser-js": "^0.7.36",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^5.6.0",
|
|
||||||
"@typescript-eslint/parser": "^5.6.0",
|
|
||||||
"allchange": "^1.0.6",
|
|
||||||
"autoprefixer": "^9.8.6",
|
"autoprefixer": "^9.8.6",
|
||||||
|
"babel-eslint": "^10.1.0",
|
||||||
"babel-jest": "^26.6.3",
|
"babel-jest": "^26.6.3",
|
||||||
"babel-loader": "^8.2.2",
|
"babel-loader": "^8.2.2",
|
||||||
|
"canvas": "^2.6.1",
|
||||||
"chokidar": "^3.5.1",
|
"chokidar": "^3.5.1",
|
||||||
"concurrently": "^5.3.0",
|
"concurrently": "^5.3.0",
|
||||||
"cpx": "^1.5.0",
|
"cpx": "^1.5.0",
|
||||||
"css-loader": "^3.6.0",
|
"css-loader": "^3.6.0",
|
||||||
"dotenv": "^10.0.0",
|
"eslint": "7.18.0",
|
||||||
"eslint": "8.9.0",
|
"eslint-config-matrix-org": "^0.2.0",
|
||||||
"eslint-config-google": "^0.14.0",
|
"eslint-plugin-babel": "^5.3.1",
|
||||||
"eslint-plugin-import": "^2.25.4",
|
"eslint-plugin-flowtype": "^5.2.0",
|
||||||
"eslint-plugin-matrix-org": "^0.4.0",
|
"eslint-plugin-react": "^7.22.0",
|
||||||
"eslint-plugin-react": "^7.28.0",
|
"eslint-plugin-react-hooks": "^4.2.0",
|
||||||
"eslint-plugin-react-hooks": "^4.3.0",
|
|
||||||
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
||||||
"fake-indexeddb": "^3.1.2",
|
"fake-indexeddb": "^3.1.2",
|
||||||
"file-loader": "^5.1.0",
|
"file-loader": "^5.1.0",
|
||||||
"fs-extra": "^0.30.0",
|
"fs-extra": "^0.30.0",
|
||||||
"html-webpack-plugin": "^4.5.2",
|
"html-webpack-plugin": "^3.2.0",
|
||||||
"jest": "^26.6.3",
|
"jest": "^26.6.3",
|
||||||
"jest-environment-jsdom-sixteen": "^1.0.3",
|
"jest-environment-jsdom-sixteen": "^1.0.3",
|
||||||
"jest-raw-loader": "^1.0.1",
|
|
||||||
"jest-sonar-reporter": "^2.0.0",
|
|
||||||
"json-loader": "^0.5.7",
|
"json-loader": "^0.5.7",
|
||||||
"loader-utils": "^1.4.0",
|
"loader-utils": "^1.4.0",
|
||||||
"matrix-mock-request": "^1.2.3",
|
"matrix-mock-request": "^1.2.3",
|
||||||
"matrix-react-test-utils": "^0.2.3",
|
"matrix-react-test-utils": "^0.2.2",
|
||||||
"matrix-web-i18n": "^1.2.0",
|
|
||||||
"mini-css-extract-plugin": "^0.12.0",
|
"mini-css-extract-plugin": "^0.12.0",
|
||||||
"minimist": "^1.2.6",
|
"minimist": "^1.2.5",
|
||||||
"mkdirp": "^1.0.4",
|
"mkdirp": "^1.0.4",
|
||||||
"modernizr": "^3.12.0",
|
"modernizr": "^3.11.4",
|
||||||
"node-fetch": "^2.6.7",
|
"node-fetch": "^2.6.1",
|
||||||
"optimize-css-assets-webpack-plugin": "^5.0.4",
|
"optimize-css-assets-webpack-plugin": "^5.0.4",
|
||||||
|
"postcss-calc": "^7.0.5",
|
||||||
"postcss-easings": "^2.0.0",
|
"postcss-easings": "^2.0.0",
|
||||||
|
"postcss-extend": "^1.0.5",
|
||||||
"postcss-hexrgba": "^2.0.1",
|
"postcss-hexrgba": "^2.0.1",
|
||||||
"postcss-import": "^12.0.1",
|
"postcss-import": "^12.0.1",
|
||||||
"postcss-loader": "^3.0.0",
|
"postcss-loader": "^3.0.0",
|
||||||
@@ -142,65 +137,40 @@
|
|||||||
"postcss-scss": "^2.1.1",
|
"postcss-scss": "^2.1.1",
|
||||||
"postcss-simple-vars": "^5.0.2",
|
"postcss-simple-vars": "^5.0.2",
|
||||||
"postcss-strip-inline-comments": "^0.1.5",
|
"postcss-strip-inline-comments": "^0.1.5",
|
||||||
"raw-loader": "^4.0.2",
|
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
"shell-escape": "^0.2.0",
|
"shell-escape": "^0.2.0",
|
||||||
"simple-proxy-agent": "^1.1.0",
|
"simple-proxy-agent": "^1.1.0",
|
||||||
"string-replace-loader": "2",
|
|
||||||
"style-loader": "2",
|
|
||||||
"stylelint": "^13.9.0",
|
"stylelint": "^13.9.0",
|
||||||
"stylelint-config-standard": "^20.0.0",
|
|
||||||
"stylelint-scss": "^3.18.0",
|
|
||||||
"terser-webpack-plugin": "^2.3.8",
|
"terser-webpack-plugin": "^2.3.8",
|
||||||
"typescript": "^4.5.3",
|
"typescript": "^4.1.3",
|
||||||
"webpack": "^4.46.0",
|
"webpack": "^4.46.0",
|
||||||
"webpack-cli": "^3.3.12",
|
"webpack-cli": "^3.3.12",
|
||||||
"webpack-dev-server": "^3.11.2",
|
"webpack-dev-server": "^3.11.2"
|
||||||
"worker-loader": "^2.0.0",
|
|
||||||
"worklet-loader": "^2.0.0"
|
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"@types/react": "17.0.14"
|
"**/@types/react": "^16.14"
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"testEnvironment": "jest-environment-jsdom-sixteen",
|
"testEnvironment": "jest-environment-jsdom-sixteen",
|
||||||
"testMatch": [
|
"testMatch": [
|
||||||
"<rootDir>/test/**/*-test.[tj]s?(x)"
|
"<rootDir>/test/**/*-test.js"
|
||||||
],
|
],
|
||||||
"setupFilesAfterEnv": [
|
"setupFilesAfterEnv": [
|
||||||
"<rootDir>/node_modules/matrix-react-sdk/test/setupTests.js"
|
"<rootDir>/node_modules/matrix-react-sdk/test/setupTests.js"
|
||||||
],
|
],
|
||||||
"moduleNameMapper": {
|
"moduleNameMapper": {
|
||||||
"\\.(css|scss)$": "<rootDir>/__mocks__/cssMock.js",
|
"\\.(css|scss)$": "<rootDir>/__mocks__/cssMock.js",
|
||||||
"\\.(gif|png|ttf|woff2)$": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/imageMock.js",
|
"\\.(gif|png|svg|ttf|woff2)$": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/imageMock.js",
|
||||||
"\\.svg$": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/svg.js",
|
|
||||||
"\\$webapp/i18n/languages.json": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/languages.json",
|
"\\$webapp/i18n/languages.json": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/languages.json",
|
||||||
"^browser-request$": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/browser-request.js",
|
"^browser-request$": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/browser-request.js",
|
||||||
"^react$": "<rootDir>/node_modules/react",
|
"^react$": "<rootDir>/node_modules/react",
|
||||||
"^react-dom$": "<rootDir>/node_modules/react-dom",
|
"^react-dom$": "<rootDir>/node_modules/react-dom",
|
||||||
"^matrix-js-sdk$": "<rootDir>/node_modules/matrix-js-sdk/src",
|
"^matrix-js-sdk$": "<rootDir>/node_modules/matrix-js-sdk/src",
|
||||||
"^matrix-react-sdk$": "<rootDir>/node_modules/matrix-react-sdk/src",
|
"^matrix-react-sdk$": "<rootDir>/node_modules/matrix-react-sdk/src"
|
||||||
"decoderWorker\\.min\\.js": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
|
||||||
"decoderWorker\\.min\\.wasm": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
|
||||||
"waveWorker\\.min\\.js": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
|
||||||
"context-filter-polyfill": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js",
|
|
||||||
"FontManager.ts": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/FontManager.js",
|
|
||||||
"workers/(.+)\\.worker\\.ts": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/workerMock.js",
|
|
||||||
"^!!raw-loader!.*": "jest-raw-loader",
|
|
||||||
"RecorderWorklet": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/empty.js"
|
|
||||||
},
|
},
|
||||||
"transformIgnorePatterns": [
|
"transformIgnorePatterns": [
|
||||||
"/node_modules/(?!matrix-js-sdk).+$",
|
"/node_modules/(?!matrix-js-sdk).+$",
|
||||||
"/node_modules/(?!matrix-react-sdk).+$"
|
"/node_modules/(?!matrix-react-sdk).+$"
|
||||||
],
|
]
|
||||||
"coverageReporters": [
|
|
||||||
"text-summary",
|
|
||||||
"lcov"
|
|
||||||
],
|
|
||||||
"testResultsProcessor": "jest-sonar-reporter"
|
|
||||||
},
|
|
||||||
"jestSonar": {
|
|
||||||
"reportPath": "coverage",
|
|
||||||
"sonar56x": true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1 @@
|
|||||||
signing_id: releases@riot.im
|
signing_id: releases@riot.im
|
||||||
subprojects:
|
|
||||||
matrix-react-sdk:
|
|
||||||
includeByDefault: true
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ limitations under the License.
|
|||||||
background: -moz-linear-gradient(top, #c5e0f7 0%, #ffffff 100%);
|
background: -moz-linear-gradient(top, #c5e0f7 0%, #ffffff 100%);
|
||||||
background: -webkit-linear-gradient(top, #c5e0f7 0%, #ffffff 100%);
|
background: -webkit-linear-gradient(top, #c5e0f7 0%, #ffffff 100%);
|
||||||
background: linear-gradient(to bottom, #c5e0f7 0%, #ffffff 100%);
|
background: linear-gradient(to bottom, #c5e0f7 0%, #ffffff 100%);
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr='#c5e0f7', endColorstr='#ffffff', GradientType=0);
|
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#c5e0f7', endColorstr='#ffffff',GradientType=0 );
|
||||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
@@ -41,7 +41,7 @@ limitations under the License.
|
|||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
margin-right: 4px;
|
margin-right: 4px;
|
||||||
min-width: 80px;
|
min-width: 80px;
|
||||||
background-color: #03b381;
|
background-color: #03B381;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 12px 22px;
|
padding: 12px 22px;
|
||||||
@@ -54,7 +54,7 @@ limitations under the License.
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mx_HomePage_header {
|
.mx_HomePage_header {
|
||||||
color: #2e2f32;
|
color: #2E2F32;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -95,7 +95,7 @@ limitations under the License.
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mx_FooterLink {
|
.mx_FooterLink {
|
||||||
color: #368bd6;
|
color: #368BD6;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
class Optional {
|
class Optional {
|
||||||
static from(value) {
|
static from(value) {
|
||||||
return value && Some.of(value) || None;
|
return value && Some.of(value) || None;
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ function fetchAsSubject(endpoint) {
|
|||||||
const contentLength = res.headers.get("content-length");
|
const contentLength = res.headers.get("content-length");
|
||||||
const context = contentLength ? { length: parseInt(contentLength) } : {};
|
const context = contentLength ? { length: parseInt(contentLength) } : {};
|
||||||
|
|
||||||
const streamer = observeReadableStream(res.body, context);
|
const streamer = observeReadableStream(res.body, context, endpoint);
|
||||||
streamer.subscribe((value) => {
|
streamer.subscribe((value) => {
|
||||||
fetcher.next(value);
|
fetcher.next(value);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
<!doctype html>
|
<html>
|
||||||
<html lang="en">
|
|
||||||
<head>
|
<head>
|
||||||
<title>Rageshake decoder ring</title>
|
<title>Rageshake decoder ring</title>
|
||||||
<script crossorigin src="https://unpkg.com/source-map@0.7.3/dist/source-map.js"></script>
|
<script crossorigin src="https://unpkg.com/source-map@0.7.3/dist/source-map.js"></script>
|
||||||
@@ -12,7 +11,7 @@
|
|||||||
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
|
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
|
||||||
<!--<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
|
<!--<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
|
||||||
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>-->
|
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>-->
|
||||||
<script crossorigin src="https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js"></script>
|
<script crossorigin src="https://unpkg.com/rxjs/bundles/rxjs.umd.min.js"></script>
|
||||||
<script src="datatypes.js"></script>
|
<script src="datatypes.js"></script>
|
||||||
<script src="decoder.js"></script>
|
<script src="decoder.js"></script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M100 200C155.228 200 200 155.228 200 100C200 44.7715 155.228 0 100 0C44.7715 0 0 44.7715 0 100C0 155.228 44.7715 200 100 200Z" fill="#0DBD8B"/>
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M414 204C414 180.804 432.804 162 456 162C610.64 162 736 287.36 736 442C736 465.196 717.196 484 694 484C670.804 484 652 465.196 652 442C652 333.752 564.248 246 456 246C432.804 246 414 227.196 414 204Z" fill="#0DBD8B"/>
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M81.7169 46.5946C81.7169 42.5581 84.9959 39.2859 89.0408 39.2859C116.456 39.2859 138.681 61.4642 138.681 88.8225C138.681 92.859 135.401 96.1312 131.357 96.1312C127.312 96.1312 124.033 92.859 124.033 88.8225C124.033 69.5372 108.366 53.9033 89.0408 53.9033C84.9959 53.9033 81.7169 50.6311 81.7169 46.5946Z" fill="white"/>
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M610 820C610 843.196 591.196 862 568 862C413.36 862 288 736.64 288 582C288 558.804 306.804 540 330 540C353.196 540 372 558.804 372 582C372 690.248 459.752 778 568 778C591.196 778 610 796.804 610 820Z" fill="#0DBD8B"/>
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M153.39 81.5137C157.435 81.5137 160.714 84.7859 160.714 88.8224C160.714 116.181 138.49 138.359 111.075 138.359C107.03 138.359 103.751 135.087 103.751 131.05C103.751 127.014 107.03 123.742 111.075 123.742C130.4 123.742 146.066 108.108 146.066 88.8224C146.066 84.7859 149.345 81.5137 153.39 81.5137Z" fill="white"/>
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M204 610C180.804 610 162 591.196 162 568C162 413.36 287.36 288 442 288C465.196 288 484 306.804 484 330C484 353.196 465.196 372 442 372C333.752 372 246 459.752 246 568C246 591.196 227.196 610 204 610Z" fill="#0DBD8B"/>
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M118.398 153.405C118.398 157.442 115.119 160.714 111.074 160.714C83.6592 160.714 61.4347 138.536 61.4347 111.177C61.4347 107.141 64.7138 103.869 68.7587 103.869C72.8035 103.869 76.0826 107.141 76.0826 111.177C76.0826 130.463 91.7489 146.097 111.074 146.097C115.119 146.097 118.398 149.369 118.398 153.405Z" fill="white"/>
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M820 414C843.196 414 862 432.804 862 456C862 610.64 736.64 736 582 736C558.804 736 540 717.196 540 694C540 670.804 558.804 652 582 652C690.248 652 778 564.248 778 456C778 432.804 796.804 414 820 414Z" fill="#0DBD8B"/>
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M46.6097 118.486C42.5648 118.486 39.2858 115.214 39.2858 111.178C39.2858 83.8193 61.5102 61.6409 88.9255 61.6409C92.9704 61.6409 96.2494 64.9132 96.2494 68.9497C96.2494 72.9862 92.9704 76.2584 88.9255 76.2584C69.6 76.2584 53.9337 91.8922 53.9337 111.178C53.9337 115.214 50.6546 118.486 46.6097 118.486Z" fill="white"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -47,6 +47,7 @@ h1::after {
|
|||||||
display: flex;
|
display: flex;
|
||||||
-webkit-justify-content: space-around;
|
-webkit-justify-content: space-around;
|
||||||
-ms-flex-pack: distribute;
|
-ms-flex-pack: distribute;
|
||||||
|
justify-content: space-around;
|
||||||
-webkit-box-align: center;
|
-webkit-box-align: center;
|
||||||
-webkit-align-items: center;
|
-webkit-align-items: center;
|
||||||
-ms-flex-align: center;
|
-ms-flex-align: center;
|
||||||
@@ -172,8 +173,7 @@ we don't have an account and should hide them. No account == no guest account ei
|
|||||||
<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>
|
||||||
<!-- XXX: Our translations system isn't smart enough to recognize variables in the HTML, so we manually do it -->
|
<h4 class="mx_Header_subtitle">_t("Decentralised, encrypted chat & collaboration powered by [matrix]")</h4>
|
||||||
<h4 class="mx_Header_subtitle">_t("Decentralised, encrypted chat & collaboration powered by $matrixLogo")</h4>
|
|
||||||
<div class="mx_ButtonGroup">
|
<div class="mx_ButtonGroup">
|
||||||
<div class="mx_ButtonRow">
|
<div class="mx_ButtonRow">
|
||||||
<a href="#/login" class="mx_ButtonParent mx_ButtonSignIn mx_Button_iconSignIn">
|
<a href="#/login" class="mx_ButtonParent mx_ButtonSignIn mx_Button_iconSignIn">
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M100 200C155.228 200 200 155.228 200 100C200 44.7715 155.228 0 100 0C44.7715 0 0 44.7715 0 100C0 155.228 44.7715 200 100 200Z" fill="#0DBD8B"/>
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M414 204C414 180.804 432.804 162 456 162C610.64 162 736 287.36 736 442C736 465.196 717.196 484 694 484C670.804 484 652 465.196 652 442C652 333.752 564.248 246 456 246C432.804 246 414 227.196 414 204Z" fill="#0DBD8B"/>
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M81.7169 46.5946C81.7169 42.5581 84.9959 39.2859 89.0408 39.2859C116.456 39.2859 138.681 61.4642 138.681 88.8225C138.681 92.859 135.401 96.1312 131.357 96.1312C127.312 96.1312 124.033 92.859 124.033 88.8225C124.033 69.5372 108.366 53.9033 89.0408 53.9033C84.9959 53.9033 81.7169 50.6311 81.7169 46.5946Z" fill="white"/>
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M610 820C610 843.196 591.196 862 568 862C413.36 862 288 736.64 288 582C288 558.804 306.804 540 330 540C353.196 540 372 558.804 372 582C372 690.248 459.752 778 568 778C591.196 778 610 796.804 610 820Z" fill="#0DBD8B"/>
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M153.39 81.5137C157.435 81.5137 160.714 84.7859 160.714 88.8224C160.714 116.181 138.49 138.359 111.075 138.359C107.03 138.359 103.751 135.087 103.751 131.05C103.751 127.014 107.03 123.742 111.075 123.742C130.4 123.742 146.066 108.108 146.066 88.8224C146.066 84.7859 149.345 81.5137 153.39 81.5137Z" fill="white"/>
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M204 610C180.804 610 162 591.196 162 568C162 413.36 287.36 288 442 288C465.196 288 484 306.804 484 330C484 353.196 465.196 372 442 372C333.752 372 246 459.752 246 568C246 591.196 227.196 610 204 610Z" fill="#0DBD8B"/>
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M118.398 153.405C118.398 157.442 115.119 160.714 111.074 160.714C83.6592 160.714 61.4347 138.536 61.4347 111.177C61.4347 107.141 64.7138 103.869 68.7587 103.869C72.8035 103.869 76.0826 107.141 76.0826 111.177C76.0826 130.463 91.7489 146.097 111.074 146.097C115.119 146.097 118.398 149.369 118.398 153.405Z" fill="white"/>
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M820 414C843.196 414 862 432.804 862 456C862 610.64 736.64 736 582 736C558.804 736 540 717.196 540 694C540 670.804 558.804 652 582 652C690.248 652 778 564.248 778 456C778 432.804 796.804 414 820 414Z" fill="#0DBD8B"/>
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M46.6097 118.486C42.5648 118.486 39.2858 115.214 39.2858 111.178C39.2858 83.8193 61.5102 61.6409 88.9255 61.6409C92.9704 61.6409 96.2494 64.9132 96.2494 68.9497C96.2494 72.9862 92.9704 76.2584 88.9255 76.2584C69.6 76.2584 53.9337 91.8922 53.9337 111.178C53.9337 115.214 50.6546 118.486 46.6097 118.486Z" fill="white"/>
|
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.2 KiB |
153
res/welcome/images/matrix.svg
Normal file
153
res/welcome/images/matrix.svg
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14576) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
width="793.322px" height="340.809px" viewBox="0 0 793.322 340.809" enable-background="new 0 0 793.322 340.809"
|
||||||
|
xml:space="preserve">
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M34.004,340.809H2c-1.104,0-2-0.896-2-2V2c0-1.104,0.896-2,2-2h32.004c1.104,0,2,0.896,2,2
|
||||||
|
v7.71c0,1.104-0.896,2-2,2h-21.13v317.386h21.13c1.104,0,2,0.896,2,2.001v7.712C36.004,339.913,35.108,340.809,34.004,340.809
|
||||||
|
L34.004,340.809z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M10.875,9.711v321.386h23.13v7.711H1.999V2.001h32.006v7.71H10.875z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M252.402,233.711h-32.993c-1.104,0-2-0.896-2-2v-68.073c0-3.949-0.154-7.722-0.457-11.213
|
||||||
|
c-0.289-3.282-1.074-6.153-2.332-8.53c-1.204-2.276-3.017-4.119-5.384-5.476c-2.393-1.362-5.775-2.056-10.042-2.056
|
||||||
|
c-4.238,0-7.674,0.798-10.213,2.371c-2.565,1.596-4.604,3.701-6.053,6.258c-1.498,2.643-2.51,5.694-3.013,9.067
|
||||||
|
c-0.526,3.513-0.793,7.125-0.793,10.741v66.91c0,1.104-0.896,2-2,2h-32.991c-1.104,0-2-0.896-2-2v-67.373
|
||||||
|
c0-3.435-0.078-6.964-0.228-10.485c-0.148-3.251-0.767-6.278-1.841-8.995c-1.018-2.571-2.667-4.584-5.047-6.153
|
||||||
|
c-2.372-1.552-6.029-2.341-10.865-2.341c-1.372,0-3.265,0.328-5.629,0.976c-2.28,0.624-4.536,1.826-6.705,3.577
|
||||||
|
c-2.152,1.732-4.036,4.306-5.605,7.655c-1.569,3.356-2.367,7.877-2.367,13.438v69.701c0,1.104-0.895,2-2,2H68.857
|
||||||
|
c-1.104,0-2-0.896-2-2V111.594c0-1.104,0.896-1.999,2-1.999h31.13c1.104,0,2,0.896,2,1.999v11.007
|
||||||
|
c3.834-4.499,8.248-8.152,13.173-10.896c6.396-3.559,13.799-5.362,22.002-5.362c7.846,0,15.127,1.548,21.642,4.604
|
||||||
|
c5.794,2.722,10.424,7.26,13.791,13.52c3.449-4.362,7.833-8.306,13.071-11.752c6.422-4.228,14.102-6.371,22.824-6.371
|
||||||
|
c6.499,0,12.625,0.807,18.209,2.399c5.686,1.628,10.635,4.271,14.712,7.857c4.088,3.605,7.318,8.357,9.601,14.123
|
||||||
|
c2.25,5.719,3.391,12.649,3.391,20.604v80.384C254.402,232.815,253.507,233.711,252.402,233.711L252.402,233.711z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M99.988,111.595v16.264h0.463c4.338-6.191,9.563-10.998,15.684-14.406
|
||||||
|
c6.117-3.402,13.129-5.11,21.027-5.11c7.588,0,14.521,1.475,20.793,4.415c6.274,2.945,11.038,8.131,14.291,15.567
|
||||||
|
c3.56-5.265,8.4-9.913,14.521-13.94c6.117-4.025,13.358-6.042,21.724-6.042c6.351,0,12.234,0.776,17.66,2.325
|
||||||
|
c5.418,1.549,10.065,4.027,13.938,7.434c3.869,3.41,6.889,7.863,9.062,13.357c2.167,5.504,3.253,12.122,3.253,19.869v80.385H219.41
|
||||||
|
v-68.074c0-4.025-0.154-7.82-0.465-11.385c-0.313-3.56-1.161-6.656-2.555-9.293c-1.395-2.631-3.45-4.724-6.157-6.274
|
||||||
|
c-2.711-1.543-6.391-2.322-11.037-2.322s-8.403,0.896-11.269,2.671c-2.868,1.784-5.112,4.109-6.737,6.971
|
||||||
|
c-1.626,2.869-2.711,6.12-3.252,9.762c-0.545,3.638-0.814,7.318-0.814,11.035v66.91h-32.991v-67.375c0-3.562-0.081-7.087-0.23-10.57
|
||||||
|
c-0.158-3.487-0.814-6.7-1.978-9.645c-1.162-2.94-3.099-5.304-5.809-7.088c-2.711-1.775-6.699-2.671-11.965-2.671
|
||||||
|
c-1.551,0-3.603,0.349-6.156,1.048c-2.556,0.697-5.036,2.016-7.435,3.949c-2.404,1.938-4.454,4.726-6.158,8.363
|
||||||
|
c-1.705,3.642-2.556,8.402-2.556,14.287v69.701h-32.99V111.595H99.988z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M304.909,236.733c-5.883,0-11.46-0.729-16.574-2.163c-5.192-1.464-9.806-3.774-13.713-6.871
|
||||||
|
c-3.944-3.117-7.068-7.111-9.282-11.871c-2.205-4.733-3.324-10.412-3.324-16.876c0-7.13,1.293-13.117,3.846-17.797
|
||||||
|
c2.542-4.674,5.877-8.464,9.912-11.263c3.97-2.752,8.556-4.842,13.63-6.209c4.901-1.322,9.937-2.394,14.961-3.184
|
||||||
|
c4.986-0.775,9.949-1.404,14.754-1.872c4.679-0.452,8.88-1.139,12.489-2.039c3.412-0.854,6.118-2.09,8.042-3.672
|
||||||
|
c1.666-1.37,2.416-3.384,2.292-6.151c-0.002-3.289-0.502-5.816-1.492-7.595c-0.998-1.798-2.283-3.15-3.927-4.138
|
||||||
|
c-1.703-1.02-3.725-1.713-6.012-2.062c-2.47-0.37-5.146-0.557-7.947-0.557c-6.034,0-10.789,1.271-14.135,3.783
|
||||||
|
c-3.233,2.424-5.155,6.64-5.714,12.527c-0.098,1.026-0.961,1.812-1.992,1.812h-32.992c-0.552,0-1.079-0.229-1.457-0.629
|
||||||
|
c-0.376-0.402-0.572-0.941-0.54-1.491c0.485-8.073,2.55-14.894,6.142-20.272c3.548-5.331,8.147-9.682,13.661-12.931
|
||||||
|
c5.424-3.191,11.612-5.498,18.392-6.857c6.684-1.335,13.5-2.013,20.26-2.013c6.096,0,12.365,0.437,18.626,1.296
|
||||||
|
c6.377,0.88,12.285,2.622,17.562,5.177c5.376,2.604,9.845,6.29,13.282,10.951c3.498,4.744,5.271,11.048,5.271,18.731v62.494
|
||||||
|
c0,5.307,0.306,10.462,0.915,15.319c0.576,4.64,1.572,8.116,2.963,10.338c0.385,0.616,0.407,1.395,0.055,2.031
|
||||||
|
c-0.353,0.635-1.022,1.03-1.75,1.03h-33.457c-0.861,0-1.624-0.55-1.898-1.367c-0.646-1.941-1.176-3.939-1.572-5.936
|
||||||
|
c-0.141-0.696-0.267-1.402-0.38-2.12c-4.825,4.184-10.349,7.24-16.474,9.105C320.033,235.609,312.489,236.733,304.909,236.733
|
||||||
|
L304.909,236.733z M341.941,176.661c-0.809,0.409-1.676,0.768-2.596,1.074c-2.161,0.72-4.511,1.326-6.988,1.807
|
||||||
|
c-2.442,0.475-5.033,0.872-7.699,1.186c-2.631,0.311-5.251,0.697-7.784,1.146c-2.329,0.433-4.705,1.035-7.051,1.792
|
||||||
|
c-2.194,0.711-4.114,1.667-5.699,2.842c-1.531,1.128-2.785,2.587-3.731,4.335c-0.917,1.709-1.385,3.97-1.385,6.719
|
||||||
|
c0,2.598,0.465,4.778,1.385,6.481c0.928,1.722,2.142,3.035,3.716,4.018c1.644,1.026,3.601,1.757,5.816,2.17
|
||||||
|
c2.344,0.439,4.799,0.663,7.297,0.663c6.105,0,10.836-0.996,14.063-2.961c3.244-1.973,5.666-4.349,7.199-7.062
|
||||||
|
c1.568-2.78,2.542-5.62,2.892-8.436c0.376-3.019,0.565-5.436,0.565-7.187V176.661L341.941,176.661z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M273.544,129.255c3.405-5.113,7.744-9.215,13.012-12.316
|
||||||
|
c5.264-3.097,11.186-5.303,17.771-6.621c6.582-1.315,13.205-1.976,19.865-1.976c6.042,0,12.158,0.428,18.354,1.277
|
||||||
|
c6.195,0.855,11.85,2.522,16.962,4.997c5.111,2.477,9.292,5.926,12.546,10.338c3.253,4.414,4.879,10.262,4.879,17.543v62.494
|
||||||
|
c0,5.428,0.31,10.611,0.931,15.567c0.615,4.959,1.701,8.676,3.251,11.153H347.66c-0.621-1.86-1.126-3.755-1.511-5.693
|
||||||
|
c-0.39-1.933-0.661-3.908-0.813-5.923c-5.267,5.422-11.465,9.217-18.585,11.386c-7.127,2.163-14.407,3.251-21.842,3.251
|
||||||
|
c-5.733,0-11.077-0.698-16.033-2.09c-4.958-1.395-9.293-3.562-13.01-6.51c-3.718-2.938-6.622-6.656-8.713-11.147
|
||||||
|
s-3.138-9.84-3.138-16.033c0-6.813,1.199-12.43,3.604-16.84c2.399-4.417,5.495-7.939,9.295-10.575
|
||||||
|
c3.793-2.632,8.129-4.607,13.01-5.923c4.878-1.315,9.795-2.358,14.752-3.137c4.957-0.772,9.835-1.393,14.638-1.857
|
||||||
|
c4.801-0.466,9.062-1.164,12.779-2.093c3.718-0.929,6.658-2.282,8.829-4.065c2.165-1.781,3.172-4.375,3.02-7.785
|
||||||
|
c0-3.56-0.58-6.389-1.742-8.479c-1.161-2.09-2.711-3.719-4.646-4.88c-1.937-1.161-4.183-1.936-6.737-2.325
|
||||||
|
c-2.557-0.382-5.309-0.58-8.248-0.58c-6.506,0-11.617,1.395-15.335,4.183c-3.716,2.788-5.889,7.437-6.506,13.94h-32.991
|
||||||
|
C268.199,140.794,270.132,134.363,273.544,129.255z M338.713,175.838c-2.09,0.696-4.337,1.275-6.736,1.741
|
||||||
|
c-2.402,0.465-4.918,0.853-7.551,1.161c-2.635,0.313-5.268,0.698-7.899,1.163c-2.48,0.461-4.919,1.086-7.317,1.857
|
||||||
|
c-2.404,0.779-4.495,1.822-6.274,3.138c-1.784,1.317-3.216,2.985-4.3,4.994c-1.085,2.014-1.626,4.571-1.626,7.668
|
||||||
|
c0,2.94,0.541,5.422,1.626,7.431c1.084,2.017,2.558,3.604,4.416,4.765s4.025,1.976,6.507,2.438c2.475,0.466,5.031,0.698,7.665,0.698
|
||||||
|
c6.505,0,11.537-1.082,15.103-3.253c3.561-2.166,6.192-4.762,7.899-7.785c1.702-3.019,2.749-6.072,3.137-9.174
|
||||||
|
c0.384-3.097,0.58-5.576,0.58-7.434v-12.316C342.547,174.173,340.805,175.14,338.713,175.838z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M444.542,234.874c-5.187,0-10.173-0.361-14.823-1.069c-4.802-0.732-9.104-2.183-12.779-4.313
|
||||||
|
c-3.789-2.185-6.821-5.341-9.006-9.375c-2.163-3.986-3.26-9.232-3.26-15.59v-68.859h-17.981c-1.104,0-2-0.896-2-1.999v-22.073
|
||||||
|
c0-1.104,0.896-1.999,2-1.999h17.981V75.582c0-1.104,0.896-2,2-2h32.992c1.104,0,2,0.896,2,2v34.014h22.162c1.104,0,2,0.896,2,1.999
|
||||||
|
v22.073c0,1.104-0.896,1.999-2,1.999h-22.162v57.479c0,6.229,1.198,8.731,2.202,9.733c1.004,1.007,3.506,2.205,9.738,2.205
|
||||||
|
c1.804,0,3.542-0.076,5.161-0.225c1.604-0.144,3.174-0.367,4.669-0.665c0.13-0.026,0.261-0.039,0.391-0.039
|
||||||
|
c0.458,0,0.907,0.159,1.27,0.454c0.463,0.379,0.73,0.946,0.73,1.546v25.555c0,0.979-0.707,1.813-1.672,1.974
|
||||||
|
c-2.834,0.472-6.041,0.794-9.527,0.957C451.015,234.798,447.718,234.874,444.542,234.874L444.542,234.874z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M463.825,111.595v22.072h-24.161v59.479c0,5.573,0.928,9.292,2.788,11.149
|
||||||
|
c1.856,1.859,5.576,2.788,11.152,2.788c1.859,0,3.638-0.076,5.343-0.232c1.703-0.152,3.33-0.388,4.878-0.696v25.557
|
||||||
|
c-2.788,0.465-5.887,0.773-9.293,0.931c-3.407,0.149-6.737,0.23-9.99,0.23c-5.111,0-9.953-0.35-14.521-1.048
|
||||||
|
c-4.571-0.695-8.597-2.047-12.081-4.063c-3.486-2.011-6.236-4.88-8.248-8.597c-2.016-3.714-3.021-8.595-3.021-14.639v-70.859h-19.98
|
||||||
|
v-22.072h19.98V75.583h32.992v36.012H463.825z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M512.613,233.711h-32.991c-1.104,0-2-0.896-2-2V111.594c0-1.104,0.896-1.999,2-1.999h31.366
|
||||||
|
c1.104,0,2,0.896,2,1.999v15.069c0.967-1.516,2.034-2.978,3.199-4.382c2.754-3.312,5.949-6.182,9.496-8.522
|
||||||
|
c3.545-2.332,7.385-4.169,11.415-5.462c4.056-1.298,8.327-1.954,12.691-1.954c2.341,0,4.953,0.418,7.766,1.243
|
||||||
|
c0.852,0.25,1.437,1.032,1.437,1.92v30.67c0,0.6-0.269,1.167-0.732,1.547c-0.361,0.296-0.808,0.452-1.265,0.452
|
||||||
|
c-0.133,0-0.265-0.013-0.398-0.039c-1.484-0.3-3.299-0.565-5.392-0.787c-2.098-0.224-4.136-0.339-6.062-0.339
|
||||||
|
c-5.706,0-10.572,0.95-14.467,2.823c-3.862,1.86-7.012,4.428-9.361,7.629c-2.389,3.263-4.115,7.12-5.127,11.47
|
||||||
|
c-1.043,4.479-1.574,9.409-1.574,14.647v54.132C514.613,232.815,513.717,233.711,512.613,233.711L512.613,233.711z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M510.988,111.595V133.9h0.465c1.546-3.72,3.636-7.163,6.272-10.341
|
||||||
|
c2.634-3.172,5.652-5.885,9.06-8.131c3.405-2.242,7.047-3.985,10.923-5.228c3.868-1.237,7.898-1.859,12.081-1.859
|
||||||
|
c2.168,0,4.566,0.39,7.202,1.163v30.67c-1.551-0.312-3.41-0.584-5.576-0.814c-2.17-0.233-4.26-0.35-6.274-0.35
|
||||||
|
c-6.041,0-11.152,1.01-15.332,3.021c-4.182,2.014-7.55,4.761-10.107,8.247c-2.555,3.487-4.379,7.55-5.462,12.198
|
||||||
|
c-1.083,4.645-1.625,9.682-1.625,15.102v54.133h-32.991V111.595H510.988z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M603.923,233.711H570.93c-1.104,0-2-0.896-2-2V111.594c0-1.104,0.896-1.999,2-1.999h32.994
|
||||||
|
c1.104,0,2,0.896,2,1.999v120.117C605.923,232.815,605.027,233.711,603.923,233.711L603.923,233.711z M603.923,95.006H570.93
|
||||||
|
c-1.104,0-2-0.896-2-1.999V65.825c0-1.104,0.896-2,2-2h32.994c1.104,0,2,0.896,2,2v27.182
|
||||||
|
C605.923,94.11,605.027,95.006,603.923,95.006L603.923,95.006z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M570.93,93.007V65.824h32.994v27.183H570.93z M603.924,111.595v120.117H570.93V111.595
|
||||||
|
H603.924z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M742.163,233.711h-37.64c-0.671,0-1.297-0.335-1.667-0.896l-23.426-35.352l-23.426,35.352
|
||||||
|
c-0.369,0.561-0.995,0.896-1.667,0.896h-36.938c-0.741,0-1.424-0.411-1.77-1.067c-0.345-0.654-0.3-1.449,0.118-2.061l42.435-62.055
|
||||||
|
l-38.71-55.793c-0.424-0.613-0.474-1.408-0.128-2.069c0.343-0.658,1.028-1.071,1.771-1.071h37.636c0.665,0,1.287,0.33,1.658,0.882
|
||||||
|
l19.477,28.893l19.255-28.884c0.372-0.556,0.996-0.891,1.665-0.891h36.475c0.746,0,1.43,0.415,1.776,1.078
|
||||||
|
c0.343,0.66,0.289,1.46-0.139,2.071l-38.69,55.082l43.578,62.744c0.424,0.61,0.474,1.408,0.128,2.066
|
||||||
|
C743.591,233.298,742.908,233.711,742.163,233.711L742.163,233.711z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M621.115,111.595h37.637l21.144,31.365l20.911-31.365h36.476l-39.496,56.226l44.377,63.892
|
||||||
|
h-37.64l-25.093-37.87l-25.094,37.87h-36.938l43.213-63.193L621.115,111.595z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M791.322,340.809h-32.008c-1.105,0-2-0.896-2-2v-7.712c0-1.105,0.896-2.001,2-2.001h21.13
|
||||||
|
V11.71h-21.13c-1.105,0-2-0.896-2-2V2c0-1.104,0.896-2,2-2h32.008c1.104,0,2,0.896,2,2v336.809
|
||||||
|
C793.322,339.913,792.426,340.809,791.322,340.809L791.322,340.809z"/>
|
||||||
|
<path opacity="0.5" fill="#FFFFFF" d="M782.443,331.097V9.711h-23.13v-7.71h32.008v336.807h-32.008v-7.711H782.443z"/>
|
||||||
|
<path d="M10.875,9.711v321.386h23.13v7.711H1.999V2.001h32.006v7.71H10.875z"/>
|
||||||
|
<path d="M99.988,111.595v16.264h0.463c4.338-6.191,9.563-10.998,15.684-14.406c6.117-3.402,13.129-5.11,21.027-5.11
|
||||||
|
c7.588,0,14.521,1.475,20.793,4.415c6.274,2.945,11.038,8.131,14.291,15.567c3.56-5.265,8.4-9.913,14.521-13.94
|
||||||
|
c6.117-4.025,13.358-6.042,21.724-6.042c6.351,0,12.234,0.776,17.66,2.325c5.418,1.549,10.065,4.027,13.938,7.434
|
||||||
|
c3.869,3.41,6.889,7.863,9.062,13.357c2.167,5.504,3.253,12.122,3.253,19.869v80.385H219.41v-68.074
|
||||||
|
c0-4.025-0.154-7.82-0.465-11.385c-0.313-3.56-1.161-6.656-2.555-9.293c-1.395-2.631-3.45-4.724-6.157-6.274
|
||||||
|
c-2.711-1.543-6.391-2.322-11.037-2.322s-8.403,0.896-11.269,2.671c-2.868,1.784-5.112,4.109-6.737,6.971
|
||||||
|
c-1.626,2.869-2.711,6.12-3.252,9.762c-0.545,3.638-0.814,7.318-0.814,11.035v66.91h-32.991v-67.375c0-3.562-0.081-7.087-0.23-10.57
|
||||||
|
c-0.158-3.487-0.814-6.7-1.978-9.645c-1.162-2.94-3.099-5.304-5.809-7.088c-2.711-1.775-6.699-2.671-11.965-2.671
|
||||||
|
c-1.551,0-3.603,0.349-6.156,1.048c-2.556,0.697-5.036,2.016-7.435,3.949c-2.404,1.938-4.454,4.726-6.158,8.363
|
||||||
|
c-1.705,3.642-2.556,8.402-2.556,14.287v69.701h-32.99V111.595H99.988z"/>
|
||||||
|
<path d="M273.544,129.255c3.405-5.113,7.744-9.215,13.012-12.316c5.264-3.097,11.186-5.303,17.771-6.621
|
||||||
|
c6.582-1.315,13.205-1.976,19.865-1.976c6.042,0,12.158,0.428,18.354,1.277c6.195,0.855,11.85,2.522,16.962,4.997
|
||||||
|
c5.111,2.477,9.292,5.926,12.546,10.338c3.253,4.414,4.879,10.262,4.879,17.543v62.494c0,5.428,0.31,10.611,0.931,15.567
|
||||||
|
c0.615,4.959,1.701,8.676,3.251,11.153H347.66c-0.621-1.86-1.126-3.755-1.511-5.693c-0.39-1.933-0.661-3.908-0.813-5.923
|
||||||
|
c-5.267,5.422-11.465,9.217-18.585,11.386c-7.127,2.163-14.407,3.251-21.842,3.251c-5.733,0-11.077-0.698-16.033-2.09
|
||||||
|
c-4.958-1.395-9.293-3.562-13.01-6.51c-3.718-2.938-6.622-6.656-8.713-11.147s-3.138-9.84-3.138-16.033
|
||||||
|
c0-6.813,1.199-12.43,3.604-16.84c2.399-4.417,5.495-7.939,9.295-10.575c3.793-2.632,8.129-4.607,13.01-5.923
|
||||||
|
c4.878-1.315,9.795-2.358,14.752-3.137c4.957-0.772,9.835-1.393,14.638-1.857c4.801-0.466,9.062-1.164,12.779-2.093
|
||||||
|
c3.718-0.929,6.658-2.282,8.829-4.065c2.165-1.781,3.172-4.375,3.02-7.785c0-3.56-0.58-6.389-1.742-8.479
|
||||||
|
c-1.161-2.09-2.711-3.719-4.646-4.88c-1.937-1.161-4.183-1.936-6.737-2.325c-2.557-0.382-5.309-0.58-8.248-0.58
|
||||||
|
c-6.506,0-11.617,1.395-15.335,4.183c-3.716,2.788-5.889,7.437-6.506,13.94h-32.991
|
||||||
|
C268.199,140.794,270.132,134.363,273.544,129.255z M338.713,175.838c-2.09,0.696-4.337,1.275-6.736,1.741
|
||||||
|
c-2.402,0.465-4.918,0.853-7.551,1.161c-2.635,0.313-5.268,0.698-7.899,1.163c-2.48,0.461-4.919,1.086-7.317,1.857
|
||||||
|
c-2.404,0.779-4.495,1.822-6.274,3.138c-1.784,1.317-3.216,2.985-4.3,4.994c-1.085,2.014-1.626,4.571-1.626,7.668
|
||||||
|
c0,2.94,0.541,5.422,1.626,7.431c1.084,2.017,2.558,3.604,4.416,4.765s4.025,1.976,6.507,2.438c2.475,0.466,5.031,0.698,7.665,0.698
|
||||||
|
c6.505,0,11.537-1.082,15.103-3.253c3.561-2.166,6.192-4.762,7.899-7.785c1.702-3.019,2.749-6.072,3.137-9.174
|
||||||
|
c0.384-3.097,0.58-5.576,0.58-7.434v-12.316C342.547,174.173,340.805,175.14,338.713,175.838z"/>
|
||||||
|
<path d="M463.825,111.595v22.072h-24.161v59.479c0,5.573,0.928,9.292,2.788,11.149c1.856,1.859,5.576,2.788,11.152,2.788
|
||||||
|
c1.859,0,3.638-0.076,5.343-0.232c1.703-0.152,3.33-0.388,4.878-0.696v25.557c-2.788,0.465-5.887,0.773-9.293,0.931
|
||||||
|
c-3.407,0.149-6.737,0.23-9.99,0.23c-5.111,0-9.953-0.35-14.521-1.048c-4.571-0.695-8.597-2.047-12.081-4.063
|
||||||
|
c-3.486-2.011-6.236-4.88-8.248-8.597c-2.016-3.714-3.021-8.595-3.021-14.639v-70.859h-19.98v-22.072h19.98V75.583h32.992v36.012
|
||||||
|
H463.825z"/>
|
||||||
|
<path d="M510.988,111.595V133.9h0.465c1.546-3.72,3.636-7.163,6.272-10.341c2.634-3.172,5.652-5.885,9.06-8.131
|
||||||
|
c3.405-2.242,7.047-3.985,10.923-5.228c3.868-1.237,7.898-1.859,12.081-1.859c2.168,0,4.566,0.39,7.202,1.163v30.67
|
||||||
|
c-1.551-0.312-3.41-0.584-5.576-0.814c-2.17-0.233-4.26-0.35-6.274-0.35c-6.041,0-11.152,1.01-15.332,3.021
|
||||||
|
c-4.182,2.014-7.55,4.761-10.107,8.247c-2.555,3.487-4.379,7.55-5.462,12.198c-1.083,4.645-1.625,9.682-1.625,15.102v54.133h-32.991
|
||||||
|
V111.595H510.988z"/>
|
||||||
|
<path d="M570.93,93.007V65.824h32.994v27.183H570.93z M603.924,111.595v120.117H570.93V111.595H603.924z"/>
|
||||||
|
<path d="M621.115,111.595h37.637l21.144,31.365l20.911-31.365h36.476l-39.496,56.226l44.377,63.892h-37.64l-25.093-37.87
|
||||||
|
l-25.094,37.87h-36.938l43.213-63.193L621.115,111.595z"/>
|
||||||
|
<path d="M782.443,331.097V9.711h-23.13v-7.71h32.008v336.807h-32.008v-7.711H782.443z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 16 KiB |
@@ -12,20 +12,20 @@ const ProxyAgent = require("simple-proxy-agent");
|
|||||||
console.log("Making webapp directory");
|
console.log("Making webapp directory");
|
||||||
mkdirp.sync("webapp");
|
mkdirp.sync("webapp");
|
||||||
|
|
||||||
// curl -s https://meet.element.io/libs/external_api.min.js > ./webapp/jitsi_external_api.min.js
|
// curl -s https://jitsi.riot.im/libs/external_api.min.js > ./webapp/jitsi_external_api.min.js
|
||||||
console.log("Downloading Jitsi script");
|
console.log("Downloading Jitsi script");
|
||||||
const fname = path.join("webapp", "jitsi_external_api.min.js");
|
const fname = path.join("webapp", "jitsi_external_api.min.js");
|
||||||
|
|
||||||
const options = {};
|
const options = {};
|
||||||
if (process.env.HTTPS_PROXY) {
|
if (process.env.HTTPS_PROXY) {
|
||||||
options.agent = new ProxyAgent(process.env.HTTPS_PROXY, { tunnel: true });
|
options.agent = new ProxyAgent(process.env.HTTPS_PROXY, {tunnel: true});
|
||||||
}
|
}
|
||||||
|
|
||||||
fetch("https://meet.element.io/libs/external_api.min.js", options).then(res => {
|
fetch("https://jitsi.riot.im/libs/external_api.min.js", options).then(res => {
|
||||||
const stream = fs.createWriteStream(fname);
|
const stream = fs.createWriteStream(fname);
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
res.body.pipe(stream);
|
res.body.pipe(stream);
|
||||||
res.body.on('error', err => reject(err));
|
res.body.on('error', err => reject(err));
|
||||||
res.body.on('finish', () => resolve());
|
res.body.on('finish', () => resolve());
|
||||||
});
|
});
|
||||||
}).then(() => console.log('Done with Jitsi download'));
|
}).then(() => console.log('Done with Jitsi download'));
|
||||||
|
|||||||
@@ -1,11 +1,17 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Runs package.sh, passing DIST_VERSION determined by git
|
# Runs package.sh setting the version to git hashes of the element-web,
|
||||||
|
# react-sdk & js-sdk checkouts, for the case where these dependencies
|
||||||
|
# are git checkouts.
|
||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
rm dist/element-*.tar.gz || true # rm previous artifacts without failing if it doesn't exist
|
rm dist/element-*.tar.gz || true # rm previous artifacts without failing if it doesn't exist
|
||||||
|
|
||||||
DIST_VERSION=`$(dirname $0)/get-version-from-git.sh`
|
# Since the deps are fetched from git, we can rev-parse
|
||||||
|
REACT_SHA=$(cd node_modules/matrix-react-sdk; git rev-parse --short=12 HEAD)
|
||||||
|
JSSDK_SHA=$(cd node_modules/matrix-js-sdk; git rev-parse --short=12 HEAD)
|
||||||
|
|
||||||
CI_PACKAGE=true DIST_VERSION=$DIST_VERSION scripts/package.sh
|
VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop
|
||||||
|
|
||||||
|
CI_PACKAGE=true DIST_VERSION=$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA scripts/package.sh -d
|
||||||
|
|||||||
10
scripts/compare-file.js
Normal file
10
scripts/compare-file.js
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
if (process.argv.length < 4) throw new Error("Missing source and target file arguments");
|
||||||
|
|
||||||
|
const sourceFile = fs.readFileSync(process.argv[2], 'utf8');
|
||||||
|
const targetFile = fs.readFileSync(process.argv[3], 'utf8');
|
||||||
|
|
||||||
|
if (sourceFile !== targetFile) {
|
||||||
|
throw new Error("Files do not match");
|
||||||
|
}
|
||||||
@@ -29,10 +29,10 @@ const INCLUDE_LANGS = [
|
|||||||
{'value': 'he', 'label': 'עברית'},
|
{'value': 'he', 'label': 'עברית'},
|
||||||
{'value': 'hi', 'label': 'हिन्दी'},
|
{'value': 'hi', 'label': 'हिन्दी'},
|
||||||
{'value': 'hu', 'label': 'Magyar'},
|
{'value': 'hu', 'label': 'Magyar'},
|
||||||
{'value': 'id', 'label': 'Bahasa Indonesia'},
|
|
||||||
{'value': 'is', 'label': 'íslenska'},
|
{'value': 'is', 'label': 'íslenska'},
|
||||||
{'value': 'it', 'label': 'Italiano'},
|
{'value': 'it', 'label': 'Italiano'},
|
||||||
{'value': 'ja', 'label': '日本語'},
|
{'value': 'ja', 'label': '日本語'},
|
||||||
|
{'value': 'jbo', 'label': 'banjubu\'o'},
|
||||||
{'value': 'kab', 'label': 'Taqbaylit'},
|
{'value': 'kab', 'label': 'Taqbaylit'},
|
||||||
{'value': 'ko', 'label': '한국어'},
|
{'value': 'ko', 'label': '한국어'},
|
||||||
{'value': 'lt', 'label': 'Lietuvių'},
|
{'value': 'lt', 'label': 'Lietuvių'},
|
||||||
@@ -52,7 +52,6 @@ const INCLUDE_LANGS = [
|
|||||||
{'value': 'th', 'label': 'ไทย'},
|
{'value': 'th', 'label': 'ไทย'},
|
||||||
{'value': 'tr', 'label': 'Türkçe'},
|
{'value': 'tr', 'label': 'Türkçe'},
|
||||||
{'value': 'uk', 'label': 'українська мова'},
|
{'value': 'uk', 'label': 'українська мова'},
|
||||||
{'value': 'vi', 'label': 'Tiếng Việt'},
|
|
||||||
{'value': 'vls', 'label': 'West-Vlaams'},
|
{'value': 'vls', 'label': 'West-Vlaams'},
|
||||||
{'value': 'zh_Hans', 'label': '简体中文'}, // simplified chinese
|
{'value': 'zh_Hans', 'label': '简体中文'}, // simplified chinese
|
||||||
{'value': 'zh_Hant', 'label': '繁體中文'}, // traditional chinese
|
{'value': 'zh_Hant', 'label': '繁體中文'}, // traditional chinese
|
||||||
@@ -70,7 +69,7 @@ const COPY_LIST = [
|
|||||||
["res/vector-icons/**", "webapp/vector-icons"],
|
["res/vector-icons/**", "webapp/vector-icons"],
|
||||||
["res/decoder-ring/**", "webapp/decoder-ring"],
|
["res/decoder-ring/**", "webapp/decoder-ring"],
|
||||||
["node_modules/matrix-react-sdk/res/media/**", "webapp/media"],
|
["node_modules/matrix-react-sdk/res/media/**", "webapp/media"],
|
||||||
["node_modules/@matrix-org/olm/olm_legacy.js", "webapp", { directwatch: 1 }],
|
["node_modules/olm/olm_legacy.js", "webapp", { directwatch: 1 }],
|
||||||
["./config.json", "webapp", { directwatch: 1 }],
|
["./config.json", "webapp", { directwatch: 1 }],
|
||||||
["contribute.json", "webapp"],
|
["contribute.json", "webapp"],
|
||||||
];
|
];
|
||||||
@@ -232,14 +231,8 @@ function weblateToCounterpart(inTrs) {
|
|||||||
if (keyParts.length === 2) {
|
if (keyParts.length === 2) {
|
||||||
let obj = outTrs[keyParts[0]];
|
let obj = outTrs[keyParts[0]];
|
||||||
if (obj === undefined) {
|
if (obj === undefined) {
|
||||||
obj = outTrs[keyParts[0]] = {};
|
obj = {};
|
||||||
} else if (typeof obj === "string") {
|
outTrs[keyParts[0]] = obj;
|
||||||
// This is a transitional edge case if a string went from singular to pluralised and both still remain
|
|
||||||
// in the translation json file. Use the singular translation as `other` and merge pluralisation atop.
|
|
||||||
obj = outTrs[keyParts[0]] = {
|
|
||||||
"other": inTrs[key],
|
|
||||||
};
|
|
||||||
console.warn("Found entry in i18n file in both singular and pluralised form", keyParts[0]);
|
|
||||||
}
|
}
|
||||||
obj[keyParts[1]] = inTrs[key];
|
obj[keyParts[1]] = inTrs[key];
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ cd react-sdk
|
|||||||
yarn link
|
yarn link
|
||||||
yarn link matrix-js-sdk
|
yarn link matrix-js-sdk
|
||||||
yarn --network-timeout=100000 install
|
yarn --network-timeout=100000 install
|
||||||
|
yarn reskindex
|
||||||
cd ../
|
cd ../
|
||||||
|
|
||||||
echo "Setting up element-web with react-sdk and js-sdk packages"
|
echo "Setting up element-web with react-sdk and js-sdk packages"
|
||||||
|
|||||||
7
scripts/docker-package.sh → scripts/docker-write-version.sh
Executable file → Normal file
7
scripts/docker-package.sh → scripts/docker-write-version.sh
Executable file → Normal file
@@ -13,9 +13,10 @@ DIST_VERSION=$TAG
|
|||||||
# for an appropriately tagged branch as well (heads/v1.2.3).
|
# for an appropriately tagged branch as well (heads/v1.2.3).
|
||||||
if [[ $BRANCH != HEAD && ! $BRANCH =~ heads/v.+ ]]
|
if [[ $BRANCH != HEAD && ! $BRANCH =~ heads/v.+ ]]
|
||||||
then
|
then
|
||||||
DIST_VERSION=`$(dirname $0)/get-version-from-git.sh`
|
REACT_SHA=$(cd node_modules/matrix-react-sdk; git rev-parse --short=12 HEAD)
|
||||||
|
JSSDK_SHA=$(cd node_modules/matrix-js-sdk; git rev-parse --short=12 HEAD)
|
||||||
|
VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop
|
||||||
|
DIST_VERSION=$VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA
|
||||||
fi
|
fi
|
||||||
|
|
||||||
DIST_VERSION=`$(dirname $0)/normalize-version.sh ${DIST_VERSION}`
|
|
||||||
VERSION=$DIST_VERSION yarn build
|
|
||||||
echo $DIST_VERSION > /src/webapp/version
|
echo $DIST_VERSION > /src/webapp/version
|
||||||
@@ -25,8 +25,7 @@ function clone() {
|
|||||||
if [ -n "$branch" ]
|
if [ -n "$branch" ]
|
||||||
then
|
then
|
||||||
echo "Trying to use $org/$repo#$branch"
|
echo "Trying to use $org/$repo#$branch"
|
||||||
# Disable auth prompts: https://serverfault.com/a/665959
|
git clone git://github.com/$org/$repo.git $repo --branch $branch \
|
||||||
GIT_TERMINAL_PROMPT=0 git clone https://github.com/$org/$repo.git $repo --branch $branch \
|
|
||||||
"${GIT_CLONE_ARGS[@]}"
|
"${GIT_CLONE_ARGS[@]}"
|
||||||
return $?
|
return $?
|
||||||
fi
|
fi
|
||||||
@@ -77,7 +76,7 @@ dodep matrix-org matrix-js-sdk
|
|||||||
|
|
||||||
pushd matrix-js-sdk
|
pushd matrix-js-sdk
|
||||||
yarn link
|
yarn link
|
||||||
yarn install --pure-lockfile
|
yarn install
|
||||||
popd
|
popd
|
||||||
|
|
||||||
yarn link matrix-js-sdk
|
yarn link matrix-js-sdk
|
||||||
@@ -91,9 +90,17 @@ dodep matrix-org matrix-react-sdk
|
|||||||
pushd matrix-react-sdk
|
pushd matrix-react-sdk
|
||||||
yarn link
|
yarn link
|
||||||
yarn link matrix-js-sdk
|
yarn link matrix-js-sdk
|
||||||
yarn install --pure-lockfile
|
yarn install
|
||||||
|
yarn reskindex
|
||||||
popd
|
popd
|
||||||
|
|
||||||
yarn link matrix-react-sdk
|
yarn link matrix-react-sdk
|
||||||
|
|
||||||
##############################
|
##############################
|
||||||
|
|
||||||
|
# Link the reskindex binary in place: if we used `yarn link`,
|
||||||
|
# Yarn would do this for us, but we don't because we'd have
|
||||||
|
# to define the Yarn binary prefix somewhere so it could put the
|
||||||
|
# intermediate symlinks there. Instead, we do it ourselves.
|
||||||
|
mkdir -p node_modules/.bin
|
||||||
|
ln -sfv ../matrix-react-sdk/scripts/reskindex.js node_modules/.bin/reskindex
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Echoes a version based on the git hashes of the element-web, react-sdk & js-sdk checkouts, for the case where
|
|
||||||
# these dependencies are git checkouts.
|
|
||||||
|
|
||||||
# Since the deps are fetched from git, we can rev-parse
|
|
||||||
REACT_SHA=$(git -C node_modules/matrix-react-sdk rev-parse --short=12 HEAD)
|
|
||||||
JSSDK_SHA=$(git -C node_modules/matrix-js-sdk rev-parse --short=12 HEAD)
|
|
||||||
VECTOR_SHA=$(git rev-parse --short=12 HEAD) # use the ACTUAL SHA rather than assume develop
|
|
||||||
echo $VECTOR_SHA-react-$REACT_SHA-js-$JSSDK_SHA
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -x
|
|
||||||
|
|
||||||
# Creates a layered environment with the full repo for the app and SDKs cloned
|
|
||||||
# and linked. This gives an element-web dev environment ready to build with
|
|
||||||
# matching branches of react-sdk's dependencies so that changes can be tested
|
|
||||||
# in element-web.
|
|
||||||
|
|
||||||
# Note that this style is different from the recommended developer setup: this
|
|
||||||
# file nests js-sdk and matrix-react-sdk inside element-web, while the local
|
|
||||||
# development setup places them all at the same level. We are nesting them here
|
|
||||||
# because some CI systems do not allow moving to a directory above the checkout
|
|
||||||
# for the primary repo (element-web in this case).
|
|
||||||
|
|
||||||
# Install dependencies, as we'll be using fetchdep.sh from matrix-react-sdk
|
|
||||||
yarn install --pure-lockfile
|
|
||||||
|
|
||||||
# Pass appropriate repo to fetchdep.sh
|
|
||||||
export PR_ORG=vector-im
|
|
||||||
export PR_REPO=element-web
|
|
||||||
|
|
||||||
# Set up the js-sdk first
|
|
||||||
node_modules/matrix-react-sdk/scripts/fetchdep.sh matrix-org matrix-js-sdk
|
|
||||||
pushd matrix-js-sdk
|
|
||||||
yarn link
|
|
||||||
yarn install --pure-lockfile
|
|
||||||
popd
|
|
||||||
|
|
||||||
# Also set up matrix-analytics-events so we get the latest from
|
|
||||||
# the main branch or a branch with matching name
|
|
||||||
node_modules/matrix-react-sdk/scripts/fetchdep.sh matrix-org matrix-analytics-events main
|
|
||||||
pushd matrix-analytics-events
|
|
||||||
yarn link
|
|
||||||
yarn install --pure-lockfile
|
|
||||||
popd
|
|
||||||
|
|
||||||
# Now set up the react-sdk
|
|
||||||
node_modules/matrix-react-sdk/scripts/fetchdep.sh matrix-org matrix-react-sdk
|
|
||||||
pushd matrix-react-sdk
|
|
||||||
yarn link
|
|
||||||
yarn link matrix-js-sdk
|
|
||||||
yarn link matrix-analytics-events
|
|
||||||
yarn install --pure-lockfile
|
|
||||||
popd
|
|
||||||
|
|
||||||
# Link the layers into element-web
|
|
||||||
yarn link matrix-js-sdk
|
|
||||||
yarn link matrix-react-sdk
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# If $1 looks like v1.2.3 or v1.2.3-foo, strip the leading v, then print it to stdout
|
|
||||||
if [[ $1 =~ ^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+(-.+)?$ ]]; then
|
|
||||||
echo ${1:1}
|
|
||||||
else
|
|
||||||
echo $1
|
|
||||||
fi
|
|
||||||
@@ -9,7 +9,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
yarn clean
|
yarn clean
|
||||||
VERSION=$version yarn build
|
yarn build
|
||||||
|
|
||||||
# include the sample config in the tarball. Arguably this should be done by
|
# include the sample config in the tarball. Arguably this should be done by
|
||||||
# `yarn build`, but it's just too painful.
|
# `yarn build`, but it's just too painful.
|
||||||
@@ -21,7 +21,12 @@ cp -r webapp element-$version
|
|||||||
# Just in case you have a local config, remove it before packaging
|
# Just in case you have a local config, remove it before packaging
|
||||||
rm element-$version/config.json || true
|
rm element-$version/config.json || true
|
||||||
|
|
||||||
$(dirname $0)/normalize-version.sh ${version} > element-$version/version
|
# if $version looks like semver with leading v, strip it before writing to file
|
||||||
|
if [[ ${version} =~ ^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+(-.+)?$ ]]; then
|
||||||
|
echo ${version:1} > element-$version/version
|
||||||
|
else
|
||||||
|
echo ${version} > element-$version/version
|
||||||
|
fi
|
||||||
|
|
||||||
tar chvzf dist/element-$version.tar.gz element-$version
|
tar chvzf dist/element-$version.tar.gz element-$version
|
||||||
rm -r element-$version
|
rm -r element-$version
|
||||||
|
|||||||
22
scripts/yarn-sub.js
Normal file
22
scripts/yarn-sub.js
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
const path = require('path');
|
||||||
|
const child_process = require('child_process');
|
||||||
|
|
||||||
|
const moduleName = process.argv[2];
|
||||||
|
if (!moduleName) {
|
||||||
|
console.error("Expected module name");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const argString = process.argv.length > 3 ? process.argv.slice(3).join(" ") : "";
|
||||||
|
if (!argString) {
|
||||||
|
console.error("Expected an yarn argument string to use");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const modulePath = path.dirname(require.resolve(`${moduleName}/package.json`));
|
||||||
|
|
||||||
|
child_process.execSync("yarn " + argString, {
|
||||||
|
env: process.env,
|
||||||
|
cwd: modulePath,
|
||||||
|
stdio: ['inherit', 'inherit', 'inherit'],
|
||||||
|
});
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
sonar.projectKey=element-web
|
|
||||||
sonar.organization=new_vector_ltd_organization
|
|
||||||
|
|
||||||
# Encoding of the source code. Default is default system encoding
|
|
||||||
#sonar.sourceEncoding=UTF-8
|
|
||||||
|
|
||||||
sonar.sources=src,res
|
|
||||||
sonar.tests=test
|
|
||||||
sonar.exclusions=__mocks__,docs,element.io,nginx
|
|
||||||
|
|
||||||
sonar.typescript.tsconfigPath=./tsconfig.json
|
|
||||||
sonar.javascript.lcov.reportPaths=coverage/lcov.info
|
|
||||||
sonar.coverage.exclusions=test/**/*,res/**/*
|
|
||||||
sonar.testExecutionReportPaths=coverage/test-report.xml
|
|
||||||
6
src/@types/global.d.ts
vendored
6
src/@types/global.d.ts
vendored
@@ -15,8 +15,7 @@ limitations under the License.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import "matrix-react-sdk/src/@types/global"; // load matrix-react-sdk's type extensions first
|
import "matrix-react-sdk/src/@types/global"; // load matrix-react-sdk's type extensions first
|
||||||
import type { Renderer } from "react-dom";
|
import type {Renderer} from "react-dom";
|
||||||
import type { logger } from "matrix-js-sdk/src/logger";
|
|
||||||
|
|
||||||
type ElectronChannel =
|
type ElectronChannel =
|
||||||
"app_onAction" |
|
"app_onAction" |
|
||||||
@@ -32,12 +31,11 @@ type ElectronChannel =
|
|||||||
"setBadgeCount" |
|
"setBadgeCount" |
|
||||||
"update-downloaded" |
|
"update-downloaded" |
|
||||||
"userDownloadCompleted" |
|
"userDownloadCompleted" |
|
||||||
"userDownloadAction";
|
"userDownloadOpen";
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
interface Window {
|
interface Window {
|
||||||
mxSendRageshake: (text: string, withLogs?: boolean) => void;
|
mxSendRageshake: (text: string, withLogs?: boolean) => void;
|
||||||
matrixLogger: typeof logger;
|
|
||||||
matrixChat: ReturnType<Renderer>;
|
matrixChat: ReturnType<Renderer>;
|
||||||
|
|
||||||
// electron-only
|
// electron-only
|
||||||
|
|||||||
4
src/@types/raw-loader.d.ts
vendored
4
src/@types/raw-loader.d.ts
vendored
@@ -1,4 +0,0 @@
|
|||||||
declare module '!!raw-loader!*' {
|
|
||||||
const contents: string;
|
|
||||||
export default contents;
|
|
||||||
}
|
|
||||||
@@ -27,56 +27,7 @@ interface IProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
||||||
const brand = SdkConfig.get("brand");
|
const brand = SdkConfig.get().brand;
|
||||||
const mobileBuilds = SdkConfig.get("mobile_builds");
|
|
||||||
|
|
||||||
let ios = null;
|
|
||||||
const iosCustomUrl = mobileBuilds?.ios;
|
|
||||||
if (iosCustomUrl !== null) { // could be undefined or a string
|
|
||||||
ios = <>
|
|
||||||
<p><strong>iOS</strong> (iPhone or iPad)</p>
|
|
||||||
<a
|
|
||||||
href={iosCustomUrl || "https://apps.apple.com/app/vector/id1083446067"}
|
|
||||||
target="_blank"
|
|
||||||
className="mx_ClearDecoration"
|
|
||||||
>
|
|
||||||
<img height="48" src="themes/element/img/download/apple.svg" alt="Apple App Store" />
|
|
||||||
</a>
|
|
||||||
</>;
|
|
||||||
}
|
|
||||||
|
|
||||||
let android = [<p className="mx_Spacer" key="header"><strong>Android</strong></p>];
|
|
||||||
const andCustomUrl = mobileBuilds?.android;
|
|
||||||
const fdroidCustomUrl = mobileBuilds?.fdroid;
|
|
||||||
if (andCustomUrl !== null) { // undefined or string
|
|
||||||
android.push(<a
|
|
||||||
href={andCustomUrl || "https://play.google.com/store/apps/details?id=im.vector.app"}
|
|
||||||
target="_blank"
|
|
||||||
className="mx_ClearDecoration"
|
|
||||||
key="android"
|
|
||||||
>
|
|
||||||
<img height="48" src="themes/element/img/download/google.svg" alt="Google Play Store" />
|
|
||||||
</a>);
|
|
||||||
}
|
|
||||||
if (fdroidCustomUrl !== null) { // undefined or string
|
|
||||||
android.push(<a
|
|
||||||
href={fdroidCustomUrl || "https://f-droid.org/repository/browse/?fdid=im.vector.app"}
|
|
||||||
target="_blank"
|
|
||||||
className="mx_ClearDecoration"
|
|
||||||
key="fdroid"
|
|
||||||
>
|
|
||||||
<img height="48" src="themes/element/img/download/fdroid.svg" alt="F-Droid" />
|
|
||||||
</a>);
|
|
||||||
}
|
|
||||||
if (android.length === 1) { // just a header, meaning no links
|
|
||||||
android = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
let mobileHeader = <h2 id="step2_heading">{ _t("Use %(brand)s on mobile", { brand }) }</h2>;
|
|
||||||
if (!android.length && !ios) {
|
|
||||||
mobileHeader = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return <div className="mx_ErrorView">
|
return <div className="mx_ErrorView">
|
||||||
<div className="mx_ErrorView_container">
|
<div className="mx_ErrorView_container">
|
||||||
<div className="mx_HomePage_header">
|
<div className="mx_HomePage_header">
|
||||||
@@ -103,11 +54,11 @@ const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
|||||||
'or <safariLink>Safari</safariLink> for the best experience.',
|
'or <safariLink>Safari</safariLink> for the best experience.',
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
'chromeLink': (sub) => <a href="https://www.google.com/chrome">{ sub }</a>,
|
'chromeLink': (sub) => <a href="https://www.google.com/chrome">{sub}</a>,
|
||||||
'firefoxLink': (sub) => <a href="https://firefox.com">{ sub }</a>,
|
'firefoxLink': (sub) => <a href="https://firefox.com">{sub}</a>,
|
||||||
'safariLink': (sub) => <a href="https://apple.com/safari">{ sub }</a>,
|
'safariLink': (sub) => <a href="https://apple.com/safari">{sub}</a>,
|
||||||
},
|
},
|
||||||
) }
|
)}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
{ _t(
|
{ _t(
|
||||||
@@ -125,9 +76,30 @@ const CompatibilityView: React.FC<IProps> = ({ onAccept }) => {
|
|||||||
<div className="mx_HomePage_col">
|
<div className="mx_HomePage_col">
|
||||||
<div className="mx_HomePage_row">
|
<div className="mx_HomePage_row">
|
||||||
<div>
|
<div>
|
||||||
{ mobileHeader }
|
<h2 id="step2_heading">Use Element on mobile</h2>
|
||||||
{ ios }
|
<p><strong>iOS</strong> (iPhone or iPad)</p>
|
||||||
{ android }
|
<a
|
||||||
|
href="https://apps.apple.com/app/vector/id1083446067"
|
||||||
|
target="_blank"
|
||||||
|
className="mx_ClearDecoration"
|
||||||
|
>
|
||||||
|
<img height="48" src="themes/element/img/download/apple.svg" alt="Apple App Store" />
|
||||||
|
</a>
|
||||||
|
<p className="mx_Spacer"><strong>Android</strong></p>
|
||||||
|
<a
|
||||||
|
href="https://play.google.com/store/apps/details?id=im.vector.app"
|
||||||
|
target="_blank"
|
||||||
|
className="mx_ClearDecoration"
|
||||||
|
>
|
||||||
|
<img height="48" src="themes/element/img/download/google.svg" alt="Google Play Store" />
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="https://f-droid.org/repository/browse/?fdid=im.vector.app"
|
||||||
|
target="_blank"
|
||||||
|
className="mx_ClearDecoration"
|
||||||
|
>
|
||||||
|
<img height="48" src="themes/element/img/download/fdroid.svg" alt="F-Droid" />
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ interface IProps {
|
|||||||
messages?: string[];
|
messages?: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const ErrorView: React.FC<IProps> = ({ title, messages }) => {
|
const ErrorView: React.FC<IProps> = ({title, messages}) => {
|
||||||
return <div className="mx_ErrorView">
|
return <div className="mx_ErrorView">
|
||||||
<div className="mx_ErrorView_container">
|
<div className="mx_ErrorView_container">
|
||||||
<div className="mx_HomePage_header">
|
<div className="mx_HomePage_header">
|
||||||
@@ -40,9 +40,9 @@ const ErrorView: React.FC<IProps> = ({ title, messages }) => {
|
|||||||
<div className="mx_HomePage_row">
|
<div className="mx_HomePage_row">
|
||||||
<div>
|
<div>
|
||||||
<h2 id="step1_heading">{ title }</h2>
|
<h2 id="step1_heading">{ title }</h2>
|
||||||
{ messages && messages.map(msg => <p key={msg}>
|
{messages && messages.map(msg => <p key={msg}>
|
||||||
{ msg }
|
{ msg }
|
||||||
</p>) }
|
</p>)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
34
src/components/structures/VectorEmbeddedPage.js
Normal file
34
src/components/structures/VectorEmbeddedPage.js
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 OpenMarket Ltd
|
||||||
|
Copyright 2017 Vector Creations Ltd
|
||||||
|
Copyright 2019 New Vector Ltd
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import EmbeddedPage from 'matrix-react-sdk/src/components/structures/EmbeddedPage';
|
||||||
|
import sanitizeHtml from 'sanitize-html';
|
||||||
|
import { _t } from 'matrix-react-sdk/src/languageHandler';
|
||||||
|
|
||||||
|
export default class VectorEmbeddedPage extends EmbeddedPage {
|
||||||
|
static replaces = '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/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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,28 +20,34 @@ import SdkConfig from 'matrix-react-sdk/src/SdkConfig';
|
|||||||
import { _t } from 'matrix-react-sdk/src/languageHandler';
|
import { _t } from 'matrix-react-sdk/src/languageHandler';
|
||||||
|
|
||||||
const VectorAuthFooter = () => {
|
const VectorAuthFooter = () => {
|
||||||
const brandingConfig = SdkConfig.getObject("branding");
|
const brandingConfig = SdkConfig.get().branding;
|
||||||
const links = brandingConfig?.get("auth_footer_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/element-web" },
|
{"text": "GitHub", "url": "https://github.com/vector-im/element-web"},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if (brandingConfig && brandingConfig.authFooterLinks) {
|
||||||
|
links = brandingConfig.authFooterLinks;
|
||||||
|
}
|
||||||
|
|
||||||
const authFooterLinks = [];
|
const authFooterLinks = [];
|
||||||
for (const linkEntry of links) {
|
for (const linkEntry of links) {
|
||||||
authFooterLinks.push(
|
authFooterLinks.push(
|
||||||
<a href={linkEntry.url} key={linkEntry.text} target="_blank" rel="noreferrer noopener">
|
<a href={linkEntry.url} key={linkEntry.text} target="_blank" rel="noreferrer noopener">
|
||||||
{ linkEntry.text }
|
{linkEntry.text}
|
||||||
</a>,
|
</a>,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mx_AuthFooter">
|
<div className="mx_AuthFooter">
|
||||||
{ authFooterLinks }
|
{authFooterLinks}
|
||||||
<a href="https://matrix.org" target="_blank" rel="noreferrer noopener">{ _t('Powered by Matrix') }</a>
|
<a href="https://matrix.org" target="_blank" rel="noreferrer noopener">{ _t('Powered by Matrix') }</a>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
VectorAuthFooter.replaces = 'AuthFooter';
|
||||||
|
|
||||||
export default VectorAuthFooter;
|
export default VectorAuthFooter;
|
||||||
@@ -16,12 +16,22 @@ limitations under the License.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
import SdkConfig from 'matrix-react-sdk/src/SdkConfig';
|
import SdkConfig from 'matrix-react-sdk/src/SdkConfig';
|
||||||
|
|
||||||
export default class VectorAuthHeaderLogo extends React.PureComponent {
|
export default class VectorAuthHeaderLogo extends React.PureComponent {
|
||||||
public render() {
|
static replaces = 'AuthHeaderLogo'
|
||||||
const brandingConfig = SdkConfig.getObject("branding");
|
|
||||||
const logoUrl = brandingConfig?.get("auth_header_logo_url") ?? "themes/element/img/logos/element-logo.svg";
|
static propTypes = {
|
||||||
|
icon: PropTypes.string,
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const brandingConfig = SdkConfig.get().branding;
|
||||||
|
let logoUrl = "themes/element/img/logos/element-logo.svg";
|
||||||
|
if (brandingConfig && brandingConfig.authHeaderLogoUrl) {
|
||||||
|
logoUrl = brandingConfig.authHeaderLogoUrl;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mx_AuthHeaderLogo">
|
<div className="mx_AuthHeaderLogo">
|
||||||
@@ -14,45 +14,46 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import React, { CSSProperties } from 'react';
|
import React from 'react';
|
||||||
|
import * as sdk from 'matrix-react-sdk/src/index';
|
||||||
import SdkConfig from 'matrix-react-sdk/src/SdkConfig';
|
import SdkConfig from 'matrix-react-sdk/src/SdkConfig';
|
||||||
|
|
||||||
import VectorAuthFooter from "./VectorAuthFooter";
|
|
||||||
|
|
||||||
export default class VectorAuthPage extends React.PureComponent {
|
export default class VectorAuthPage extends React.PureComponent {
|
||||||
private static welcomeBackgroundUrl;
|
static replaces = 'AuthPage'
|
||||||
|
|
||||||
|
static welcomeBackgroundUrl;
|
||||||
|
|
||||||
// cache the url as a static to prevent it changing without refreshing
|
// cache the url as a static to prevent it changing without refreshing
|
||||||
private static getWelcomeBackgroundUrl() {
|
static getWelcomeBackgroundUrl() {
|
||||||
if (VectorAuthPage.welcomeBackgroundUrl) return VectorAuthPage.welcomeBackgroundUrl;
|
if (VectorAuthPage.welcomeBackgroundUrl) return VectorAuthPage.welcomeBackgroundUrl;
|
||||||
|
|
||||||
const brandingConfig = SdkConfig.getObject("branding");
|
const brandingConfig = SdkConfig.get().branding;
|
||||||
VectorAuthPage.welcomeBackgroundUrl = "themes/element/img/backgrounds/lake.jpg";
|
VectorAuthPage.welcomeBackgroundUrl = "themes/element/img/backgrounds/lake.jpg";
|
||||||
|
if (brandingConfig && brandingConfig.welcomeBackgroundUrl) {
|
||||||
const configuredUrl = brandingConfig?.get("welcome_background_url");
|
if (Array.isArray(brandingConfig.welcomeBackgroundUrl)) {
|
||||||
if (configuredUrl) {
|
const index = Math.floor(Math.random() * brandingConfig.welcomeBackgroundUrl.length);
|
||||||
if (Array.isArray(configuredUrl)) {
|
VectorAuthPage.welcomeBackgroundUrl = brandingConfig.welcomeBackgroundUrl[index];
|
||||||
const index = Math.floor(Math.random() * configuredUrl.length);
|
|
||||||
VectorAuthPage.welcomeBackgroundUrl = configuredUrl[index];
|
|
||||||
} else {
|
} else {
|
||||||
VectorAuthPage.welcomeBackgroundUrl = configuredUrl;
|
VectorAuthPage.welcomeBackgroundUrl = brandingConfig.welcomeBackgroundUrl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return VectorAuthPage.welcomeBackgroundUrl;
|
return VectorAuthPage.welcomeBackgroundUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public render() {
|
render() {
|
||||||
|
const AuthFooter = sdk.getComponent('auth.AuthFooter');
|
||||||
|
|
||||||
const pageStyle = {
|
const pageStyle = {
|
||||||
background: `center/cover fixed url(${VectorAuthPage.getWelcomeBackgroundUrl()})`,
|
background: `center/cover fixed url(${VectorAuthPage.getWelcomeBackgroundUrl()})`,
|
||||||
};
|
};
|
||||||
|
|
||||||
const modalStyle: CSSProperties = {
|
const modalStyle = {
|
||||||
position: 'relative',
|
position: 'relative',
|
||||||
background: 'initial',
|
background: 'initial',
|
||||||
};
|
};
|
||||||
|
|
||||||
const blurStyle: CSSProperties = {
|
const blurStyle = {
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
top: 0,
|
top: 0,
|
||||||
right: 0,
|
right: 0,
|
||||||
@@ -62,7 +63,7 @@ export default class VectorAuthPage extends React.PureComponent {
|
|||||||
background: pageStyle.background,
|
background: pageStyle.background,
|
||||||
};
|
};
|
||||||
|
|
||||||
const modalContentStyle: CSSProperties = {
|
const modalContentStyle = {
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
zIndex: 1,
|
zIndex: 1,
|
||||||
background: 'rgba(255, 255, 255, 0.59)',
|
background: 'rgba(255, 255, 255, 0.59)',
|
||||||
@@ -77,7 +78,7 @@ export default class VectorAuthPage extends React.PureComponent {
|
|||||||
{ this.props.children }
|
{ this.props.children }
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<VectorAuthFooter />
|
<AuthFooter />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -57,7 +57,7 @@ export default class Favicon {
|
|||||||
private readyCb = () => {};
|
private readyCb = () => {};
|
||||||
|
|
||||||
constructor(params: Partial<IParams> = {}) {
|
constructor(params: Partial<IParams> = {}) {
|
||||||
this.params = { ...defaults, ...params };
|
this.params = {...defaults, ...params};
|
||||||
|
|
||||||
this.icons = Favicon.getIcons();
|
this.icons = Favicon.getIcons();
|
||||||
// create work canvas
|
// create work canvas
|
||||||
@@ -125,7 +125,7 @@ export default class Favicon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private circle(n: number | string, opts?: Partial<IParams>) {
|
private circle(n: number | string, opts?: Partial<IParams>) {
|
||||||
const params = { ...this.params, ...opts };
|
const params = {...this.params, ...opts};
|
||||||
const opt = this.options(n, params);
|
const opt = this.options(n, params);
|
||||||
|
|
||||||
let more = false;
|
let more = false;
|
||||||
@@ -214,7 +214,7 @@ export default class Favicon {
|
|||||||
if (!this.isReady) {
|
if (!this.isReady) {
|
||||||
this.readyCb = () => {
|
this.readyCb = () => {
|
||||||
this.badge(content, opts);
|
this.badge(content, opts);
|
||||||
};
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2022 The Matrix.org Foundation C.I.C.
|
Copyright 2018 New Vector Ltd
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
@@ -13,9 +13,3 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
declare module "*.svg" {
|
|
||||||
const path: string;
|
|
||||||
export const Icon: React.FC<React.SVGProps<SVGSVGElement>>;
|
|
||||||
export default path;
|
|
||||||
}
|
|
||||||
@@ -32,7 +32,5 @@
|
|||||||
"I understand the risks and wish to continue": "أفهم المخاطرة وأود المواصلة",
|
"I understand the risks and wish to continue": "أفهم المخاطرة وأود المواصلة",
|
||||||
"Go to element.io": "انتقل إلى element.io",
|
"Go to element.io": "انتقل إلى element.io",
|
||||||
"Failed to start": "فشل البدء",
|
"Failed to start": "فشل البدء",
|
||||||
"Powered by Matrix": "تدعمه «ماترِكس»",
|
"Powered by Matrix": "تدعمه «ماترِكس»"
|
||||||
"Use %(brand)s on mobile": "استعمل %(brand)s على المحمول",
|
|
||||||
"Switch to space by number": "التبديل إلى المساحة بالرقم"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +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": "Базирано на Matrix",
|
"Powered by Matrix": "Базирано на Matrix"
|
||||||
"Use %(brand)s on mobile": "Използвайте %(brand)s на мобилен телефон"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"Dismiss": "সরাও",
|
|
||||||
"Open": "খোলা"
|
|
||||||
}
|
|
||||||
@@ -1,3 +1 @@
|
|||||||
{
|
{}
|
||||||
"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।"
|
|
||||||
}
|
|
||||||
@@ -1,5 +1 @@
|
|||||||
{
|
{}
|
||||||
"Your Element is misconfigured": "আপনার এলিমেন্ট টি ভুল ভাবে কনফিগার করা হয়েছে",
|
|
||||||
"Invalid configuration: no default server specified.": "ভুল কনফিগারেশনঃ কোনো মূল সার্ভার উল্লেখ করা হয়নি।",
|
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "ভুল কনফিগারেশনঃ এদের মধ্যে কেবলমাত্র একটাই উল্লেখ করা যেতে পারেঃ default_server_config, default_server_name অথবা default_hs_url."
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -31,6 +31,5 @@
|
|||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizirani, šifrirani razgovor & suradnja pokrenuta [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizirani, šifrirani razgovor & suradnja pokrenuta [matrix]",
|
||||||
"Sign In": "Prijavite se",
|
"Sign In": "Prijavite se",
|
||||||
"Create Account": "Otvori račun",
|
"Create Account": "Otvori račun",
|
||||||
"Explore rooms": "Istražite sobe",
|
"Explore rooms": "Istražite sobe"
|
||||||
"Use %(brand)s on mobile": "Koristi %(brand)s na mobitelu"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,5 @@
|
|||||||
"I understand the risks and wish to continue": "Entenc els riscos i vull continuar",
|
"I understand the risks and wish to continue": "Entenc els riscos i vull continuar",
|
||||||
"Go to element.io": "Vés a element.io",
|
"Go to element.io": "Vés a element.io",
|
||||||
"Failed to start": "Ha fallat l'inici",
|
"Failed to start": "Ha fallat l'inici",
|
||||||
"Missing indexeddb worker script!": "Falta l'script del treballador indexeddb!",
|
"Missing indexeddb worker script!": "Falta l'script del treballador indexeddb!"
|
||||||
"Use %(brand)s on mobile": "Utilitza %(brand)s al mòbil",
|
|
||||||
"Switch to space by number": "Canvia d'espai per número"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
{}
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
"Welcome to Element": "Vítá vás Element",
|
"Welcome to Element": "Vítá vás Element",
|
||||||
"Unknown device": "Neznámé zařízení",
|
"Unknown device": "Neznámé zařízení",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "Pro uskutečnění hovoru se sdílením obrazovky musíte používat HTTPS.",
|
"You need to be using HTTPS to place a screen-sharing call.": "Pro uskutečnění hovoru se sdílením obrazovky musíte používat HTTPS.",
|
||||||
"Dismiss": "Zavřít",
|
"Dismiss": "Zahodit",
|
||||||
"powered by Matrix": "používá protokol Matrix",
|
"powered by Matrix": "používá protokol Matrix",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráce na platformě [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráce na platformě [matrix]",
|
||||||
"Sign In": "Přihlásit se",
|
"Sign In": "Přihlásit se",
|
||||||
@@ -32,10 +32,5 @@
|
|||||||
"Failed to start": "Nepovedlo se nastartovat",
|
"Failed to start": "Nepovedlo se nastartovat",
|
||||||
"Powered by Matrix": "Běží na Matrixu",
|
"Powered by Matrix": "Běží na Matrixu",
|
||||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s pro desktopový počítač (%(platformName)s)",
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s pro desktopový počítač (%(platformName)s)",
|
||||||
"Missing indexeddb worker script!": "Nenačetl se skript spravující indexdb!",
|
"Missing indexeddb worker script!": "Nenačetl se skript spravující indexdb!"
|
||||||
"Use %(brand)s on mobile": "Používání %(brand)s v mobilních zařízeních",
|
|
||||||
"Switch to space by number": "Přepnout na prostor podle čísla",
|
|
||||||
"Next recently visited room or community": "Další nedávno navštívená místnost nebo komunita",
|
|
||||||
"Previous recently visited room or community": "Nedávno navštívená místnost nebo komunita",
|
|
||||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Decentralizovaný, šifrovaný chat a spolupráce na platformě $matrixLogo"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,9 +32,5 @@
|
|||||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop %(platformName)s",
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop %(platformName)s",
|
||||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kan fortsætte med at bruge din nuværende browser, men du kan opleve at visse eller alle funktioner ikke vil fungere korrekt.",
|
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kan fortsætte med at bruge din nuværende browser, men du kan opleve at visse eller alle funktioner ikke vil fungere korrekt.",
|
||||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Venligst installer <chromeLink>Chrome</chromeLink>,<firefoxLink>Firefox</firefoxLink> eller <safariLink>Safari</safariLink> for den bedste oplevelse.",
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Venligst installer <chromeLink>Chrome</chromeLink>,<firefoxLink>Firefox</firefoxLink> eller <safariLink>Safari</safariLink> for den bedste oplevelse.",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s bruger avanceret browser funktioner som ikke er understøttet af din nuværende browser.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s bruger avanceret browser funktioner som ikke er understøttet af din nuværende browser."
|
||||||
"Previous recently visited room or community": "Tidligere besøgt rum eller fællesskab",
|
|
||||||
"Switch to space by number": "Skift til space med nummer",
|
|
||||||
"Use %(brand)s on mobile": "Brug %(brand)s på mobil",
|
|
||||||
"Next recently visited room or community": "Næste tidligere besøgt rum eller fællesskab"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,40 +2,35 @@
|
|||||||
"powered by Matrix": "betrieben mit Matrix",
|
"powered by Matrix": "betrieben mit Matrix",
|
||||||
"Dismiss": "Ausblenden",
|
"Dismiss": "Ausblenden",
|
||||||
"Unknown device": "Unbekanntes Gerät",
|
"Unknown device": "Unbekanntes Gerät",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "Du musst HTTPS nutzen, um einen Anruf mit Bildschirmfreigabe durchzuführen.",
|
"You need to be using HTTPS to place a screen-sharing call.": "Du musst HTTPS nutzen um einen Anruf mit Bildschirmfreigabe durchzuführen.",
|
||||||
"Welcome to Element": "Willkommen bei Element",
|
"Welcome to Element": "Willkommen bei Element",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung basierend auf [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung mittels [matrix]",
|
||||||
"Sign In": "Anmelden",
|
"Sign In": "Anmelden",
|
||||||
"Create Account": "Konto erstellen",
|
"Create Account": "Account erstellen",
|
||||||
"Explore rooms": "Räume erkunden",
|
"Explore rooms": "Räume erkunden",
|
||||||
"Unexpected error preparing the app. See console for details.": "Unerwarteter Fehler bei der Vorbereitung der App. Siehe in die Konsole für mehr Details.",
|
"Unexpected error preparing the app. See console for details.": "Unerwarteter Fehler bei der Vorbereitung der App. Siehe in die Konsole für mehr Details.",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ungültige Konfiguration: Es kann nur eine der Optionen default_server_config, default_server_name oder default_hs_url angegeben werden.",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Ungültige Konfiguration: Es kann nur eine der Optionen default_server_config, default_server_name oder default_hs_url angegeben werden.",
|
||||||
"Invalid configuration: no default server specified.": "Ungültige Konfiguration: Es wurde kein Standardserver angegeben.",
|
"Invalid configuration: no default server specified.": "Ungültige Konfiguration: Es wurde kein Standardserver angegeben.",
|
||||||
"The message from the parser is: %(message)s": "Die Nachricht des Parsers ist: %(message)s",
|
"The message from the parser is: %(message)s": "Die Nachricht des Parsers ist: %(message)s",
|
||||||
"Invalid JSON": "Ungültiges JSON",
|
"Invalid JSON": "Ungültiges JSON",
|
||||||
"Go to your browser to complete Sign In": "Gehe zu deinem Browser, um die Anmeldung abzuschließen",
|
"Go to your browser to complete Sign In": "Gehe in deinen Browser, um die Anmeldung abzuschließen",
|
||||||
"Open user settings": "Benutzereinstellungen öffnen",
|
"Open user settings": "Öffne Nutzer-Einstellungen",
|
||||||
"Unable to load config file: please refresh the page to try again.": "Konfigurationsdatei kann nicht geladen werden: Bitte aktualisiere die Seite, um es erneut zu versuchen.",
|
"Unable to load config file: please refresh the page to try again.": "Konfigurationsdatei kann nicht geladen werden: Bitte aktualisiere die Seite, um es erneut zu versuchen.",
|
||||||
"Missing indexeddb worker script!": "Fehlendes indexeddb-Arbeitsskript!",
|
"Missing indexeddb worker script!": "Fehlendes indexeddb Worker-Skript!",
|
||||||
"Previous/next recently visited room or community": "Vorheriger/nächster kürzlich besuchter Raum oder Community",
|
"Previous/next recently visited room or community": "Vorheriger/nächster kürzlich besuchter Raum oder Community",
|
||||||
"Unsupported browser": "Nicht unterstützter Browser",
|
"Unsupported browser": "Nicht unterstützter Browser",
|
||||||
"Go to element.io": "Gehe zu element.io",
|
"Go to element.io": "Gehe zu element.io",
|
||||||
"Failed to start": "Start fehlgeschlagen",
|
"Failed to start": "Start fehlgeschlagen",
|
||||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
|
||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Bitte installiere <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> oder <safariLink>Safari</safariLink> für das beste Erlebnis.",
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Bitte installiere <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, oder <safariLink>Safari</safariLink> für das beste Erlebnis.",
|
||||||
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kannst deinen aktuellen Browser weiterhin verwenden. Es ist aber möglich, dass nicht alles richtig funktioniert oder das Aussehen der App inkorrekt ist.",
|
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "Du kannst deinen aktuellen Browser weiterhin verwenden, es kann aber sein, dass einige oder alle Funktionen nicht verfügbar stehen oder dass das Aussehen und die Bedienung der Anwendung nicht korrekt ist.",
|
||||||
"I understand the risks and wish to continue": "Ich verstehe die Risiken und möchte fortfahren",
|
"I understand the risks and wish to continue": "Ich verstehe die Risiken und möchte fortfahren",
|
||||||
"Your Element is misconfigured": "Dein Element ist falsch konfiguriert",
|
"Your Element is misconfigured": "Dein Element ist falsch konfiguriert",
|
||||||
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Deine Elementkonfiguration enthält ungültiges JSON. Bitte korrigiere das Problem und lade die Seite neu.",
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Deine Element Konfiguration enthält ungültiges JSON. Bitte korrigiere das Problem und lade die Seite neu.",
|
||||||
"Download Completed": "Herunterladen fertiggestellt",
|
"Download Completed": "Download fertiggestellt",
|
||||||
"Open": "Öffnen",
|
"Open": "Öffnen",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s verwendet erweiterte Browserfunktionen, die von deinem Browser nicht unterstützt werden.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s verwendet erweiterte Browserfunktionen, die von Ihrem aktuellen Browser nicht unterstützt werden.",
|
||||||
"Your browser can't run %(brand)s": "Dein Browser kann %(brand)s nicht ausführen",
|
"Your browser can't run %(brand)s": "Dein Browser kann %(brand)s nicht ausführen",
|
||||||
"Powered by Matrix": "Betrieben mit Matrix",
|
"Powered by Matrix": "Betrieben mit Matrix"
|
||||||
"Use %(brand)s on mobile": "Verwende %(brand)s am Handy",
|
|
||||||
"Switch to space by number": "Zum n-ten Space wechseln",
|
|
||||||
"Next recently visited room or community": "Nächster kürzlich besuchter Raum",
|
|
||||||
"Previous recently visited room or community": "Vorheriger kürzlich besuchter Raum",
|
|
||||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Dezentralisierter, verschlüsselter Chat & Zusammenarbeit unterstützt von $matrixLogo"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,5 @@
|
|||||||
"Failed to start": "Αποτυχία έναρξης",
|
"Failed to start": "Αποτυχία έναρξης",
|
||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
|
||||||
"Missing indexeddb worker script!": "Απουσία indexeddb worker script!",
|
"Missing indexeddb worker script!": "Απουσία indexeddb worker script!"
|
||||||
"Use %(brand)s on mobile": "Χρήση %(brand)s σε κινητό",
|
|
||||||
"Switch to space by number": "Εναλλαγή σε space με αριθμό"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"Missing indexeddb worker script!": "Missing indexeddb worker script!",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.",
|
||||||
"Invalid configuration: no default server specified.": "Invalid configuration: no default server specified.",
|
"Invalid configuration: no default server specified.": "Invalid configuration: no default server specified.",
|
||||||
"Your Element is misconfigured": "Your Element is misconfigured",
|
"Your Element is misconfigured": "Your Element is misconfigured",
|
||||||
@@ -10,13 +11,14 @@
|
|||||||
"Download Completed": "Download Completed",
|
"Download Completed": "Download Completed",
|
||||||
"Open": "Open",
|
"Open": "Open",
|
||||||
"Dismiss": "Dismiss",
|
"Dismiss": "Dismiss",
|
||||||
|
"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 Desktop (%(platformName)s)",
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
|
||||||
"Go to your browser to complete Sign In": "Go to your browser to complete Sign In",
|
"Go to your browser to complete Sign In": "Go to your browser to complete Sign In",
|
||||||
"Unknown device": "Unknown device",
|
"Unknown device": "Unknown device",
|
||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
||||||
"Powered by Matrix": "Powered by Matrix",
|
"Powered by Matrix": "Powered by Matrix",
|
||||||
"Use %(brand)s on mobile": "Use %(brand)s on mobile",
|
|
||||||
"Unsupported browser": "Unsupported browser",
|
"Unsupported browser": "Unsupported browser",
|
||||||
"Your browser can't run %(brand)s": "Your browser can't run %(brand)s",
|
"Your browser can't run %(brand)s": "Your browser can't run %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uses advanced browser features which aren't supported by your current browser.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s uses advanced browser features which aren't supported by your current browser.",
|
||||||
@@ -26,7 +28,7 @@
|
|||||||
"Go to element.io": "Go to element.io",
|
"Go to element.io": "Go to element.io",
|
||||||
"Failed to start": "Failed to start",
|
"Failed to start": "Failed to start",
|
||||||
"Welcome to Element": "Welcome to Element",
|
"Welcome to Element": "Welcome to Element",
|
||||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Decentralised, encrypted chat & collaboration powered by $matrixLogo",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]",
|
||||||
"Sign In": "Sign In",
|
"Sign In": "Sign In",
|
||||||
"Create Account": "Create Account",
|
"Create Account": "Create Account",
|
||||||
"Explore rooms": "Explore rooms"
|
"Explore rooms": "Explore rooms"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user