diff --git a/.dockerignore b/.dockerignore
index 45ead65e15..ced02564a8 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -3,7 +3,6 @@ test/
webapp/
lib/
node_modules/
-electron_app/
karma-reports/
.idea/
.tmp/
diff --git a/.eslintrc.js b/.eslintrc.js
index c181384fd5..b59ea416ad 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,3 +1,30 @@
module.exports = {
- extends: ["./node_modules/matrix-react-sdk/.eslintrc.js"],
-}
+ plugins: ["matrix-org"],
+ extends: [
+ "plugin:matrix-org/babel",
+ "plugin:matrix-org/react",
+ ],
+ env: {
+ browser: true,
+ node: true,
+ },
+ rules: {
+ // Things we do that break the ideal style
+ "quotes": "off",
+ },
+ overrides: [{
+ files: ["src/**/*.{ts,tsx}"],
+ 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",
+
+ // We disable this while we're transitioning
+ "@typescript-eslint/no-explicit-any": "off",
+ },
+ }],
+};
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index a2042975e1..a8cd508d3a 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -1,3 +1,5 @@
+
+
-### Description
+#### Description
Describe here the problem that you are experiencing, or the feature you are requesting.
-### Steps to reproduce
+#### Steps to reproduce
- For bugs, list the steps
- that reproduce the bug
@@ -28,7 +30,7 @@ file a bug here too! -->
-### Version information
+#### Version information
@@ -36,9 +38,9 @@ file a bug here too! -->
For the web app:
-- **Browser**: Chrome, Safari, Firefox? which version?
+- **Browser**: Chrome, Firefox, Safari, Edge? which version?
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
-- **URL**: riot.im/develop / riot.im/app / somewhere else? If a private server, what version of riot-web?
+- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web?
For the desktop app:
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 5f472303dd..d05466c6c0 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -2,11 +2,13 @@
name: Bug report
about: Create a report to help us improve
title: ''
-labels: bug
+labels: T-Defect
assignees: ''
---
+
+
-### Description
+#### Description
Describe here the problem that you are experiencing, or the feature you are requesting.
-### Steps to reproduce
+#### Steps to reproduce
- For bugs, list the steps
- that reproduce the bug
@@ -38,7 +40,7 @@ Logs being sent: yes/no
-### Version information
+#### Version information
@@ -46,9 +48,9 @@ Logs being sent: yes/no
For the web app:
-- **Browser**: Chrome, Safari, Firefox? which version?
+- **Browser**: Chrome, Firefox, Safari, Edge? which version?
- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
-- **URL**: riot.im/develop / riot.im/app / somewhere else? If a private server, what version of riot-web?
+- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web?
For the desktop app:
diff --git a/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md b/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md
index b27af8faeb..ffa31c6cf1 100644
--- a/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md
+++ b/.github/ISSUE_TEMPLATE/suggestion-or-feature-request.md
@@ -2,19 +2,19 @@
name: Suggestion or Feature request
about: Suggest an idea for this project
title: ''
-labels: suggestion
+labels: T-Enhancement
assignees: ''
---
-**Is your suggestion related to a problem? Please describe.**
+#### 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**
+#### Describe the solution you'd like.
A clear and concise description of what you want to happen.
-**Describe alternatives you've considered**
+#### Describe alternatives you've considered.
A clear and concise description of any alternative solutions or features you've considered.
-**Additional context**
+#### Additional context
Add any other context or screenshots about the feature request here.
diff --git a/.github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md b/.github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md
deleted file mode 100644
index b3e68ccec9..0000000000
--- a/.github/ISSUE_TEMPLATE/user-interface-or-usability-bug-report.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-name: User Interface or Usability Bug report
-about: Please include screenshots in UI/UX bug reports
-title: ''
-labels: bug, ui/ux
-assignees: ''
-
----
-
-
-
-
-
-
-
-### 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.
-
-
-Logs being sent: yes/no
-
-
-
-### Version information
-
-
-
-- **Platform**: web (in-browser) or desktop?
-
-For the web app:
-
-- **Browser**: Chrome, Safari, Firefox? which version?
-- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
-- **URL**: riot.im/develop / riot.im/app / somewhere else? If a private server, what version of riot-web?
-
-For the desktop app:
-
-- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc?
-- **Version**: 1.x.y
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000000..f1d5476c5d
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
index 4dd3a26213..bc6255165b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,9 +4,6 @@
/key.pem
/lib
/node_modules
-/electron_app/node_modules
-/electron_app/dist
-/electron_app/pub
/packages/
/webapp
/.npmrc
@@ -22,3 +19,5 @@ electron/pub
/src/component-index.js
/.tmp
/webpack-stats.json
+.vscode
+.vscode/
diff --git a/.modernizr.json b/.modernizr.json
index 9b3990345d..fcfd7124f3 100644
--- a/.modernizr.json
+++ b/.modernizr.json
@@ -1,9 +1,6 @@
{
"minify": true,
- "classPrefix": "modernizr_",
- "options": [
- "setClasses"
- ],
+ "enableClasses": false,
"feature-detects": [
"test/css/animations",
"test/css/displaytable",
@@ -29,6 +26,7 @@
"test/url/urlsearchparams",
"test/cors",
+ "test/crypto",
"test/iframe/sandbox",
"test/json",
"test/network/fetch",
diff --git a/.stylelintrc.js b/.stylelintrc.js
index 7296210285..1e03f2fbf6 100644
--- a/.stylelintrc.js
+++ b/.stylelintrc.js
@@ -19,7 +19,7 @@ module.exports = {
"at-rule-no-unknown": null,
"no-descending-specificity": null,
"scss/at-rule-no-unknown": [true, {
- // https://github.com/vector-im/riot-web/issues/10544
+ // https://github.com/vector-im/element-web/issues/10544
"ignoreAtRules": ["define-mixin"],
}],
}
diff --git a/AUTHORS.rst b/AUTHORS.rst
index a92ca066cc..d027b59c99 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -16,3 +16,6 @@ include:
* Alexandr Korsak (https://github.com/oivoodoo)
Improved multiple file uploading
+
+* Thom Cleary (https://github.com/thomcatdotrocks)
+ Small update for tarball deployment
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a5bc6cda88..91f28127e8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,1208 @@
+Changes in [1.7.32](https://github.com/vector-im/element-web/releases/tag/v1.7.32) (2021-07-05)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.32-rc.1...v1.7.32)
+
+ * No changes from rc.1
+
+Changes in [1.7.32-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.32-rc.1) (2021-06-29)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.31...v1.7.32-rc.1)
+
+ * Update to react-sdk v3.25.0-rc.1 and js-sdk v12.0.1-rc.1
+ * Translations update from Weblate
+ [\#17832](https://github.com/vector-im/element-web/pull/17832)
+ * Fix canvas-filter-polyfill mock path
+ [\#17785](https://github.com/vector-im/element-web/pull/17785)
+ * Mock context-filter-polyfill for app-tests
+ [\#17774](https://github.com/vector-im/element-web/pull/17774)
+ * Add libera.chat to default room directory
+ [\#17772](https://github.com/vector-im/element-web/pull/17772)
+ * Improve typing of Event Index Manager / Seshat
+ [\#17704](https://github.com/vector-im/element-web/pull/17704)
+ * Bump dns-packet from 1.3.1 to 1.3.4
+ [\#17478](https://github.com/vector-im/element-web/pull/17478)
+ * Update matrix-widget-api to fix build issues
+ [\#17747](https://github.com/vector-im/element-web/pull/17747)
+ * Fix whitespace in Dockerfile
+ [\#17742](https://github.com/vector-im/element-web/pull/17742)
+ * Upgrade @types/react and @types/react-dom
+ [\#17723](https://github.com/vector-im/element-web/pull/17723)
+ * Spaces keyboard shortcuts first cut
+ [\#17457](https://github.com/vector-im/element-web/pull/17457)
+ * Labs: feature_report_to_moderators
+ [\#17694](https://github.com/vector-im/element-web/pull/17694)
+
+Changes in [1.7.31](https://github.com/vector-im/element-web/releases/tag/v1.7.31) (2021-06-21)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.31-rc.1...v1.7.31)
+
+ * Upgrade to React SDK 3.24.0 and JS SDK 12.0.0
+
+Changes in [1.7.31-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.31-rc.1) (2021-06-15)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.30...v1.7.31-rc.1)
+
+ * Upgrade to React SDK 3.24.0-rc.1 and JS SDK 12.0.0-rc.1
+ * Translations update from Weblate
+ [\#17655](https://github.com/vector-im/element-web/pull/17655)
+ * Upgrade matrix-react-test-utils for React 17 peer deps
+ [\#17653](https://github.com/vector-im/element-web/pull/17653)
+ * Fix lint errors in Webpack config
+ [\#17626](https://github.com/vector-im/element-web/pull/17626)
+ * Preload only `woff2` fonts
+ [\#17614](https://github.com/vector-im/element-web/pull/17614)
+ * ⚛️ Upgrade to React@17
+ [\#17601](https://github.com/vector-im/element-web/pull/17601)
+
+Changes in [1.7.30](https://github.com/vector-im/element-web/releases/tag/v1.7.30) (2021-06-07)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.30-rc.1...v1.7.30)
+
+ * Upgrade to React SDK 3.23.0 and JS SDK 11.2.0
+
+Changes in [1.7.30-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.30-rc.1) (2021-06-01)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.29...v1.7.30-rc.1)
+
+ * Upgrade to React SDK 3.23.0-rc.1 and JS SDK 11.2.0-rc.1
+ * Translations update from Weblate
+ [\#17526](https://github.com/vector-im/element-web/pull/17526)
+ * Add Modernizr test for Promise.allSettled given js-sdk and react-sdk depend
+ on it
+ [\#17464](https://github.com/vector-im/element-web/pull/17464)
+ * Bump libolm dependency, and update package name.
+ [\#17433](https://github.com/vector-im/element-web/pull/17433)
+ * Remove logo spinner
+ [\#17423](https://github.com/vector-im/element-web/pull/17423)
+
+Changes in [1.7.29](https://github.com/vector-im/element-web/releases/tag/v1.7.29) (2021-05-24)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.29-rc.1...v1.7.29)
+
+## Security notice
+
+Element Web 1.7.29 fixes (by upgrading to olm 3.2.3) an issue in code used for
+decrypting server-side stored secrets. The issue could potentially allow a
+malicious homeserver to cause a stack buffer overflow in the affected function
+and to control that function's local variables.
+
+## All changes
+
+ * Upgrade to React SDK 3.22.0 and JS SDK 11.1.0
+ * [Release] Bump libolm dependency, and update package name
+ [\#17456](https://github.com/vector-im/element-web/pull/17456)
+
+Changes in [1.7.29-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.29-rc.1) (2021-05-19)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.28...v1.7.29-rc.1)
+
+ * Upgrade to React SDK 3.22.0-rc.1 and JS SDK 11.1.0-rc.1
+ * Translations update from Weblate
+ [\#17384](https://github.com/vector-im/element-web/pull/17384)
+ * Prevent minification of `.html` files
+ [\#17349](https://github.com/vector-im/element-web/pull/17349)
+ * Update matrix-widget-api/react-sdk dependency reference
+ [\#17346](https://github.com/vector-im/element-web/pull/17346)
+ * Add `yarn start:https`
+ [\#16989](https://github.com/vector-im/element-web/pull/16989)
+ * Translations update from Weblate
+ [\#17239](https://github.com/vector-im/element-web/pull/17239)
+ * Remove "in development" flag from voice messages labs documentation
+ [\#17204](https://github.com/vector-im/element-web/pull/17204)
+ * Add required webpack+jest config to load Safari support modules
+ [\#17193](https://github.com/vector-im/element-web/pull/17193)
+
+Changes in [1.7.28](https://github.com/vector-im/element-web/releases/tag/v1.7.28) (2021-05-17)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.28-rc.1...v1.7.28)
+
+## Security notice
+
+Element Web 1.7.28 fixes (by upgrading to matrix-react-sdk 3.21.0) a low
+severity issue (GHSA-8796-gc9j-63rv) related to file upload. When uploading a
+file, the local file preview can lead to execution of scripts embedded in the
+uploaded file, but only after several user interactions to open the preview in
+a separate tab. This only impacts the local user while in the process of
+uploading. It cannot be exploited remotely or by other users. Thanks to
+[Muhammad Zaid Ghifari](https://github.com/MR-ZHEEV) for responsibly disclosing
+this via Matrix's Security Disclosure Policy.
+
+## All changes
+
+ * Upgrade to React SDK 3.21.0 and JS SDK 11.0.0
+
+Changes in [1.7.28-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.28-rc.1) (2021-05-11)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.27...v1.7.28-rc.1)
+
+ * Upgrade to React SDK 3.21.0-rc.1 and JS SDK 11.0.0-rc.1
+ * Switch back to release version of `sanitize-html`
+ [\#17231](https://github.com/vector-im/element-web/pull/17231)
+ * Bump url-parse from 1.4.7 to 1.5.1
+ [\#17199](https://github.com/vector-im/element-web/pull/17199)
+ * Bump lodash from 4.17.20 to 4.17.21
+ [\#17205](https://github.com/vector-im/element-web/pull/17205)
+ * Bump hosted-git-info from 2.8.8 to 2.8.9
+ [\#17219](https://github.com/vector-im/element-web/pull/17219)
+ * Disable host checking on the webpack dev server
+ [\#17194](https://github.com/vector-im/element-web/pull/17194)
+ * Bump ua-parser-js from 0.7.23 to 0.7.24
+ [\#17190](https://github.com/vector-im/element-web/pull/17190)
+
+Changes in [1.7.27](https://github.com/vector-im/element-web/releases/tag/v1.7.27) (2021-05-10)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.27-rc.1...v1.7.27)
+
+ * Upgrade to React SDK 3.20.0 and JS SDK 10.1.0
+
+Changes in [1.7.27-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.27-rc.1) (2021-05-04)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.26...v1.7.27-rc.1)
+
+ * Upgrade to React SDK 3.20.0-rc.1 and JS SDK 10.1.0-rc.1
+ * Translations update from Weblate
+ [\#17160](https://github.com/vector-im/element-web/pull/17160)
+ * Document option for obeying asserted identity
+ [\#17008](https://github.com/vector-im/element-web/pull/17008)
+ * Implement IPC call to Electron to set language
+ [\#17052](https://github.com/vector-im/element-web/pull/17052)
+ * Convert Vector skin react components to Typescript
+ [\#17061](https://github.com/vector-im/element-web/pull/17061)
+ * Add code quality review policy
+ [\#16980](https://github.com/vector-im/element-web/pull/16980)
+ * Register RecorderWorklet from react-sdk
+ [\#17013](https://github.com/vector-im/element-web/pull/17013)
+ * Preload Inter font to avoid FOIT on slow connections
+ [\#17039](https://github.com/vector-im/element-web/pull/17039)
+ * Disable `postcss-calc`'s noisy `warnWhenCannotResolve` option
+ [\#17041](https://github.com/vector-im/element-web/pull/17041)
+
+Changes in [1.7.26](https://github.com/vector-im/element-web/releases/tag/v1.7.26) (2021-04-26)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.26-rc.1...v1.7.26)
+
+ * Upgrade to React SDK 3.19.0 and JS SDK 10.0.0
+
+Changes in [1.7.26-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.26-rc.1) (2021-04-21)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.25...v1.7.26-rc.1)
+
+ * Upgrade to React SDK 3.19.0-rc.1 and JS SDK 10.0.0-rc.1
+ * Translations update from Weblate
+ [\#17031](https://github.com/vector-im/element-web/pull/17031)
+ * Bump ssri from 6.0.1 to 6.0.2
+ [\#17010](https://github.com/vector-im/element-web/pull/17010)
+ * Fix `NODE_ENV` value for CI environments
+ [\#17003](https://github.com/vector-im/element-web/pull/17003)
+ * Use React production mode in CI builds
+ [\#16969](https://github.com/vector-im/element-web/pull/16969)
+ * Labs documentation for DND mode
+ [\#16962](https://github.com/vector-im/element-web/pull/16962)
+ * Rename blackboxing to new option ignore list
+ [\#16965](https://github.com/vector-im/element-web/pull/16965)
+ * Remove velocity-animate from lockfile
+ [\#16963](https://github.com/vector-im/element-web/pull/16963)
+ * Add mobile download link configuration
+ [\#16890](https://github.com/vector-im/element-web/pull/16890)
+ * Switch develop to not-staging Scalar by default
+ [\#16883](https://github.com/vector-im/element-web/pull/16883)
+ * Support a config option to skip login/welcome and go to SSO
+ [\#16880](https://github.com/vector-im/element-web/pull/16880)
+
+Changes in [1.7.25](https://github.com/vector-im/element-web/releases/tag/v1.7.25) (2021-04-12)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.25-rc.1...v1.7.25)
+
+ * Upgrade to React SDK 3.18.0 and JS SDK 9.11.0
+
+Changes in [1.7.25-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.25-rc.1) (2021-04-07)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.24...v1.7.25-rc.1)
+
+ * Upgrade to React SDK 3.18.0-rc.1 and JS SDK 9.11.0-rc.1
+ * Translations update from Weblate
+ [\#16882](https://github.com/vector-im/element-web/pull/16882)
+ * Revert "Docker image: serve pre-compressed assets using gzip_static"
+ [\#16838](https://github.com/vector-im/element-web/pull/16838)
+ * Move native node modules documentation to element-desktop
+ [\#16814](https://github.com/vector-im/element-web/pull/16814)
+ * Add user settings for warn before exit
+ [\#16781](https://github.com/vector-im/element-web/pull/16781)
+ * Change ISSUE_TEMPLATE bold lines to proper headers
+ [\#16768](https://github.com/vector-im/element-web/pull/16768)
+ * Add example for deployment into Kubernetes
+ [\#16447](https://github.com/vector-im/element-web/pull/16447)
+ * Create bare-bones `PULL_REQUEST_TEMPLATE.md`
+ [\#16770](https://github.com/vector-im/element-web/pull/16770)
+ * Add webpack config and labs flag docs for voice messages
+ [\#16705](https://github.com/vector-im/element-web/pull/16705)
+
+Changes in [1.7.24](https://github.com/vector-im/element-web/releases/tag/v1.7.24) (2021-03-29)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.24-rc.1...v1.7.24)
+
+ * Upgrade to React SDK 3.17.0 and JS SDK 9.10.0
+
+Changes in [1.7.24-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.24-rc.1) (2021-03-25)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.23...v1.7.24-rc.1)
+
+ * Upgrade to React SDK 3.17.0-rc.2 and JS SDK 9.10.0-rc.1
+ * Translations update from Weblate
+ [\#16766](https://github.com/vector-im/element-web/pull/16766)
+ * Docker image: serve pre-compressed assets using gzip_static
+ [\#16698](https://github.com/vector-im/element-web/pull/16698)
+ * Fix style lint issues
+ [\#16732](https://github.com/vector-im/element-web/pull/16732)
+ * Updated expected webpack output in setup guide
+ [\#16740](https://github.com/vector-im/element-web/pull/16740)
+ * Docs for `loginForWelcome`
+ [\#16468](https://github.com/vector-im/element-web/pull/16468)
+ * Disable rageshake persistence if no logs would be submitted
+ [\#16697](https://github.com/vector-im/element-web/pull/16697)
+
+Changes in [1.7.23](https://github.com/vector-im/element-web/releases/tag/v1.7.23) (2021-03-15)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.23-rc.1...v1.7.23)
+
+ * Upgrade to React SDK 3.16.0 and JS SDK 9.9.0
+
+Changes in [1.7.23-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.23-rc.1) (2021-03-10)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.22...v1.7.23-rc.1)
+
+ * Upgrade to React SDK 3.16.0-rc.2 and JS SDK 9.9.0-rc.1
+ * Translations update from Weblate
+ [\#16655](https://github.com/vector-im/element-web/pull/16655)
+ * Improve docs for customisations
+ [\#16652](https://github.com/vector-im/element-web/pull/16652)
+ * Update triage guide to match the new label scheme
+ [\#16612](https://github.com/vector-im/element-web/pull/16612)
+ * Remove a couple useless 'use strict' calls
+ [\#16650](https://github.com/vector-im/element-web/pull/16650)
+ * Remove old conferencing doc
+ [\#16648](https://github.com/vector-im/element-web/pull/16648)
+ * Bump elliptic from 6.5.3 to 6.5.4
+ [\#16644](https://github.com/vector-im/element-web/pull/16644)
+ * Add option for audio live streaming
+ [\#16604](https://github.com/vector-im/element-web/pull/16604)
+ * Update velocity-animate dependency
+ [\#16605](https://github.com/vector-im/element-web/pull/16605)
+ * Add Edge to the supported tier
+ [\#16611](https://github.com/vector-im/element-web/pull/16611)
+ * Add multi language spell check
+ [\#15851](https://github.com/vector-im/element-web/pull/15851)
+ * Document feature_spaces
+ [\#16538](https://github.com/vector-im/element-web/pull/16538)
+
+Changes in [1.7.22](https://github.com/vector-im/element-web/releases/tag/v1.7.22) (2021-03-01)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.22-rc.1...v1.7.22)
+
+## Security notice
+
+Element Web 1.7.22 fixes (by upgrading to matrix-react-sdk 3.15.0) a moderate
+severity issue (CVE-2021-21320) where the user content sandbox can be abused to
+trick users into opening unexpected documents after several user interactions.
+The content can be opened with a `blob` origin from the Matrix client, so it is
+possible for a malicious document to access user messages and secrets. Thanks to
+@keerok for responsibly disclosing this via Matrix's Security Disclosure Policy.
+
+## All changes
+
+ * Upgrade to React SDK 3.15.0 and JS SDK 9.8.0
+
+Changes in [1.7.22-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.22-rc.1) (2021-02-24)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.21...v1.7.22-rc.1)
+
+ * Upgrade to React SDK 3.15.0-rc.1 and JS SDK 9.8.0-rc.1
+ * Translations update from Weblate
+ [\#16529](https://github.com/vector-im/element-web/pull/16529)
+ * Add hostSignup config for element.io clients
+ [\#16515](https://github.com/vector-im/element-web/pull/16515)
+ * VoIP virtual rooms, mkII
+ [\#16442](https://github.com/vector-im/element-web/pull/16442)
+ * Jitsi widget: Read room name from query parameters
+ [\#16456](https://github.com/vector-im/element-web/pull/16456)
+ * fix / sso: make sure to delete only loginToken after redirect
+ [\#16415](https://github.com/vector-im/element-web/pull/16415)
+ * Disable Countly
+ [\#16433](https://github.com/vector-im/element-web/pull/16433)
+
+Changes in [1.7.21](https://github.com/vector-im/element-web/releases/tag/v1.7.21) (2021-02-16)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.21-rc.1...v1.7.21)
+
+ * Upgrade to React SDK 3.14.0 and JS SDK 9.7.0
+
+Changes in [1.7.21-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.21-rc.1) (2021-02-10)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.20...v1.7.21-rc.1)
+
+ * Upgrade to React SDK 3.14.0-rc.1 and JS SDK 9.7.0-rc.1
+ * Translations update from Weblate
+ [\#16427](https://github.com/vector-im/element-web/pull/16427)
+ * Add RegExp dotAll feature test
+ [\#16408](https://github.com/vector-im/element-web/pull/16408)
+ * Fix Electron type merging
+ [\#16405](https://github.com/vector-im/element-web/pull/16405)
+ * README: remove Jenkins reference
+ [\#16381](https://github.com/vector-im/element-web/pull/16381)
+ * Enable PostCSS Calc in webpack builds
+ [\#16307](https://github.com/vector-im/element-web/pull/16307)
+ * Add configuration security best practices to the README.
+ [\#16367](https://github.com/vector-im/element-web/pull/16367)
+ * Upgrade matrix-widget-api
+ [\#16347](https://github.com/vector-im/element-web/pull/16347)
+
+Changes in [1.7.20](https://github.com/vector-im/element-web/releases/tag/v1.7.20) (2021-02-04)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.19...v1.7.20)
+
+ * Upgrade to React SDK 3.13.1
+
+Changes in [1.7.19](https://github.com/vector-im/element-web/releases/tag/v1.7.19) (2021-02-03)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.19-rc.1...v1.7.19)
+
+ * Upgrade to React SDK 3.13.0 and JS SDK 9.6.0
+ * [Release] Upgrade matrix-widget-api
+ [\#16348](https://github.com/vector-im/element-web/pull/16348)
+
+Changes in [1.7.19-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.19-rc.1) (2021-01-29)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.18...v1.7.19-rc.1)
+
+ * Upgrade to React SDK 3.13.0-rc.1 and JS SDK 9.6.0-rc.1
+ * Translations update from Weblate
+ [\#16314](https://github.com/vector-im/element-web/pull/16314)
+ * Use history replaceState instead of redirect for SSO flow
+ [\#16292](https://github.com/vector-im/element-web/pull/16292)
+ * Document the mobile guide toast option
+ [\#16301](https://github.com/vector-im/element-web/pull/16301)
+ * Update widget-api to beta.12
+ [\#16303](https://github.com/vector-im/element-web/pull/16303)
+ * Upgrade deps 2021-01
+ [\#16294](https://github.com/vector-im/element-web/pull/16294)
+ * Move to newer base image for Docker builds
+ [\#16275](https://github.com/vector-im/element-web/pull/16275)
+ * Docs for the VoIP translate pattern option
+ [\#16236](https://github.com/vector-im/element-web/pull/16236)
+ * Fix Riot->Element in permalinkPrefix docs
+ [\#16227](https://github.com/vector-im/element-web/pull/16227)
+ * Supply server_name for optional federation-capable Jitsi auth
+ [\#16215](https://github.com/vector-im/element-web/pull/16215)
+ * Fix Widget API version confusion
+ [\#16212](https://github.com/vector-im/element-web/pull/16212)
+ * Add Hebrew language
+ [\#16210](https://github.com/vector-im/element-web/pull/16210)
+ * Update widget-api to beta 11
+ [\#16177](https://github.com/vector-im/element-web/pull/16177)
+ * Fix develop Docker builds
+ [\#16192](https://github.com/vector-im/element-web/pull/16192)
+ * Skip the service worker for Electron
+ [\#16157](https://github.com/vector-im/element-web/pull/16157)
+ * Use isolated IPC API
+ [\#16137](https://github.com/vector-im/element-web/pull/16137)
+
+Changes in [1.7.18](https://github.com/vector-im/element-web/releases/tag/v1.7.18) (2021-01-26)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.17...v1.7.18)
+
+ * Upgrade to React SDK 3.12.1 and JS SDK 9.5.1
+
+Changes in [1.7.17](https://github.com/vector-im/element-web/releases/tag/v1.7.17) (2021-01-18)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.17-rc.1...v1.7.17)
+
+ * Upgrade to React SDK 3.12.0 and JS SDK 9.5.0
+
+Changes in [1.7.17-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.17-rc.1) (2021-01-13)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.16...v1.7.17-rc.1)
+
+ * Upgrade to React SDK 3.12.0-rc.1 and JS SDK 9.5.0-rc.1
+ * Translations update from Weblate
+ [\#16131](https://github.com/vector-im/element-web/pull/16131)
+ * webplatform: Fix notification closing
+ [\#16028](https://github.com/vector-im/element-web/pull/16028)
+ * Stop building code and types for Element layer
+ [\#15999](https://github.com/vector-im/element-web/pull/15999)
+
+Changes in [1.7.16](https://github.com/vector-im/element-web/releases/tag/v1.7.16) (2020-12-21)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.16-rc.1...v1.7.16)
+
+ * Upgrade to React SDK 3.11.1 and JS SDK 9.4.1
+
+Changes in [1.7.16-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.16-rc.1) (2020-12-16)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.15...v1.7.16-rc.1)
+
+ * Upgrade to React SDK 3.11.0-rc.2 and JS SDK 9.4.0-rc.2
+ * Translations update from Weblate
+ [\#15979](https://github.com/vector-im/element-web/pull/15979)
+ * Bump ini from 1.3.5 to 1.3.7
+ [\#15949](https://github.com/vector-im/element-web/pull/15949)
+ * Document pull request previews
+ [\#15937](https://github.com/vector-im/element-web/pull/15937)
+ * Improve asset path for KaTeX fonts
+ [\#15939](https://github.com/vector-im/element-web/pull/15939)
+ * Fix an important semicolon
+ [\#15912](https://github.com/vector-im/element-web/pull/15912)
+ * Bump highlight.js from 10.1.2 to 10.4.1
+ [\#15898](https://github.com/vector-im/element-web/pull/15898)
+ * Add gitter.im to room directory
+ [\#15894](https://github.com/vector-im/element-web/pull/15894)
+ * Extend Platform to support idpId for SSO flows
+ [\#15771](https://github.com/vector-im/element-web/pull/15771)
+ * Include KaTeX CSS as a dependency
+ [\#15843](https://github.com/vector-im/element-web/pull/15843)
+
+Changes in [1.7.15](https://github.com/vector-im/element-web/releases/tag/v1.7.15) (2020-12-07)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.15-rc.1...v1.7.15)
+
+ * Upgrade to React SDK 3.10.0 and JS SDK 9.3.0
+
+Changes in [1.7.15-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.15-rc.1) (2020-12-02)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.14...v1.7.15-rc.1)
+
+ * Upgrade to React SDK 3.10.0-rc.1 and JS SDK 9.3.0-rc.1
+ * Include KaTeX CSS as a dependency
+ [\#15843](https://github.com/vector-im/element-web/pull/15843)
+ * Translations update from Weblate
+ [\#15884](https://github.com/vector-im/element-web/pull/15884)
+ * added katex.min.css to webpack for math support (main PR in matrix-react-
+ sdk)
+ [\#15277](https://github.com/vector-im/element-web/pull/15277)
+ * Rebrand package name and other details
+ [\#15828](https://github.com/vector-im/element-web/pull/15828)
+ * Bump highlight.js from 9.18.1 to 10.1.2
+ [\#15819](https://github.com/vector-im/element-web/pull/15819)
+ * Update branding of packaging artifacts
+ [\#15810](https://github.com/vector-im/element-web/pull/15810)
+ * Update the react-sdk reference in the lockfile
+ [\#15814](https://github.com/vector-im/element-web/pull/15814)
+ * Update widget API for good measure in Element Web
+ [\#15812](https://github.com/vector-im/element-web/pull/15812)
+ * Stop publishing Element to NPM
+ [\#15811](https://github.com/vector-im/element-web/pull/15811)
+ * Add inotify instance limit info to README
+ [\#15795](https://github.com/vector-im/element-web/pull/15795)
+
+Changes in [1.7.14](https://github.com/vector-im/element-web/releases/tag/v1.7.14) (2020-11-23)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.14-rc.1...v1.7.14)
+
+ * Upgrade to React SDK 3.9.0 and JS SDK 9.2.0
+
+Changes in [1.7.14-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.14-rc.1) (2020-11-18)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.13...v1.7.14-rc.1)
+
+ * Upgrade to React SDK 3.9.0-rc.1 and JS SDK 9.2.0-rc.1
+ * Translations update from Weblate
+ [\#15767](https://github.com/vector-im/element-web/pull/15767)
+ * Update the widget-api for element-web
+ [\#15717](https://github.com/vector-im/element-web/pull/15717)
+
+Changes in [1.7.13](https://github.com/vector-im/element-web/releases/tag/v1.7.13) (2020-11-09)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.13-rc.1...v1.7.13)
+
+ * Upgrade to React SDK 3.8.0 and JS SDK 9.1.0
+
+Changes in [1.7.13-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.13-rc.1) (2020-11-04)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.12...v1.7.13-rc.1)
+
+ * Upgrade to React SDK 3.8.0-rc.1 and JS SDK 9.1.0-rc.1
+ * Translations update from Weblate
+ [\#15644](https://github.com/vector-im/element-web/pull/15644)
+ * Add countly experiment to develop/nightly configs
+ [\#15614](https://github.com/vector-im/element-web/pull/15614)
+ * Add documentation for new UIFeature flag regarding room history settings
+ [\#15592](https://github.com/vector-im/element-web/pull/15592)
+ * Rename Docker repo in docs
+ [\#15590](https://github.com/vector-im/element-web/pull/15590)
+ * Fix Jitsi regressions with custom themes
+ [\#15575](https://github.com/vector-im/element-web/pull/15575)
+
+Changes in [1.7.12](https://github.com/vector-im/element-web/releases/tag/v1.7.12) (2020-10-28)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.11...v1.7.12)
+
+ * Upgrade to React SDK 3.7.1 and JS SDK 9.0.1
+ * [Release] Fix Jitsi regressions with custom themes
+ [\#15577](https://github.com/vector-im/element-web/pull/15577)
+
+Changes in [1.7.11](https://github.com/vector-im/element-web/releases/tag/v1.7.11) (2020-10-26)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.11-rc.1...v1.7.11)
+
+ * Upgrade to React SDK 3.7.0 and JS SDK 9.0.0
+
+Changes in [1.7.11-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.11-rc.1) (2020-10-21)
+=========================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.10...v1.7.11-rc.1)
+
+ * Upgrade to React SDK 3.7.0-rc.2 and JS SDK 9.0.0-rc.1
+ * Update Weblate URL
+ [\#15516](https://github.com/vector-im/element-web/pull/15516)
+ * Translations update from Weblate
+ [\#15517](https://github.com/vector-im/element-web/pull/15517)
+ * Jitsi accept theme variable and restyle
+ [\#15499](https://github.com/vector-im/element-web/pull/15499)
+ * Skip editor confirmation of upgrades
+ [\#15506](https://github.com/vector-im/element-web/pull/15506)
+ * Adjust for new widget messaging APIs
+ [\#15495](https://github.com/vector-im/element-web/pull/15495)
+ * Use HTTPS_PROXY environment variable for downloading external_api.min…
+ [\#15479](https://github.com/vector-im/element-web/pull/15479)
+ * Document customisation points
+ [\#15475](https://github.com/vector-im/element-web/pull/15475)
+ * Don't fatally end the Jitsi widget when it's not being used as a widget
+ [\#15466](https://github.com/vector-im/element-web/pull/15466)
+ * electron-platform: Pass the user/devce id pair when initializing the event
+ index.
+ [\#15455](https://github.com/vector-im/element-web/pull/15455)
+
+Changes in [1.7.10](https://github.com/vector-im/element-web/releases/tag/v1.7.10) (2020-10-20)
+===============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.9...v1.7.10)
+
+ * [Release] Adjust for new widget messaging APIs
+ [\#15497](https://github.com/vector-im/element-web/pull/15497)
+ * Upgrade to React SDK 3.6.1
+
+Changes in [1.7.9](https://github.com/vector-im/element-web/releases/tag/v1.7.9) (2020-10-12)
+=============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.9-rc.1...v1.7.9)
+
+ * Upgrade to React SDK 3.6.0 and JS SDK 8.5.0
+
+Changes in [1.7.9-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.9-rc.1) (2020-10-07)
+=======================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.8...v1.7.9-rc.1)
+
+ * Upgrade to React SDK 3.6.0-rc.1 and JS SDK 8.5.0-rc.1
+ * Update from Weblate
+ [\#15406](https://github.com/vector-im/element-web/pull/15406)
+ * Update Jest and JSDOM
+ [\#15402](https://github.com/vector-im/element-web/pull/15402)
+ * Add support for dehydration/fallback keys
+ [\#15398](https://github.com/vector-im/element-web/pull/15398)
+ * Remove riot-bot from sample config
+ [\#15376](https://github.com/vector-im/element-web/pull/15376)
+ * Switch to using the Widget API SDK for Jitsi widgets
+ [\#15102](https://github.com/vector-im/element-web/pull/15102)
+ * Remove workbox
+ [\#15352](https://github.com/vector-im/element-web/pull/15352)
+ * Disable workbox when running in webpack dev server, not in dev mode
+ [\#15345](https://github.com/vector-im/element-web/pull/15345)
+ * Update Riot -> Element in contribute.json
+ [\#15326](https://github.com/vector-im/element-web/pull/15326)
+ * Update Riot -> Element in redeploy.py
+ [\#15336](https://github.com/vector-im/element-web/pull/15336)
+ * Update Riot -> Element in docs/feature-flags.md
+ [\#15325](https://github.com/vector-im/element-web/pull/15325)
+ * Update Riot -> Element in element.io/README.md
+ [\#15327](https://github.com/vector-im/element-web/pull/15327)
+ * Update Riot -> Element in VectorAuthFooter
+ [\#15328](https://github.com/vector-im/element-web/pull/15328)
+ * Update Riot -> Element in VectorEmbeddedPage
+ [\#15329](https://github.com/vector-im/element-web/pull/15329)
+ * Update Riot -> Element in docs/review.md
+ [\#15330](https://github.com/vector-im/element-web/pull/15330)
+ * Update Riot -> Element in welcome.html
+ [\#15332](https://github.com/vector-im/element-web/pull/15332)
+ * Update Riot -> Element in issues-burndown.pl
+ [\#15333](https://github.com/vector-im/element-web/pull/15333)
+ * Update Riot -> Element in redeploy.py
+ [\#15334](https://github.com/vector-im/element-web/pull/15334)
+ * Update Riot -> Element in index.ts
+ [\#15335](https://github.com/vector-im/element-web/pull/15335)
+ * Update Riot -> Element Web in issue templates
+ [\#15324](https://github.com/vector-im/element-web/pull/15324)
+ * Give the Jitsi widget an icon to help with discovery
+ [\#15316](https://github.com/vector-im/element-web/pull/15316)
+ * Jitsi widget wrapper updates for hangup button
+ [\#15219](https://github.com/vector-im/element-web/pull/15219)
+ * Tidy up Service Worker, only run Workbox in production
+ [\#15271](https://github.com/vector-im/element-web/pull/15271)
+ * Remove conference handler
+ [\#15274](https://github.com/vector-im/element-web/pull/15274)
+ * Rebrand the webpack pipeline for Element
+ [\#15266](https://github.com/vector-im/element-web/pull/15266)
+ * Replace dummy sw.js with pre-caching and runtime-caching workbox SW
+ [\#15196](https://github.com/vector-im/element-web/pull/15196)
+
+Changes in [1.7.8](https://github.com/vector-im/element-web/releases/tag/v1.7.8) (2020-09-28)
+=============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.8-rc.1...v1.7.8)
+
+ * Upgrade to React SDK 3.5.0 and JS SDK 8.4.1
+
+Changes in [1.7.8-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.8-rc.1) (2020-09-23)
+=======================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.7...v1.7.8-rc.1)
+
+ * Upgrade to React SDK 3.5.0-rc.1 and JS SDK 8.4.0-rc.1
+ * Update from Weblate
+ [\#15262](https://github.com/vector-im/element-web/pull/15262)
+ * Upgrade sanitize-html
+ [\#15260](https://github.com/vector-im/element-web/pull/15260)
+ * Document config for preferring Secure Backup setup methods
+ [\#15251](https://github.com/vector-im/element-web/pull/15251)
+ * Add end-user documentation for UI features
+ [\#15190](https://github.com/vector-im/element-web/pull/15190)
+ * Update git checkout instructions
+ [\#15218](https://github.com/vector-im/element-web/pull/15218)
+ * If no bug_report_endpoint_url, hide rageshaking from the App
+ [\#15201](https://github.com/vector-im/element-web/pull/15201)
+ * Bump node-fetch from 2.6.0 to 2.6.1
+ [\#15153](https://github.com/vector-im/element-web/pull/15153)
+ * Remove references to Travis CI
+ [\#15137](https://github.com/vector-im/element-web/pull/15137)
+ * Fix onNewScreen to use replace when going from roomId->roomAlias
+ [\#15127](https://github.com/vector-im/element-web/pull/15127)
+ * Enable Estonian in language menu
+ [\#15136](https://github.com/vector-im/element-web/pull/15136)
+
+Changes in [1.7.7](https://github.com/vector-im/element-web/releases/tag/v1.7.7) (2020-09-14)
+=============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.6...v1.7.7)
+
+ * Upgrade to React SDK 3.4.1
+
+Changes in [1.7.6](https://github.com/vector-im/element-web/releases/tag/v1.7.6) (2020-09-14)
+=============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.6-rc.1...v1.7.6)
+
+ * Upgrade to React SDK 3.4.0 and JS SDK 8.3.0
+
+Changes in [1.7.6-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.6-rc.1) (2020-09-09)
+=======================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.5...v1.7.6-rc.1)
+
+ * Upgrade to React SDK 3.4.0-rc.1 and JS SDK 8.3.0-rc.1
+ * Update from Weblate
+ [\#15125](https://github.com/vector-im/element-web/pull/15125)
+ * Support usage of Jitsi widgets with "openidtoken-jwt" auth
+ [\#15114](https://github.com/vector-im/element-web/pull/15114)
+ * Fix eslint ts override tsx matching and delint
+ [\#15064](https://github.com/vector-im/element-web/pull/15064)
+ * Add testing to review guidelines
+ [\#15050](https://github.com/vector-im/element-web/pull/15050)
+
+Changes in [1.7.5](https://github.com/vector-im/element-web/releases/tag/v1.7.5) (2020-09-01)
+=============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.5-rc.1...v1.7.5)
+
+## Security notice
+
+Element Web 1.7.5 fixes an issue where encrypted state events could break incoming call handling.
+Thanks to @awesome-michael from Awesome Technologies for responsibly disclosing this via Matrix's
+Security Disclosure Policy.
+
+## All changes
+
+ * Upgrade to React SDK 3.3.0 and JS SDK 8.2.0
+
+Changes in [1.7.5-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.5-rc.1) (2020-08-26)
+=======================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.4...v1.7.5-rc.1)
+
+ * Upgrade to React SDK 3.3.0-rc.1 and JS SDK 8.2.0-rc.1
+ * Update from Weblate
+ [\#15045](https://github.com/vector-im/element-web/pull/15045)
+ * Document .well-known E2EE secure backup setting
+ [\#15003](https://github.com/vector-im/element-web/pull/15003)
+ * Add docs for communities v2 prototyping feature flag
+ [\#15013](https://github.com/vector-im/element-web/pull/15013)
+ * Update links in README.md to point to Element
+ [\#14973](https://github.com/vector-im/element-web/pull/14973)
+ * Make kabyle translation available
+ [\#15027](https://github.com/vector-im/element-web/pull/15027)
+ * Change Riot to Element in readme
+ [\#15016](https://github.com/vector-im/element-web/pull/15016)
+ * Update links to element in the readme
+ [\#15014](https://github.com/vector-im/element-web/pull/15014)
+ * Link to Element in F-Droid as well
+ [\#15002](https://github.com/vector-im/element-web/pull/15002)
+ * Settings v3: Update documentation and configs for new feature flag behaviour
+ [\#14986](https://github.com/vector-im/element-web/pull/14986)
+ * Update jitsi.md with Element Android details
+ [\#14952](https://github.com/vector-im/element-web/pull/14952)
+ * TypeScript: enable es2019 lib for newer definitions
+ [\#14983](https://github.com/vector-im/element-web/pull/14983)
+ * Add reaction preview labs flags to develop
+ [\#14979](https://github.com/vector-im/element-web/pull/14979)
+ * Document new labs tweaks
+ [\#14958](https://github.com/vector-im/element-web/pull/14958)
+
+Changes in [1.7.4](https://github.com/vector-im/element-web/releases/tag/v1.7.4) (2020-08-17)
+=============================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.4-rc.1...v1.7.4)
+
+ * Upgrade to React SDK 3.2.0 and JS SDK 8.1.0
+
+Changes in [1.7.4-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.7.4-rc.1) (2020-08-13)
+=======================================================================================================
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.3...v1.7.4-rc.1)
+
+ * Upgrade to React SDK 3.2.0-rc.1 and JS SDK 8.1.0-rc.1
+ * Update policy links to element.io
+ [\#14905](https://github.com/vector-im/element-web/pull/14905)
+ * Update from Weblate
+ [\#14949](https://github.com/vector-im/element-web/pull/14949)
+ * Try to close notification on all platforms which support it, not just
+ electron
+ [\#14939](https://github.com/vector-im/element-web/pull/14939)
+ * Update bug report submission URL
+ [\#14903](https://github.com/vector-im/element-web/pull/14903)
+ * Fix arm docker build
+ [\#14522](https://github.com/vector-im/element-web/pull/14522)
+
+Changes in [1.7.3](https://github.com/vector-im/element-web/releases/tag/v1.7.3) (2020-08-05)
+=============================================================================================
+
+## Security notice
+
+Element Web 1.7.3 (as well as the earlier release 1.7.2) fixes an issue where
+replying to a specially formatted message would make it seem like the replier
+said something they did not. Thanks to Sorunome for responsibly disclosing this
+via Matrix's Security Disclosure Policy.
+
+Element Web 1.7.3 (as well as the earlier release 1.7.2) fixes an issue where an
+unexpected language ID in a code block could cause Element to crash. Thanks to
+SakiiR for responsibly disclosing this via Matrix's Security Disclosure Policy.
+
+## All changes
+
+[Full Changelog](https://github.com/vector-im/element-web/compare/v1.7.3-rc.1...v1.7.3)
+
+ * Upgrade to React SDK 3.1.0 and JS SDK 8.0.1
+
+Changes in [1.7.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.7.3-rc.1) (2020-07-31)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.7.2...v1.7.3-rc.1)
+
+ * Upgrade to React SDK 3.1.0-rc.1 and JS SDK 8.0.1-rc.1
+ * Make Lojban translation available
+ [\#14703](https://github.com/vector-im/riot-web/pull/14703)
+ * Update from Weblate
+ [\#14841](https://github.com/vector-im/riot-web/pull/14841)
+ * Remove redundant lint dependencies
+ [\#14810](https://github.com/vector-im/riot-web/pull/14810)
+ * Bump elliptic from 6.5.2 to 6.5.3
+ [\#14826](https://github.com/vector-im/riot-web/pull/14826)
+ * Update mobile config intercept URL
+ [\#14796](https://github.com/vector-im/riot-web/pull/14796)
+ * Fix typo in https://
+ [\#14791](https://github.com/vector-im/riot-web/pull/14791)
+
+Changes in [1.7.2](https://github.com/vector-im/riot-web/releases/tag/v1.7.2) (2020-07-27)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.7.1...v1.7.2)
+
+ * Upgrade to React SDK 3.0.0 and JS SDK 8.0.0
+ * Update from Weblate
+ [\#14778](https://github.com/vector-im/riot-web/pull/14778)
+ * Capitalize letters
+ [\#14566](https://github.com/vector-im/riot-web/pull/14566)
+ * Configure eslint package and fix lint issues
+ [\#14673](https://github.com/vector-im/riot-web/pull/14673)
+ * Riot → Element
+ [\#14581](https://github.com/vector-im/riot-web/pull/14581)
+ * Remove labs info for the new room list
+ [\#14603](https://github.com/vector-im/riot-web/pull/14603)
+ * Convince Webpack to use development on CI
+ [\#14593](https://github.com/vector-im/riot-web/pull/14593)
+ * Move dev dep to the right place
+ [\#14572](https://github.com/vector-im/riot-web/pull/14572)
+ * Bump lodash from 4.17.15 to 4.17.19
+ [\#14552](https://github.com/vector-im/riot-web/pull/14552)
+ * Update all mobile links to match marketing site
+ [\#14541](https://github.com/vector-im/riot-web/pull/14541)
+
+Changes in [1.7.1](https://github.com/vector-im/riot-web/releases/tag/v1.7.1) (2020-07-16)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.7.0...v1.7.1)
+
+ * Upgrade to React SDK 2.10.1
+ * Fix SSO session ID paramater
+ [\#14544](https://github.com/vector-im/riot-web/pull/14544)
+ * Run pngcrush on vector-icons
+ [\#14488](https://github.com/vector-im/riot-web/pull/14488)
+ * Fix hosting signup link
+ [\#14502](https://github.com/vector-im/riot-web/pull/14502)
+ * Use the right protocol for SSO URLs
+ [\#14513](https://github.com/vector-im/riot-web/pull/14513)
+ * Fix mstile-310x150 by renaming it
+ [\#14485](https://github.com/vector-im/riot-web/pull/14485)
+ * Update blog and twitter links to point to Element
+ [\#14478](https://github.com/vector-im/riot-web/pull/14478)
+
+Changes in [1.7.0](https://github.com/vector-im/riot-web/releases/tag/v1.7.0) (2020-07-15)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.8...v1.7.0)
+
+ * App name changed from Riot to Element
+ * Upgrade to React SDK 2.10.0
+ * Remove redundant enum
+ [\#14472](https://github.com/vector-im/riot-web/pull/14472)
+ * Remove font scaling from labs
+ [\#14355](https://github.com/vector-im/riot-web/pull/14355)
+ * Update documentation and remove labs flag for new room list
+ [\#14375](https://github.com/vector-im/riot-web/pull/14375)
+ * Update from Weblate
+ [\#14434](https://github.com/vector-im/riot-web/pull/14434)
+ * Release the irc layout from labs
+ [\#14350](https://github.com/vector-im/riot-web/pull/14350)
+ * Fix welcomeBackgroundUrl array causing background to change during use
+ [\#14368](https://github.com/vector-im/riot-web/pull/14368)
+ * Be more explicit about type when calling platform startUpdater
+ [\#14299](https://github.com/vector-im/riot-web/pull/14299)
+
+Changes in [1.6.8](https://github.com/vector-im/riot-web/releases/tag/v1.6.8) (2020-07-03)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.8-rc.1...v1.6.8)
+
+ * Upgrade to JS SDK 7.1.0 and React SDK 2.9.0
+
+Changes in [1.6.8-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.8-rc.1) (2020-07-01)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.7...v1.6.8-rc.1)
+
+ * Upgrade to JS SDK 7.1.0-rc.1 and React SDK 2.9.0-rc.1
+ * Update from Weblate
+ [\#14282](https://github.com/vector-im/riot-web/pull/14282)
+ * Show a download completed toast in electron
+ [\#14248](https://github.com/vector-im/riot-web/pull/14248)
+ * Add the new spinner feature labs flag
+ [\#14213](https://github.com/vector-im/riot-web/pull/14213)
+ * Fix loading-test for SSO plaf changes
+ [\#14212](https://github.com/vector-im/riot-web/pull/14212)
+ * Fix spelling on startup error page
+ [\#14199](https://github.com/vector-im/riot-web/pull/14199)
+ * Document fonts in custom theme
+ [\#14175](https://github.com/vector-im/riot-web/pull/14175)
+ * Update from Weblate
+ [\#14129](https://github.com/vector-im/riot-web/pull/14129)
+ * ElectronPlatform: Implement the isRoomIndexed method.
+ [\#13957](https://github.com/vector-im/riot-web/pull/13957)
+ * ElectronPlatform: Add support to set and get the index user version.
+ [\#14080](https://github.com/vector-im/riot-web/pull/14080)
+ * Mark the new room list as ready for general testing
+ [\#14102](https://github.com/vector-im/riot-web/pull/14102)
+
+Changes in [1.6.7](https://github.com/vector-im/riot-web/releases/tag/v1.6.7) (2020-06-29)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.6...v1.6.7)
+
+ * Upgrade to React SDK 2.8.1
+
+Changes in [1.6.6](https://github.com/vector-im/riot-web/releases/tag/v1.6.6) (2020-06-23)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.6-rc.1...v1.6.6)
+
+ * Upgrade to JS SDK 7.0.0 and React SDK 2.8.0
+
+Changes in [1.6.6-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.6-rc.1) (2020-06-17)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.5...v1.6.6-rc.1)
+
+ * Upgrade to JS SDK 7.0.0-rc.1 and React SDK 2.8.0-rc.1
+ * Update from Weblate
+ [\#14067](https://github.com/vector-im/riot-web/pull/14067)
+ * Update from Weblate
+ [\#14032](https://github.com/vector-im/riot-web/pull/14032)
+ * Attempt to fix decoder ring for relative hosted riots
+ [\#13987](https://github.com/vector-im/riot-web/pull/13987)
+ * Upgrade deps
+ [\#13952](https://github.com/vector-im/riot-web/pull/13952)
+ * Fix riot-desktop manual update check getting stuck on Downloading...
+ [\#13946](https://github.com/vector-im/riot-web/pull/13946)
+ * Bump websocket-extensions from 0.1.3 to 0.1.4
+ [\#13943](https://github.com/vector-im/riot-web/pull/13943)
+ * Add e2ee-default:false docs
+ [\#13914](https://github.com/vector-im/riot-web/pull/13914)
+ * make IPC calls to get pickle key
+ [\#13846](https://github.com/vector-im/riot-web/pull/13846)
+ * fix loading test for new sso pattern
+ [\#13913](https://github.com/vector-im/riot-web/pull/13913)
+ * Fix login loop where the sso flow returns to `#/login`
+ [\#13889](https://github.com/vector-im/riot-web/pull/13889)
+ * Fix typo in docs
+ [\#13905](https://github.com/vector-im/riot-web/pull/13905)
+ * Remove cross-signing from labs
+ [\#13904](https://github.com/vector-im/riot-web/pull/13904)
+ * Add PWA Platform with PWA-specific badge controls
+ [\#13890](https://github.com/vector-im/riot-web/pull/13890)
+ * Modernizr check for subtle crypto as we require it all over the place
+ [\#13828](https://github.com/vector-im/riot-web/pull/13828)
+
+Changes in [1.6.5](https://github.com/vector-im/riot-web/releases/tag/v1.6.5) (2020-06-16)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.4...v1.6.5)
+
+* Upgrade to JS SDK 6.2.2 and React SDK 2.7.2
+
+Changes in [1.6.4](https://github.com/vector-im/riot-web/releases/tag/v1.6.4) (2020-06-05)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.3...v1.6.4)
+
+* Upgrade to JS SDK 6.2.1 and React SDK 2.7.1
+
+Changes in [1.6.3](https://github.com/vector-im/riot-web/releases/tag/v1.6.3) (2020-06-04)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.3-rc.1...v1.6.3)
+
+## Security notice
+
+Riot Web 1.6.3 fixes a vulnerability in single sign-on (SSO) deployments where Riot Web could be confused into sending authentication details to an attacker-controlled server. Thanks to Quentin Gliech for responsibly disclosing this via Matrix's Security Disclosure Policy.
+
+## All changes
+
+ * Fix login loop where the sso flow returns to `#/login` to release
+ [\#13915](https://github.com/vector-im/riot-web/pull/13915)
+
+Changes in [1.6.3-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.3-rc.1) (2020-06-02)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.2...v1.6.3-rc.1)
+
+ * Upgrade to JS SDK 6.2.0-rc.1 and React SDK 2.7.0-rc.2
+ * Get rid of welcome.html's Chat with Riot Bot button
+ [\#13842](https://github.com/vector-im/riot-web/pull/13842)
+ * Update from Weblate
+ [\#13886](https://github.com/vector-im/riot-web/pull/13886)
+ * Allow deferring of Update Toast until the next morning
+ [\#13864](https://github.com/vector-im/riot-web/pull/13864)
+ * Give contextual feedback for manual update check instead of banner
+ [\#13862](https://github.com/vector-im/riot-web/pull/13862)
+ * Add app-load doc
+ [\#13834](https://github.com/vector-im/riot-web/pull/13834)
+ * Update Modular hosting link
+ [\#13777](https://github.com/vector-im/riot-web/pull/13777)
+ * Replace New Version Bar with a Toast
+ [\#13776](https://github.com/vector-im/riot-web/pull/13776)
+ * Remove webpack-build-notifier from lockfile
+ [\#13814](https://github.com/vector-im/riot-web/pull/13814)
+ * Add media queries and mobile viewport (#12142)
+ [\#13818](https://github.com/vector-im/riot-web/pull/13818)
+ * Fix @types/react conflict in matrix-react-sdk
+ [\#13809](https://github.com/vector-im/riot-web/pull/13809)
+ * Fix manual update checking, super in arrow funcs doesn't work
+ [\#13808](https://github.com/vector-im/riot-web/pull/13808)
+ * Update from Weblate
+ [\#13806](https://github.com/vector-im/riot-web/pull/13806)
+ * Convert platforms to Typescript
+ [\#13756](https://github.com/vector-im/riot-web/pull/13756)
+ * Fix EventEmitter typescript signature in node typings
+ [\#13764](https://github.com/vector-im/riot-web/pull/13764)
+ * Add docs and labs flag for new room list implementation
+ [\#13675](https://github.com/vector-im/riot-web/pull/13675)
+ * Add font scaling labs setting.
+ [\#13352](https://github.com/vector-im/riot-web/pull/13352)
+ * Add labs flag for alternate message layouts
+ [\#13350](https://github.com/vector-im/riot-web/pull/13350)
+ * Move dispatcher references in support of TypeScript conversion
+ [\#13666](https://github.com/vector-im/riot-web/pull/13666)
+ * Update from Weblate
+ [\#13704](https://github.com/vector-im/riot-web/pull/13704)
+ * Replace favico.js dependency with simplified variant grown from it
+ [\#13649](https://github.com/vector-im/riot-web/pull/13649)
+ * Remove Electron packaging scripts
+ [\#13688](https://github.com/vector-im/riot-web/pull/13688)
+ * Fix postcss order to allow mixin variables to work
+ [\#13674](https://github.com/vector-im/riot-web/pull/13674)
+ * Pass screenAfterLogin through SSO in the callback url
+ [\#13650](https://github.com/vector-im/riot-web/pull/13650)
+
+Changes in [1.6.2](https://github.com/vector-im/riot-web/releases/tag/v1.6.2) (2020-05-22)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.1...v1.6.2)
+
+ * Upgrade to React SDK 2.6.1
+
+Changes in [1.6.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.1) (2020-05-19)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.1-rc.1...v1.6.1)
+
+ * Upgrade to React SDK 2.6.0 and JS SDK 6.1.0
+
+Changes in [1.6.1-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.1-rc.1) (2020-05-14)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0...v1.6.1-rc.1)
+
+ * Upgrade to React SDK 2.6.0-rc.1 and JS SDK 6.1.0-rc.1
+ * Update from Weblate
+ [\#13673](https://github.com/vector-im/riot-web/pull/13673)
+ * Add notranslate class to matrixchat to prevent translation by Google
+ Translate
+ [\#13669](https://github.com/vector-im/riot-web/pull/13669)
+ * Added Anchor Link to the development of matrix sdk
+ [\#13638](https://github.com/vector-im/riot-web/pull/13638)
+ * Prefetch the formatting button mask svg images
+ [\#13631](https://github.com/vector-im/riot-web/pull/13631)
+ * use a different image in previews
+ [\#13488](https://github.com/vector-im/riot-web/pull/13488)
+ * Update from Weblate
+ [\#13625](https://github.com/vector-im/riot-web/pull/13625)
+ * Remove electron_app as we now have riot-desktop repo
+ [\#13544](https://github.com/vector-im/riot-web/pull/13544)
+ * add new images for PWA icons
+ [\#13556](https://github.com/vector-im/riot-web/pull/13556)
+ * Remove unused feature flag from config
+ [\#13504](https://github.com/vector-im/riot-web/pull/13504)
+ * Update from Weblate
+ [\#13486](https://github.com/vector-im/riot-web/pull/13486)
+ * Developer tool: convert rageshake error locations back to sourcecode
+ locations
+ [\#13357](https://github.com/vector-im/riot-web/pull/13357)
+ * App load tweaks, improve error pages
+ [\#13329](https://github.com/vector-im/riot-web/pull/13329)
+ * Tweak default device name to be more compact
+ [\#13465](https://github.com/vector-im/riot-web/pull/13465)
+ * Tweak default device name on macOS
+ [\#13460](https://github.com/vector-im/riot-web/pull/13460)
+ * Update docs with custom theming changes
+ [\#13406](https://github.com/vector-im/riot-web/pull/13406)
+ * Update from Weblate
+ [\#13395](https://github.com/vector-im/riot-web/pull/13395)
+ * Remove docs and config for invite only padlocks
+ [\#13374](https://github.com/vector-im/riot-web/pull/13374)
+ * Revert "Add font scaling labs setting."
+ [\#13351](https://github.com/vector-im/riot-web/pull/13351)
+ * Expand feature flag docs to cover additional release channels
+ [\#13341](https://github.com/vector-im/riot-web/pull/13341)
+ * Optimized image assets by recompressing without affecting quality.
+ [\#13034](https://github.com/vector-im/riot-web/pull/13034)
+ * Add font scaling labs setting.
+ [\#13199](https://github.com/vector-im/riot-web/pull/13199)
+ * Remove encrypted message search feature flag
+ [\#13325](https://github.com/vector-im/riot-web/pull/13325)
+ * Fix `default_federate` settting description
+ [\#13312](https://github.com/vector-im/riot-web/pull/13312)
+ * Clarify that the .well-known method for Jitsi isn't available yet
+ [\#13314](https://github.com/vector-im/riot-web/pull/13314)
+ * add config option to tsc resolveJsonModule
+ [\#13296](https://github.com/vector-im/riot-web/pull/13296)
+ * Fix dispatcher import to be extension agnostic
+ [\#13297](https://github.com/vector-im/riot-web/pull/13297)
+ * Document more config options in config.md (fixes #13089)
+ [\#13260](https://github.com/vector-im/riot-web/pull/13260)
+ * Fix tests post-js-sdk-filters change
+ [\#13295](https://github.com/vector-im/riot-web/pull/13295)
+ * Make Jitsi download script a JS script
+ [\#13227](https://github.com/vector-im/riot-web/pull/13227)
+ * Use matrix-react-sdk type extensions as a base
+ [\#13271](https://github.com/vector-im/riot-web/pull/13271)
+ * Allow Riot Web to randomly pick welcome backgrounds
+ [\#13235](https://github.com/vector-im/riot-web/pull/13235)
+ * Update cross-signing feature docs and document fallback procedures
+ [\#13224](https://github.com/vector-im/riot-web/pull/13224)
+
+Changes in [1.6.0](https://github.com/vector-im/riot-web/releases/tag/v1.6.0) (2020-05-05)
+==========================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.6...v1.6.0)
+
+ * Cross-signing and E2EE by default for DMs and private rooms enabled
+ * Upgrade to React SDK 2.5.0 and JS SDK 6.0.0
+
+Changes in [1.6.0-rc.6](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.6) (2020-05-01)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.5...v1.6.0-rc.6)
+
+ * Upgrade to React SDK 2.5.0-rc.6 and JS SDK 6.0.0-rc.2
+
+Changes in [1.6.0-rc.5](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.5) (2020-04-30)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.4...v1.6.0-rc.5)
+
+ * Upgrade to React SDK 2.5.0-rc.5 and JS SDK 6.0.0-rc.1
+ * Remove feature flag docs from docs on release
+ [\#13375](https://github.com/vector-im/riot-web/pull/13375)
+
+Changes in [1.6.0-rc.4](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.4) (2020-04-23)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.3...v1.6.0-rc.4)
+
+ * Upgrade to React SDK 2.5.0-rc.4 and JS SDK 5.3.1-rc.4
+
+Changes in [1.6.0-rc.3](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.3) (2020-04-17)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.2...v1.6.0-rc.3)
+
+ * Upgrade to React SDK 2.5.0-rc.3 and JS SDK 5.3.1-rc.3
+
+Changes in [1.6.0-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.2) (2020-04-16)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.6.0-rc.1...v1.6.0-rc.2)
+
+ * Upgrade to React SDK 2.5.0-rc.2 and JS SDK 5.3.1-rc.2
+ * Enable cross-signing / E2EE by default for DM without config changes
+
+Changes in [1.6.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.6.0-rc.1) (2020-04-15)
+====================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.16-rc.1...v1.6.0-rc.1)
+
+ * Enable cross-signing / E2EE by default for DM on release
+ [\#13179](https://github.com/vector-im/riot-web/pull/13179)
+ * Upgrade to React SDK 2.5.0-rc.1 and JS SDK 5.3.1-rc.1
+ * Add instruction to resolve the inotify watch limit issue
+ [\#13128](https://github.com/vector-im/riot-web/pull/13128)
+ * docs: labs: add a pointer to config.md
+ [\#13149](https://github.com/vector-im/riot-web/pull/13149)
+ * Fix Electron SSO handling to support multiple profiles
+ [\#13028](https://github.com/vector-im/riot-web/pull/13028)
+ * Add riot-desktop shortcuts for forward/back matching browsers&slack
+ [\#13133](https://github.com/vector-im/riot-web/pull/13133)
+ * Allow rageshake to fail in init
+ [\#13164](https://github.com/vector-im/riot-web/pull/13164)
+ * Fix broken yarn install link in README.md
+ [\#13125](https://github.com/vector-im/riot-web/pull/13125)
+ * fix build:jitsi scripts crash caused by a missing folder
+ [\#13122](https://github.com/vector-im/riot-web/pull/13122)
+ * App load order changes to catch errors better
+ [\#13095](https://github.com/vector-im/riot-web/pull/13095)
+ * Upgrade deps
+ [\#13080](https://github.com/vector-im/riot-web/pull/13080)
+
+Changes in [1.5.16-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.16-rc.1) (2020-04-08)
+======================================================================================================
+[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.15...v1.5.16-rc.1)
+
+ * Upgrade React SDK to 2.4.0-rc.1 and JS SDK to 5.3.0-rc.1
+ * Update from Weblate
+ [\#13078](https://github.com/vector-im/riot-web/pull/13078)
+ * Mention Jitsi support at the .well-known level in Jitsi docs
+ [\#13047](https://github.com/vector-im/riot-web/pull/13047)
+ * Add new default home page fallback
+ [\#13049](https://github.com/vector-im/riot-web/pull/13049)
+ * App load order tweaks for code splitting
+ [\#13032](https://github.com/vector-im/riot-web/pull/13032)
+ * Add some docs about Jitsi widgets and Jitsi configuration
+ [\#13027](https://github.com/vector-im/riot-web/pull/13027)
+ * Bump minimist from 1.2.2 to 1.2.3 in /electron_app
+ [\#13030](https://github.com/vector-im/riot-web/pull/13030)
+ * Fix Electron mac-specific shortcut being registered on Web too.
+ [\#13020](https://github.com/vector-im/riot-web/pull/13020)
+ * Add a console warning that errors from Jitsi Meet are fine
+ [\#12968](https://github.com/vector-im/riot-web/pull/12968)
+ * Fix popout support for jitsi widgets
+ [\#12975](https://github.com/vector-im/riot-web/pull/12975)
+ * Some grammar and clarifications
+ [\#12925](https://github.com/vector-im/riot-web/pull/12925)
+ * Don't immediately remove notifications from notification trays
+ [\#12861](https://github.com/vector-im/riot-web/pull/12861)
+ * Remove welcome user from config
+ [\#12894](https://github.com/vector-im/riot-web/pull/12894)
+
Changes in [1.5.15](https://github.com/vector-im/riot-web/releases/tag/v1.5.15) (2020-04-01)
============================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.14...v1.5.15)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000000..3af9d3945b
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -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.
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
deleted file mode 100644
index f084b474bd..0000000000
--- a/CONTRIBUTING.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Contributing code to Riot
-=========================
-
-Riot follows the same pattern as https://github.com/matrix-org/matrix-js-sdk/blob/master/CONTRIBUTING.rst.
diff --git a/Dockerfile b/Dockerfile
index 8f584b8109..e62b867d38 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,8 +1,8 @@
# Builder
-FROM node:10 as builder
+FROM node:14-buster as builder
# Support custom branches of the react-sdk and js-sdk. This also helps us build
-# images of riot-web develop.
+# images of element-web develop.
ARG USE_CUSTOM_SDKS=false
ARG REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git"
ARG REACT_SDK_BRANCH="master"
@@ -34,4 +34,4 @@ COPY --from=builder /src/webapp /app
RUN sed -i '3i\ \ \ \ application/wasm wasm\;' /etc/nginx/mime.types
RUN rm -rf /usr/share/nginx/html \
- && ln -s /app /usr/share/nginx/html
+ && ln -s /app /usr/share/nginx/html
diff --git a/README.md b/README.md
index b506948c8a..8bf6ecd8cf 100644
--- a/README.md
+++ b/README.md
@@ -1,80 +1,122 @@
-Riot
-====
+Element
+=======
-Riot (formerly known as Vector) is a Matrix web client built using the [Matrix
+Element (formerly known as Vector and Riot) is a Matrix web client built using the [Matrix
React SDK](https://github.com/matrix-org/matrix-react-sdk).
Supported Environments
======================
-Riot has several tiers of support for different environments:
+Element has several tiers of support for different environments:
* Supported
* Definition: Issues **actively triaged**, regressions **block** the release
- * Last 2 major versions of Chrome, Firefox, and Safari on desktop OSes
- * Latest release of official Riot Desktop app on desktop OSes
+ * Last 2 major versions of Chrome, Firefox, Safari, and Edge on desktop OSes
+ * Latest release of official Element Desktop app on desktop OSes
* Desktop OSes means macOS, Windows, and Linux versions for desktop devices
that are actively supported by the OS vendor and receive security updates
* Experimental
* Definition: Issues **accepted**, regressions **do not block** the release
- * Riot as an installed PWA via current stable version of Chrome, Firefox, and Safari
+ * Element as an installed PWA via current stable version of Chrome, Firefox, and Safari
* Mobile web for current stable version of Chrome, Firefox, and Safari on Android, iOS, and iPadOS
* Not supported
* Definition: Issues only affecting unsupported environments are **closed**
* Everything else
-For accessing Riot on an Android or iOS device, we currently recommend the
-native apps [riot-android](https://github.com/vector-im/riot-android)
-and [riot-ios](https://github.com/vector-im/riot-ios).
+For accessing Element on an Android or iOS device, we currently recommend the
+native apps [element-android](https://github.com/vector-im/element-android)
+and [element-ios](https://github.com/vector-im/element-ios).
Getting Started
===============
-The easiest way to test Riot is to just use the hosted copy at https://riot.im/app.
-The `develop` branch is continuously deployed by Jenkins at https://riot.im/develop
+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
for those who like living dangerously.
-To host your own copy of Riot, the quickest bet is to use a pre-built
-released version of Riot:
+To host your own copy of Element, the quickest bet is to use a pre-built
+released version of Element:
-1. Download the latest version from https://github.com/vector-im/riot-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. Move (or symlink) the `riot-x.x.x` directory to an appropriate name
+1. Move (or symlink) the `element-x.x.x` directory to an appropriate name
1. Configure the correct caching headers in your webserver (see below)
1. If desired, copy `config.sample.json` to `config.json` and edit it
as desired. See the [configuration docs](docs/config.md) for details.
-1. Enter the URL into your browser and log into Riot!
+1. Enter the URL into your browser and log into Element!
Releases are signed using gpg and the OpenPGP standard, and can be checked against the public key located
-at https://packages.riot.im/riot-release-key.asc.
+at https://packages.riot.im/element-release-key.asc.
-Note that for the security of your chats will need to serve Riot
+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
chats over HTTP, as WebRTC is only usable over HTTPS.
There are some exceptions like when using localhost, which is
considered a [secure context](https://developer.mozilla.org/docs/Web/Security/Secure_Contexts)
and thus allowed.
-To install Riot as a desktop application, see [Running as a desktop
+To install Element as a desktop application, see [Running as a desktop
app](#running-as-a-desktop-app) below.
-Important Security Note
-=======================
+Important Security Notes
+========================
-We do not recommend running Riot from the same domain name as your Matrix
+Separate domains
+----------------
+
+We do not recommend running Element from the same domain name as your Matrix
homeserver. The reason is the risk of XSS (cross-site-scripting)
-vulnerabilities that could occur if someone caused Riot to load and render
+vulnerabilities that could occur if someone caused Element to load and render
malicious user generated content from a Matrix API which then had trusted
-access to Riot (or other apps) due to sharing the same domain.
+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
situation, but it's still not good practice to do it in the first place. See
-https://github.com/vector-im/riot-web/issues/1977 for more details.
+https://github.com/vector-im/element-web/issues/1977 for more details.
+
+Configuration best practices
+----------------------------
+
+Unless you have special requirements, you will want to add the following to
+your web server configuration when hosting Element Web:
+
+- The `X-Frame-Options: SAMEORIGIN` header, to prevent Element Web from being
+ framed and protect from [clickjacking][owasp-clickjacking].
+- The `frame-ancestors 'none'` directive to your `Content-Security-Policy`
+ header, as the modern replacement for `X-Frame-Options` (though both should be
+ included since not all browsers support it yet, see
+ [this][owasp-clickjacking-csp]).
+- The `X-Content-Type-Options: nosniff` header, to [disable MIME
+ sniffing][mime-sniffing].
+- The `X-XSS-Protection: 1; mode=block;` header, for basic XSS protection in
+ legacy browsers.
+
+[mime-sniffing]:
+
+
+[owasp-clickjacking-csp]:
+
+
+[owasp-clickjacking]:
+
+
+If you are using nginx, this would look something like the following:
+
+```
+add_header X-Frame-Options SAMEORIGIN;
+add_header X-Content-Type-Options nosniff;
+add_header X-XSS-Protection "1; mode=block";
+add_header Content-Security-Policy "frame-ancestors 'none'";
+```
+
+Note: In case you are already setting a `Content-Security-Policy` header
+elsewhere, you should modify it to include the `frame-ancestors` directive
+instead of adding that last line.
Building From Source
====================
-Riot is a modular webapp built with modern ES6 and uses a Node.js build system.
+Element is a modular webapp built with modern ES6 and uses a Node.js build system.
Ensure you have the latest LTS version of Node.js installed.
Using `yarn` instead of `npm` is recommended. Please see the Yarn [install
@@ -82,13 +124,13 @@ guide](https://classic.yarnpkg.com/en/docs/install) if you do not have it alread
1. Install or update `node.js` so that your `node` is at least v10.x.
1. Install `yarn` if not present already.
-1. Clone the repo: `git clone https://github.com/vector-im/riot-web.git`.
-1. Switch to the riot-web directory: `cd riot-web`.
+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. Install the prerequisites: `yarn install`.
* If you're using the `develop` branch, then it is recommended to set up a
proper development environment (see [Setting up a dev
environment](#setting-up-a-dev-environment) below). Alternatively, you
- can use https://riot.im/develop - the continuous integration release of
+ can use https://develop.element.io - the continuous integration release of
the develop branch.
1. Configure the app by copying `config.sample.json` to `config.json` and
modifying it. See the [configuration docs](docs/config.md) for details.
@@ -97,51 +139,19 @@ guide](https://classic.yarnpkg.com/en/docs/install) if you do not have it alread
web server.
Note that `yarn dist` is not supported on Windows, so Windows users can run `yarn build`,
-which will build all the necessary files into the `webapp` directory. The version of Riot
+which will build all the necessary files into the `webapp` directory. The version of Element
will not appear in Settings without using the dist script. You can then mount the
-`webapp` directory on your webserver to actually serve up the app, which is entirely static content.
+`webapp` directory on your web server to actually serve up the app, which is
+entirely static content.
Running as a Desktop app
========================
-Riot can also be run as a desktop app, wrapped in Electron. You can download a
-pre-built version from https://riot.im/download/desktop/ or, if you prefer,
+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,
build it yourself.
-To build it yourself, follow the instructions below.
-
-1. Follow the instructions in 'Building From Source' above, but run
- `yarn build` instead of `yarn dist` (since we don't need the tarball).
-2. Install Electron and run it:
-
- ```bash
- yarn electron
- ```
-
-To build packages, use `electron-builder`. This is configured to output:
- * `dmg` + `zip` for macOS
- * `exe` + `nupkg` for Windows
- * `deb` for Linux
-But this can be customised by editing the `build` section of package.json
-as per https://github.com/electron-userland/electron-builder/wiki/Options
-
-See https://github.com/electron-userland/electron-builder/wiki/Multi-Platform-Build
-for dependencies required for building packages for various platforms.
-
-The only platform that can build packages for all three platforms is macOS:
-```bash
-brew install mono
-yarn install
-yarn build:electron
-```
-
-For other packages, use `electron-builder` manually. For example, to build a
-package for 64 bit Linux:
-
- 1. Follow the instructions in 'Building From Source' above
- 2. `node_modules/.bin/build -l --x64`
-
-All Electron packages go into `electron_app/dist/`
+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.
@@ -150,7 +160,7 @@ Other options for running as a desktop app:
```bash
yarn global add nativefier
-nativefier https://riot.im/app/
+nativefier https://app.element.io/
```
The [configuration docs](docs/config.md#desktop-app-configuration) show how to
@@ -159,31 +169,31 @@ override the desktop app's default settings if desired.
Running from Docker
===================
-The Docker image can be used to serve riot-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:
```bash
-docker run -p 80:80 vectorim/riot-web
+docker run -p 80:80 vectorim/element-web
```
To supply your own custom `config.json`, map a volume to `/app/config.json`. For example,
-if your custom config was located at `/etc/riot-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:
```bash
-docker run -p 80:80 -v /etc/riot-web/config.json:/app/config.json vectorim/riot-web
+docker run -p 80:80 -v /etc/element-web/config.json:/app/config.json vectorim/element-web
```
To build the image yourself:
```bash
-git clone https://github.com/vector-im/riot-web.git riot-web
-cd riot-web
+git clone https://github.com/vector-im/element-web.git element-web
+cd element-web
git checkout master
-docker build -t vectorim/riot-web .
+docker build .
```
If you're building a custom branch, or want to use the develop branch, check out the appropriate
-riot-web branch and then run:
+element-web branch and then run:
```bash
-docker build -t vectorim/riot-web:develop \
+docker build -t \
--build-arg USE_CUSTOM_SDKS=true \
--build-arg REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git" \
--build-arg REACT_SDK_BRANCH="develop" \
@@ -192,22 +202,28 @@ docker build -t vectorim/riot-web:develop \
.
```
+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
===========
-Riot supports a variety of settings to configure default servers, behaviour, themes, etc.
+Element supports a variety of settings to configure default servers, behaviour, themes, etc.
See the [configuration docs](docs/config.md) for more details.
Labs Features
=============
-Some features of Riot may be enabled by flags in the `Labs` section of the settings.
-Some of these features are described in [labs.md](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md).
+Some features of Element may be enabled by flags in the `Labs` section of the settings.
+Some of these features are described in [labs.md](https://github.com/vector-im/element-web/blob/develop/docs/labs.md).
Caching requirements
====================
-Riot requires the following URLs not to be cached, when/if you are serving Riot 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
/i18n
@@ -219,20 +235,20 @@ Riot requires the following URLs not to be cached, when/if you are serving Riot
Development
===========
-Before attempting to develop on Riot you **must** read the [developer guide
-for `matrix-react-sdk`](https://github.com/matrix-org/matrix-react-sdk), which
-also defines the design, architecture and style for Riot too.
+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
+also defines the design, architecture and style for Element too.
Before starting work on a feature, it's best to ensure your plan aligns well
-with our vision for Riot. Please chat with the team in
-[#riot-dev:matrix.org](https://matrix.to/#/#riot-dev:matrix.org) before you
+with our vision for Element. Please chat with the team in
+[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) before 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
](https://docs.google.com/document/d/12jYzvkidrp1h7liEuLIe6BMdU0NUjndUYI971O06ooM)
to the tame & not-so-tame dragons (gotchas) which exist in the codebase.
-The idea of Riot is to be a relatively lightweight "skin" of customisations on
+The idea of Element is to be a relatively lightweight "skin" of customisations on
top of the underlying `matrix-react-sdk`. `matrix-react-sdk` provides both the
higher and lower level React components useful for building Matrix communication
apps using React.
@@ -240,15 +256,15 @@ 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 Riot 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)
hosted by external CDNs or servers but instead please package all dependencies
-into Riot itself.
+into Element itself.
Setting up a dev environment
============================
-Much of the functionality in Riot is actually in the `matrix-react-sdk` and
+Much of the functionality in Element is actually in the `matrix-react-sdk` and
`matrix-js-sdk` modules. It is possible to set these up in a way that makes it
easy to track the `develop` branches in git and to make local changes without
having to manually rebuild each time.
@@ -258,7 +274,6 @@ First clone and build `matrix-js-sdk`:
``` bash
git clone https://github.com/matrix-org/matrix-js-sdk.git
pushd matrix-js-sdk
-git checkout develop
yarn link
yarn install
popd
@@ -269,36 +284,31 @@ Then similarly with `matrix-react-sdk`:
```bash
git clone https://github.com/matrix-org/matrix-react-sdk.git
pushd matrix-react-sdk
-git checkout develop
yarn link
yarn link matrix-js-sdk
yarn install
popd
```
-Finally, build and start Riot itself:
+Finally, build and start Element itself:
```bash
-git clone https://github.com/vector-im/riot-web.git
-cd riot-web
-git checkout develop
+git clone https://github.com/vector-im/element-web.git
+cd element-web
yarn link matrix-js-sdk
yarn link matrix-react-sdk
yarn install
+yarn reskindex
yarn start
```
+
Wait a few seconds for the initial build to finish; you should see something like:
```
-Hash: b0af76309dd56d7275c8
-Version: webpack 1.12.14
-Time: 14533ms
- 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
+[element-js] [webpack.Progress] 100%
+[element-js]
+[element-js] ℹ 「wdm」: 1840 modules
+[element-js] ℹ 「wdm」: Compiled successfully.
```
Remember, the command will not terminate since it runs the web server
and rebuilds source files when they change. This development server also
@@ -307,19 +317,43 @@ bundle.css.map 116 kB 0 [emitted] main
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 Riot.
+Open http://127.0.0.1:8080/ in your browser to see your newly built Element.
+
+**Note**: The build script uses inotify by default on Linux to monitor directories
+for changes. If the inotify limits are too low your build will fail silently or with
+`Error: EMFILE: too many open files`. To avoid these issues, we recommend a watch limit
+of at least `128M` and instance limit around `512`.
+
+You may be interested in issues [#15750](https://github.com/vector-im/element-web/issues/15750) and
+[#15774](https://github.com/vector-im/element-web/issues/15774) for further details.
+
+To set a new inotify watch and instance limit, execute:
+
+```
+sudo sysctl fs.inotify.max_user_watches=131072
+sudo sysctl fs.inotify.max_user_instances=512
+sudo sysctl -p
+```
+
+If you wish, you can make the new limits permanent, by executing:
+
+```
+echo fs.inotify.max_user_watches=131072 | sudo tee -a /etc/sysctl.conf
+echo fs.inotify.max_user_instances=512 | sudo tee -a /etc/sysctl.conf
+sudo sysctl -p
+```
___
When you make changes to `matrix-react-sdk` or `matrix-js-sdk` they should be
automatically picked up by webpack and built.
-If you add or remove any components from the Riot skin, you will need to rebuild
+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
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 Riot.
+You'll need to do this in each new terminal you open before building Element.
Running the tests
-----------------
@@ -351,56 +385,81 @@ To add a new translation, head to the [translating doc](docs/translating.md).
For a developer guide, see the [translating dev doc](docs/translating-dev.md).
-[](https://translate.riot.im/engage/riot-web/?utm_source=widget)
+[](https://translate.element.io/engage/element-web/?utm_source=widget)
Triaging issues
===============
-Issues will be triaged by the core team using the below set of tags.
+We strive to completely cover all applicable issues with these core labels:
-Tags are meant to be used in combination - e.g.:
- * P1 critical bug == really urgent stuff that should be next in the bugfixing todo list
- * "release blocker" == stuff which is blocking us from cutting the next release.
- * P1 feature type:voip == what VoIP features should we be working on next?
+1. __Type__ — Every issue is assigned a type:
+ - __[T-Defect](https://github.com/vector-im/element-web/labels/T-Defect):__
+ Bugs, crashes, hangs, vulnerabilities, or other reported problems
+ - __[T-Enhancement](https://github.com/vector-im/element-web/labels/T-Enhancement):__
+ New features, changes in functionality, performance boosts, user-facing
+ improvements
+ - __[T-Task](https://github.com/vector-im/element-web/labels/T-Task):__
+ Refactoring, enabling or disabling functionality, other engineering tasks
+ - __[T-Other](https://github.com/vector-im/element-web/labels/T-Other):__
+ Questions, user support, anything else
-priority: **compulsory**
+2. __Severity__ — All issues labeled `T-Defect` are also assigned a severity:
+ * __[S-Critical](https://github.com/vector-im/element-web/labels/S-Critical):__
+ Prevents work, causes data loss, affects many users, and/or has no
+ workaround
+ * __[S-Major](https://github.com/vector-im/element-web/labels/S-Major):__
+ Severely degrades major functionality or product features, with no
+ satisfactory workaround
+ * __[S-Minor](https://github.com/vector-im/element-web/labels/S-Minor):__
+ Impairs non-critical functionality, or suitable workarounds exist
+ * __[S-Tolerable](https://github.com/vector-im/element-web/labels/S-Tolerable):__
+ Purely cosmetic or low / no impact to users
-* P1: top priority - i.e. pool of stuff which we should be working on next
-* P2: still need to fix, but lower than P1
-* P3: non-urgent
-* P4: interesting idea - bluesky some day
-* P5: recorded for posterity/to avoid duplicates. No intention to resolves right now.
+3. __Priority__ — All issues which are not `T-Other` are assigned a priority:
+ * __[P1](https://github.com/vector-im/element-web/labels/P1):__ Next
+ * __[P2](https://github.com/vector-im/element-web/labels/P2):__ Later
+ * __[P3](https://github.com/vector-im/element-web/labels/P3):__ Eventually
+ * __[P4](https://github.com/vector-im/element-web/labels/P4):__ Interesting —
+ Not yet scheduled, will accept patches
+ * __[P5](https://github.com/vector-im/element-web/labels/P5):__ Dubious —
+ Will not schedule, would consider patches
-bug or feature: **compulsory**
+4. __Area__ — Most issues are assigned one or several "areas" using one of the
+ many `A-` prefixed labels, e.g. `A-Composer` or `A-Spaces`. Each area label
+ maps to a group of features or portion of the UI surface in the app.
-* bug
-* feature
+### Other common labels
-bug severity: **compulsory, if bug**
+We have a handful of other labels which are added on an as-needed basis, and not expected to be exhaustive:
-* critical - whole app doesn't work
-* major - entire feature doesn't work
-* minor - partially broken feature (but still usable)
-* cosmetic - feature works functionally but UI/UX is broken
+* __Exceptions__ — Special flags for issues and pull requests:
+ * __[X-Needs-Info](https://github.com/vector-im/element-web/labels/X-Needs-Info):__
+ This issue is blocked pending further information from the reporter
+ * __[X-Regression](https://github.com/vector-im/element-web/labels/X-Regression):__
+ Denotes things breaking which previously worked
+ * __[X-Release-Blocker](https://github.com/vector-im/element-web/labels/X-Release-Blocker):__
+ Issues which must be resolved before making a release
-types
-* type:* - refers to a particular part of the app; used to filter bugs
- on a given topic - e.g. VOIP, signup, timeline, etc.
+* __[Easy](https://github.com/vector-im/element-web/labels/Easy)__ / __[Help
+ Wanted](https://github.com/vector-im/element-web/labels/Help%20Wanted)__ —
+ Well-defined issues which are suitable for folks new to the codebase
-additional categories (self-explanatory):
+* __[A11y](https://github.com/vector-im/element-web/labels/A11y)__ /
+ __[Meta](https://github.com/vector-im/element-web/labels/Meta)__ /
+ __[I18n](https://github.com/vector-im/element-web/labels/I18n)__ /
+ __[Privacy](https://github.com/vector-im/element-web/labels/Privacy)__ /
+ __[Security](https://github.com/vector-im/element-web/labels/Security)__ —
+ Issues which fall under these conceptual themes (which apply to many software
+ projects and are not specific to Element)
-* release blocker
-* ui/ux (think of this as cosmetic)
-* network (specific to network conditions)
-* platform specific
-* accessibility
-* maintenance
-* performance
-* i18n
-* blocked - whether this issue currently can't be progressed due to outside factors
+* __[Sponsored](https://github.com/vector-im/element-web/labels/Sponsored)__ —
+ Used internally by Element to denote issues with external funding
-community engagement
-* easy
-* hacktoberfest
-* bounty? - proposal to be included in a bounty programme
-* bounty - included in Status Open Bounty
+### Ad hoc labels (`Z-`)
+
+We have reserved the `Z-` prefix for ad hoc labels.
+
+Any member of the core team is welcome to create labels beginning with `Z-` for
+any purpose, such as tracking personal areas of interest or providing a common
+way to label cross-repo initiatives. The prefix avoids interference with the
+project's main labels.
diff --git a/__mocks__/cssMock.js b/__mocks__/cssMock.js
new file mode 100644
index 0000000000..9b5d9b3476
--- /dev/null
+++ b/__mocks__/cssMock.js
@@ -0,0 +1 @@
+module.exports = "css-file-stub";
diff --git a/babel.config.js b/babel.config.js
index 8d98fffcf8..fe720e0a4d 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -3,12 +3,14 @@ module.exports = {
"presets": [
["@babel/preset-env", {
"targets": [
- "last 2 Chrome versions", "last 2 Firefox versions", "last 2 Safari versions"
+ "last 2 Chrome versions",
+ "last 2 Firefox versions",
+ "last 2 Safari versions",
+ "last 2 Edge versions",
],
}],
"@babel/preset-typescript",
- "@babel/preset-flow",
- "@babel/preset-react"
+ "@babel/preset-react",
],
"plugins": [
["@babel/plugin-proposal-decorators", {legacy: true}],
@@ -16,8 +18,9 @@ module.exports = {
"@babel/plugin-proposal-numeric-separator",
"@babel/plugin-proposal-class-properties",
"@babel/plugin-proposal-object-rest-spread",
- "@babel/plugin-transform-flow-comments",
+ "@babel/plugin-proposal-optional-chaining",
+ "@babel/plugin-proposal-nullish-coalescing-operator",
"@babel/plugin-syntax-dynamic-import",
- "@babel/plugin-transform-runtime"
- ]
+ "@babel/plugin-transform-runtime",
+ ],
};
diff --git a/config.sample.json b/config.sample.json
index 87fc63de03..adf33174b2 100644
--- a/config.sample.json
+++ b/config.sample.json
@@ -12,7 +12,7 @@
"disable_guests": false,
"disable_login_language_selector": false,
"disable_3pid_login": false,
- "brand": "Riot",
+ "brand": "Element",
"integrations_ui_url": "https://scalar.vector.im/",
"integrations_rest_url": "https://scalar.vector.im/api",
"integrations_widgets_urls": [
@@ -22,15 +22,10 @@
"https://scalar-staging.vector.im/api",
"https://scalar-staging.riot.im/scalar/api"
],
- "bug_report_endpoint_url": "https://riot.im/bugreports/submit",
+ "bug_report_endpoint_url": "https://element.io/bugreports/submit",
"defaultCountryCode": "GB",
"showLabsSettings": false,
- "features": {
- "feature_pinning": "labs",
- "feature_custom_status": "labs",
- "feature_custom_tags": "labs",
- "feature_state_counters": "labs"
- },
+ "features": { },
"default_federate": true,
"default_theme": "light",
"roomDirectory": {
@@ -38,7 +33,6 @@
"matrix.org"
]
},
- "welcomeUserId": "@riot-bot:matrix.org",
"piwik": {
"url": "https://piwik.riot.im/",
"whitelistedHSUrls": ["https://matrix.org"],
diff --git a/contribute.json b/contribute.json
index 0f9ceed38c..0ac40ea378 100644
--- a/contribute.json
+++ b/contribute.json
@@ -1,13 +1,13 @@
{
- "name": "Riot",
+ "name": "Element",
"description": "A glossy Matrix collaboration client for the web.",
"repository": {
- "url": "https://github.com/vector-im/riot-web",
+ "url": "https://github.com/vector-im/element-web",
"license": "Apache License 2.0"
},
"bugs": {
- "list": "https://github.com/vector-im/riot-web/issues",
- "report": "https://github.com/vector-im/riot-web/issues/new/choose"
+ "list": "https://github.com/vector-im/element-web/issues",
+ "report": "https://github.com/vector-im/element-web/issues/new/choose"
},
"keywords": [
"chat",
diff --git a/docs/app-load.md b/docs/app-load.md
new file mode 100644
index 0000000000..7908ce68b0
--- /dev/null
+++ b/docs/app-load.md
@@ -0,0 +1,81 @@
+# App load order
+
+Old slow flow:
+![image](https://user-images.githubusercontent.com/2403652/73848963-00a2a080-4821-11ea-97d4-1200fc2638f3.png)
+
+Current more parallel flow:
+![image](https://user-images.githubusercontent.com/2403652/83146440-303a2900-a0ee-11ea-806b-4f53f039b957.png)
+
+Code
+
+
+digraph G {
+ node [shape=box];
+
+ subgraph cluster_0 {
+ color=orange;
+ node [style=filled];
+ label = "index.ts";
+
+ entrypoint, s0, ready [shape=point];
+ rageshake, config, i18n, theme, skin, olm [shape=parallelogram];
+ mobile [shape=diamond, label="mobile"];
+ modernizr [shape=diamond];
+ redirect, incompatible [shape=egg];
+
+ entrypoint -> rageshake;
+ rageshake -> mobile [color=blue];
+ mobile -> s0 [label="No"];
+ mobile -> redirect [label="Yes"];
+
+ s0 -> platform;
+ s0 -> olm;
+ platform -> config;
+
+ config -> i18n [color=blue];
+ config -> theme [color=blue];
+ config -> skin [color=blue];
+
+ i18n -> modernizr [color=blue];
+ theme -> modernizr [color=blue];
+ skin -> modernizr [color=blue];
+
+ modernizr -> ready [label="Yes"];
+ modernizr -> incompatible [label="No"];
+ incompatible -> ready [label="user ignore"];
+
+ olm -> ready [color=red];
+ config -> ready [color=red];
+ skin -> ready [color=red];
+ theme -> ready [color=red];
+ i18n -> ready [color=red];
+ }
+
+ subgraph cluster_1 {
+ color = green;
+ node [style=filled];
+ label = "init.tsx";
+
+ ready -> loadApp;
+ loadApp -> matrixchat;
+ }
+}
+
+
+
+
+Key:
++ Parallelogram: async/await task
++ Box: sync task
++ Diamond: conditional branch
++ Egg: user interaction
++ Blue arrow: async task is allowed to settle but allowed to fail
++ Red arrow: async task success is asserted
+
+Notes:
++ A task begins when all its dependencies (arrows going into it) are fulfilled.
++ The success of setting up rageshake is never asserted, element-web has a fallback path for running without IDB (and thus rageshake).
++ Everything is awaited to be settled before the Modernizr check, to allow it to make use of things like i18n if they are successful.
+
+Underlying dependencies:
+![image](https://user-images.githubusercontent.com/2403652/73848977-08624500-4821-11ea-9830-bb0317c41086.png)
diff --git a/docs/conferencing.md b/docs/conferencing.md
deleted file mode 100644
index 874ce4cfd0..0000000000
--- a/docs/conferencing.md
+++ /dev/null
@@ -1,52 +0,0 @@
-# VoIP Conferencing
-
-This is a draft proposal for a naive voice/video conferencing implementation for
-Matrix clients. There are many possible conferencing architectures possible for
-Matrix (Multipoint Conferencing Unit (MCU); Stream Forwarding Unit (SFU); Peer-
-to-Peer mesh (P2P), etc; events shared in the group room; events shared 1:1;
-possibly even out-of-band signalling).
-
-This is a starting point for a naive MCU implementation which could provide one
-possible Matrix-wide solution in future, which retains backwards compatibility
-with standard 1:1 calling.
-
- * A client chooses to initiate a conference for a given room by starting a
- voice or video call with a 'conference focus' user. This is a virtual user
- (typically Application Service) which implements a conferencing bridge. It
- isn't defined how the client discovers or selects this user.
-
- * The conference focus user MUST join the room in which the client has
- initiated the conference - this may require the client to invite the
- conference focus user to the room, depending on the room's `join_rules`. The
- conference focus user needs to be in the room to let the bridge eject users
- from the conference who have left the room in which it was initiated, and aid
- discovery of the conference by other users in the room. The bridge
- identifies the room to join based on the user ID by which it was invited.
- The format of this identifier is implementation dependent for now.
-
- * If a client leaves the group chat room, they MUST be ejected from the
- conference. If a client leaves the 1:1 room with the conference focus user,
- they SHOULD be ejected from the conference.
-
- * For now, rooms can contain multiple conference focus users - it's left to
- user or client implementation to select which to converge on. In future this
- could be mediated using a state event (e.g. `im.vector.call.mcu`), but we
- can't do that right now as by default normal users can't set arbitrary state
- events on a room.
-
- * To participate in the conference, other clients initiates a standard 1:1
- voice or video call to the conference focus user.
-
- * For best UX, clients SHOULD show the ongoing voice/video call in the UI
- context of the group room rather than 1:1 with the focus user. If a client
- recognises a conference user present in the room, it MAY chose to highlight
- this in the UI (e.g. with a "conference ongoing" notification, to aid
- discovery). Clients MAY hide the 1:1 room with the focus user (although in
- future this room could be used for floor control or other direct
- communication with the conference focus)
-
- * When all users have left the conference, the 'conference focus' user SHOULD
- leave the room.
-
- * If a conference focus user joins a room but does not receive a 1:1 voice or
- video call, it SHOULD time out after a period of time and leave the room.
diff --git a/docs/config.md b/docs/config.md
index 3102eaf83e..1ca4bf48ff 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -4,13 +4,13 @@ Configuration
You can configure the app by copying `config.sample.json` to
`config.json` and customising it:
-For a good example, see https://riot.im/develop/config.json.
+For a good example, see https://develop.element.io/config.json.
1. `default_server_config` sets the default homeserver and identity server URL for
- Riot to use. The object is the same as returned by [https:///.well-known/matrix/client](https://matrix.org/docs/spec/client_server/latest.html#get-well-known-matrix-client),
+ Element to use. The object is the same as returned by [https:///.well-known/matrix/client](https://matrix.org/docs/spec/client_server/latest.html#get-well-known-matrix-client),
with added support for a `server_name` under the `m.homeserver` section to display
a custom homeserver name. Alternatively, the config can contain a `default_server_name`
- instead which is where Riot will go to get that same object, although this option is
+ instead which is where Element will go to get that same object, although this option is
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
whereas the `server_name` in the `default_server_config` is for display purposes only.
@@ -18,21 +18,24 @@ For a good example, see https://riot.im/develop/config.json.
`default_is_url`, however these are deprecated. They are maintained for backwards
compatibility with older configurations. `default_is_url` is respected only
if `default_hs_url` is used.
- * Riot will fail to load if a mix of `default_server_config`, `default_server_name`, or
+ * Element will fail to load if a mix of `default_server_config`, `default_server_name`, or
`default_hs_url` is specified. When multiple sources are specified, it is unclear
which should take priority and therefore the application cannot continue.
- * As of Riot 1.4.0, identity servers are optional. See [Identity servers](#identity-servers) below.
-1. `features`: Lookup of optional features that may be `enable`d, `disable`d, or
- exposed to the user in the `labs` section of settings. The available
- optional experimental features vary from release to release and are [documented](labs.md). The feature flag process is
- [documented](feature-flags.md) as well.
-1. `showLabsSettings`: Shows the "labs" tab of user settings even when no `features` are enabled
- or present. Useful for getting at settings which may be otherwise hidden.
+ * As of Element 1.4.0, identity servers are optional. See [Identity servers](#identity-servers) below.
+1. `sso_immediate_redirect`: When `true`, Element will assume the default server supports SSO
+ and attempt to send the user there to continue (if they aren't already logged in). Default
+ `false`. Note that this disables all usage of the welcome page.
+1. `features`: Lookup of optional features that may be force-enabled (`true`) or force-disabled (`false`).
+ When features are not listed here, their defaults will be used, and users can turn them on/off if `showLabsSettings`
+ allows them to. The available optional experimental features vary from release to release and are
+ [documented](labs.md). The feature flag process is [documented](feature-flags.md) as well.
+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.
1. `brand`: String to pass to your homeserver when configuring email notifications, to let the
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
+ 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
authentication flows
1. `authFooterLinks`: a list of links to show in the authentication page footer:
@@ -42,13 +45,13 @@ For a good example, see https://riot.im/develop/config.json.
1. `adminMessageMD`: An extra message to show on the reporting dialog to
mention homeserver-specific policies. Accepts Markdown.
1. `integrations_ui_url`: URL to the web interface for the integrations server. The integrations
- server is not Riot and normally not your homeserver either. The integration server settings
+ server is not Element and normally not your homeserver either. The integration server settings
may be left blank to disable integrations.
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.
1. `bug_report_endpoint_url`: endpoint to send bug reports to (must be running a
https://github.com/matrix-org/rageshake server). Bug reports are sent when a user clicks
- "Send Logs" within the application. Bug reports can be disabled by leaving the
+ "Send Logs" within the application. Bug reports can be disabled/hidden by leaving the
`bug_report_endpoint_url` out of your config file.
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
@@ -65,13 +68,16 @@ For a good example, see https://riot.im/develop/config.json.
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
1. `welcomeUserId`: the user ID of a bot to invite whenever users register that can give them a tour
-1. `embeddedPages`: Configures the pages displayed in portions of Riot that
+1. `embeddedPages`: Configures the pages displayed in portions of Element that
embed static files, such as:
1. `welcomeUrl`: Initial content shown on the outside of the app when not
- logged in. Defaults to `welcome.html` supplied with Riot.
+ logged in. Defaults to `welcome.html` supplied with Element.
1. `homeUrl`: Content shown on the inside of the app when a specific room is
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. `loginForWelcome`: Overrides `welcomeUrl` to make the welcome page be the
+ same page as the login page when `true`. This effectively disables the
+ welcome page.
1. `defaultCountryCode`: The ISO 3166 alpha2 country code to use when showing
country selectors, like the phone number input on the registration page.
Defaults to `GB` if the given code is unknown or not provided.
@@ -80,25 +86,66 @@ For a good example, see https://riot.im/develop/config.json.
is special cased to the `default_theme` in the config file).
1. `disable_custom_urls`: disallow the user to change the
default homeserver when signing up or logging in.
-1. `permalinkPrefix`: Used to change the URL that Riot generates permalinks with.
+1. `permalinkPrefix`: Used to change the URL that Element generates permalinks with.
By default, this is "https://matrix.to" to generate matrix.to (spec) permalinks.
- Set this to your Riot instance URL if you run an unfederated server (eg:
- "https://riot.example.org").
+ Set this to your Element instance URL if you run an unfederated server (eg:
+ "https://element.example.org").
1. `jitsi`: Used to change the default conference options. Learn more about the
Jitsi options at [jitsi.md](./jitsi.md).
1. `preferredDomain`: The domain name of the preferred Jitsi instance. Defaults
to `jitsi.riot.im`. This is used whenever a user clicks on the voice/video
call buttons - integration managers may use a different domain.
+1. `enable_presence_by_hs_url`: The property key should be the URL of the homeserver
+ and its value defines whether to enable/disable the presence status display
+ from that homeserver. If no options are configured, presence is shown for all
+ homeservers.
+1. `disable_guests`: Disables guest access tokens and auto-guest registrations.
+ Defaults to false (guests are allowed).
+1. `disable_login_language_selector`: Disables the login language selector. Defaults
+ to false (language selector is shown).
+1. `disable_3pid_login`: Disables 3rd party identity options on login and registration form
+ Defaults to false (3rd party identity options are shown).
+1. `default_federate`: Default option for room federation when creating a room
+ Defaults to true (room federation enabled).
+1. `desktopBuilds`: Used to alter promotional links to the desktop app. By default
+ the builds are considered available and accessible from https://element.io. This
+ config option is typically used in the context of encouraging encrypted message
+ search capabilities (Seshat). All the options listed below are required if this
+ option is specified.
+ 1. `available`: When false, the desktop app will not be promoted to the user.
+ 1. `logo`: An HTTP URL to the avatar for the desktop build. Should be 24x24, ideally
+ an SVG.
+ 1. `url`: An HTTP URL for where to send the user to download the desktop build.
+1. `mobileBuilds`: Used to alter promotional links to the mobile app. By default the
+ builds are considered available and accessible from https://element.io. This config
+ option is typically used in a context of encouraging the user to try the mobile app
+ instead of a mobile/incompatible browser.
+ 1. `ios`: The URL to the iOS build. If `null`, it will be assumed to be not available.
+ If not set, the default element.io builds will be used.
+ 1. `android`: The URL to the Android build. If `null`, it will be assumed to be not available.
+ If not set, the default element.io builds will be used.
+ 1. `fdroid`: The URL to the FDroid build. If `null`, it will be assumed to be not available.
+ If not set, the default element.io builds will be used.
+1. `mobileGuideToast`: Whether to show a toast a startup which nudges users on
+ iOS and Android towards the native mobile apps. The toast redirects to the
+ mobile guide if they accept. Defaults to false.
+1. `audioStreamUrl`: If supplied, show an option on Jitsi widgets to stream
+ audio using Jitsi's live streaming feature. This option is experimental and
+ may be removed at any time without notice.
+1. `voip`: Behaviour related to calls
+ 1. `obeyAssertedIdentity`: If set, MSC3086 asserted identity messages sent
+ on VoIP calls will cause the call to appear in the room corresponding to the
+ asserted identity. This *must* only be set in trusted environments.
Note that `index.html` also has an og:image meta tag that is set to an image
-hosted on riot.im. This is the image used if links to your copy of Riot
-appear in some websites like Facebook, and indeed Riot itself. This has to be
+hosted on riot.im. 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 Riot, but run
+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 Riot.
+each time you download a new version of Element.
Identity servers
================
@@ -107,10 +154,10 @@ 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
or account information.
-As of Riot 1.4.0, all identity server functions are optional and you are
+As of Element 1.4.0, all identity server functions are optional and you are
prompted to agree to terms before data is sent to the identity server.
-Riot will check multiple sources when looking for an identity server to use in
+Element will check multiple sources when looking for an identity server to use in
the following order of preference:
1. The identity server set in the user's account data
@@ -120,28 +167,56 @@ the following order of preference:
login
3. The identity server provided by the Riot config file
-If none of these sources have an identity server set, then Riot will prompt the
+If none of these sources have an identity server set, then Element will prompt the
user to set an identity server first when attempting to use features that
require one.
-Currently the only two public identity servers are https://vector.im and
+Currently, the only two public identity servers are https://vector.im and
https://matrix.org, however in the future identity servers will be
decentralised.
Desktop app configuration
=========================
-To run multiple instances of the desktop app for different accounts, you can
-launch the executable with the `--profile` argument followed by a unique
-identifier, e.g `riot-web --profile Work` for it to run a separate profile and
-not interfere with the default one.
+See https://github.com/vector-im/element-desktop#user-specified-configjson
-Alternatively, a custom location for the profile data can be specified using the
-`--profile-dir` flag followed by the desired path.
+UI Features
+===========
-+ `%APPDATA%\$NAME\config.json` on Windows
-+ `$XDG_CONFIG_HOME\$NAME\config.json` or `~/.config/$NAME/config.json` on Linux
-+ `~Library/Application Support/$NAME/config.json` on macOS
+Parts of the UI can be disabled using UI features. These are settings which appear
+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
+preferences.
-In the paths above, `$NAME` is typically `Riot`, unless you use `--profile
-$PROFILE` in which case it becomes `Riot-$PROFILE`.
+Currently, the following UI feature flags are supported:
+
+* `UIFeature.urlPreviews` - Whether URL previews are enabled across the entire application.
+* `UIFeature.feedback` - Whether prompts to supply feedback are shown.
+* `UIFeature.voip` - Whether or not VoIP is shown readily to the user. When disabled,
+ Jitsi widgets will still work though they cannot easily be added.
+* `UIFeature.widgets` - Whether or not widgets will be shown.
+* `UIFeature.flair` - Whether or not community flair is shown in rooms.
+* `UIFeature.communities` - Whether or not to show any UI related to communities. Implicitly
+ disables `UIFeature.flair` when disabled.
+* `UIFeature.advancedSettings` - Whether or not sections titled "advanced" in room and
+ user settings are shown to the user.
+* `UIFeature.shareQrCode` - Whether or not the QR code on the share room/event dialog
+ is shown.
+* `UIFeature.shareSocial` - Whether or not the social icons on the share room/event dialog
+ are shown.
+* `UIFeature.identityServer` - Whether or not functionality requiring an identity server
+ is shown. When disabled, the user will not be able to interact with the identity
+ server (sharing email addresses, 3PID invites, etc).
+* `UIFeature.thirdPartyId` - Whether or not UI relating to third party identifiers (3PIDs)
+ is shown. Typically this is considered "contact information" on the homeserver, and is
+ not directly related to the identity server.
+* `UIFeature.registration` - Whether or not the registration page is accessible. Typically
+ useful if accounts are managed externally.
+* `UIFeature.passwordReset` - Whether or not the password reset page is accessible. Typically
+ useful if accounts are managed externally.
+* `UIFeature.deactivate` - Whether or not the deactivate account button is accessible. Typically
+ useful if accounts are managed externally.
+* `UIFeature.advancedEncryption` - Whether or not advanced encryption options 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.
diff --git a/docs/customisations.md b/docs/customisations.md
new file mode 100644
index 0000000000..39748ebcf6
--- /dev/null
+++ b/docs/customisations.md
@@ -0,0 +1,34 @@
+# Customisations
+
+Element Web and the React SDK support "customisation points" that can be used to
+easily add custom logic specific to a particular deployment of Element Web.
+
+An example of this is the [security customisations
+module](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/customisations/Security.ts).
+This module in the React SDK only defines some empty functions and their types:
+it does not do anything by default.
+
+To make use of these customisation points, you will first need to fork Element
+Web so that you can add your own code. Even though the default module is part of
+the React SDK, you can still override it from the Element Web layer:
+
+1. Copy the default customisation module to
+ `element-web/src/customisations/YourNameSecurity.ts`
+2. Edit customisations points and make sure export the ones you actually want to
+ activate
+3. Tweak the Element build process to use the customised module instead of the
+ default by adding this to the `additionalPlugins` array in `webpack.config.js`:
+
+```js
+new webpack.NormalModuleReplacementPlugin(
+ /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
+chance of merge conflicts when updating your fork, and thus simplify ongoing
+maintenance.
diff --git a/docs/e2ee.md b/docs/e2ee.md
new file mode 100644
index 0000000000..5e7d505c62
--- /dev/null
+++ b/docs/e2ee.md
@@ -0,0 +1,63 @@
+# End to end encryption by default
+
+By default, Element will create encrypted DM rooms if the user you are chatting with has keys uploaded on their account.
+For private room creation, Element will default to encryption on but give you the choice to opt-out.
+
+## Disabling encryption by default
+
+Set the following on your homeserver's
+`/.well-known/matrix/client` config:
+
+```json
+{
+ "io.element.e2ee": {
+ "default": false
+ }
+}
+```
+
+# Secure backup
+
+By default, Element strongly encourages (but does not require) users to set up
+Secure Backup so that cross-signing identity key and message keys can be
+recovered in case of a disaster where you lose access to all active devices.
+
+## Requiring secure backup
+
+To require Secure Backup to be configured before Element can be used, set the
+following on your homeserver's `/.well-known/matrix/client` config:
+
+```json
+{
+ "io.element.e2ee": {
+ "secure_backup_required": true
+ }
+}
+```
+
+## Preferring setup methods
+
+By default, Element offers users a choice of a random key or user-chosen
+passphrase when setting up Secure Backup. If a homeserver admin would like to
+only offer one of these, you can signal this via the
+`/.well-known/matrix/client` config, for example:
+
+```json
+{
+ "io.element.e2ee": {
+ "secure_backup_setup_methods": ["passphrase"]
+ }
+}
+```
+
+The field `secure_backup_setup_methods` is an array listing the methods the
+client should display. Supported values currently include `key` and
+`passphrase`. If the `secure_backup_setup_methods` field is not present or
+exists but does not contain any supported methods, Element will fallback to the
+default value of: `["key", "passphrase"]`.
+
+# Compatibility
+
+The settings above were first proposed under a `im.vector.riot.e2ee` key, which
+is now deprecated. Element will check for either key, preferring
+`io.element.e2ee` if both exist.
diff --git a/docs/feature-flags.md b/docs/feature-flags.md
index 8d31afec10..1e7e5cce37 100644
--- a/docs/feature-flags.md
+++ b/docs/feature-flags.md
@@ -1,6 +1,6 @@
# Feature flags
-When developing new features for Riot, we use feature flags to give us more
+When developing new features for Element, we use feature flags to give us more
flexibility and control over when and where those features are enabled.
For example, flags make the following things possible:
@@ -8,7 +8,7 @@ For example, flags make the following things possible:
* Extended testing of a feature via labs on develop
* Enabling features when ready instead of the first moment the code is released
* Testing a feature with a specific set of users (by enabling only on a specific
- Riot instance)
+ Element instance)
The size of the feature controlled by a feature flag may vary widely: it could
be a large project like reactions or a smaller change to an existing algorithm.
@@ -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:
1. Add a new
- [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.js)
+ [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts)
of the form:
```js
"feature_cats": {
@@ -47,66 +47,61 @@ When starting work on a feature, we should create a matching feature flag:
```
2. Check whether the feature is enabled as appropriate:
```js
- SettingsStore.isFeatureEnabled("feature_cats")
+ SettingsStore.getValue("feature_cats")
```
-3. Add the feature to the [set of labs on develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json):
-```json
- "features": {
- "feature_cats": "labs"
- },
-```
-4. Document the feature in the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md)
+3. Document the feature in the [labs documentation](https://github.com/vector-im/element-web/blob/develop/docs/labs.md)
With these steps completed, the feature is disabled by default, but can be
-enabled on develop by interested users for testing.
+enabled on develop and nightly by interested users for testing.
Different features may have different deployment plans for when to enable where.
The following lists a few common options.
-## Enabling by default on develop
+## Enabling by default on develop and nightly
-Set the feature to `enable` in the [develop config](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json):
+Set the feature to `true` in the
+[develop](https://github.com/vector-im/element-web/blob/develop/element.io/develop/config.json)
+and
+[nightly](https://github.com/vector-im/element-desktop/blob/develop/element.io/nightly/config.json)
+configs:
```json
"features": {
- "feature_cats": "enable"
+ "feature_cats": true
},
```
-## Enabling by default on staging and app
+## Enabling by default on staging, app, and release
-Set the feature to `enable` in the [app
-config](https://github.com/vector-im/riot-web/blob/develop/riot.im/app/config.json).
+Set the feature to `true` in the
+[staging / app](https://github.com/vector-im/element-web/blob/develop/element.io/app/config.json)
+and
+[release](https://github.com/vector-im/element-desktop/blob/develop/element.io/release/config.json)
+configs.
+
+**Note:** The above will only enable the feature for https://app.element.io and official Element
+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.ts` to `true`.
## Feature deployed successfully
-Once we're confident that a feature is working well, we should remove the flag:
+Once we're confident that a feature is working well, we should remove or convert the flag.
-1. Remove the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.js)
-2. Remove all `isFeatureEnabled` lines that test for the feature's setting
-3. Remove the feature from the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md)
-4. Remove feature state from
- [develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json)
- and [app](https://github.com/vector-im/riot-web/blob/develop/riot.im/app/config.json)
+If the feature is meant to be turned off/on by the user:
+1. Remove `isFeature` from the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts)
+2. Change the `default` to `true` (if desired).
+3. Remove the feature from the [labs documentation](https://github.com/vector-im/element-web/blob/develop/docs/labs.md)
+4. Celebrate! 🥳
+
+If the feature is meant to be forced on (non-configurable):
+1. Remove the [setting](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.ts)
+2. Remove all `getValue` lines that test for the feature.
+3. Remove the feature from the [labs documentation](https://github.com/vector-im/element-web/blob/develop/docs/labs.md)
+4. If applicable, remove the feature state from
+ [develop](https://github.com/vector-im/element-web/blob/develop/element.io/develop/config.json),
+ [nightly](https://github.com/vector-im/element-desktop/blob/develop/element.io/nightly/config.json),
+ [staging / app](https://github.com/vector-im/element-web/blob/develop/element.io/app/config.json),
+ and
+ [release](https://github.com/vector-im/element-desktop/blob/develop/element.io/release/config.json)
configs
5. Celebrate! 🥳
-
-## Convert to a regular setting (optional)
-
-Sometimes we decide a feature should always be user-controllable as a setting
-even after it has been fully deployed. In that case, we would craft a new,
-regular setting:
-
-1. Remove the feature flag from
- [settings](https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/settings/Settings.js)
- and add a regular setting with the appropriate levels for your feature
-2. Replace the `isFeatureEnabled` lines with `getValue` or similar calls
- according to the [settings
- docs](https://github.com/matrix-org/matrix-react-sdk/blob/develop/docs/settings.md)
- (checking carefully, as we may want a different mix of code paths when the
- feature is always present but gated by a setting)
-3. Remove the feature from the [labs documentation](https://github.com/vector-im/riot-web/blob/develop/docs/labs.md)
-4. Remove feature state from
- [develop](https://github.com/vector-im/riot-web/blob/develop/riot.im/develop/config.json)
- and [app](https://github.com/vector-im/riot-web/blob/develop/riot.im/app/config.json)
- configs
diff --git a/docs/img/pr-checks.png b/docs/img/pr-checks.png
new file mode 100644
index 0000000000..08d441c19d
Binary files /dev/null and b/docs/img/pr-checks.png differ
diff --git a/docs/jitsi-dev.md b/docs/jitsi-dev.md
index 093fd79bef..d685a22154 100644
--- a/docs/jitsi-dev.md
+++ b/docs/jitsi-dev.md
@@ -1,10 +1,10 @@
# Jitsi wrapper developer docs
-*If you're looking for information on how to set up Jitsi in your Riot, see
+*If you're looking for information on how to set up Jitsi in your Element, see
[jitsi.md](./jitsi.md) instead.*
These docs are for developers wondering how the different conference buttons work
-within Riot. If you're not a developer, you're probably looking for [jitsi.md](./jitsi.md).
+within Element. If you're not a developer, you're probably looking for [jitsi.md](./jitsi.md).
## Brief introduction to widgets
@@ -17,8 +17,8 @@ in the react-sdk), though for some widgets special integration can be done. v2 w
have a `data` object which helps achieve that special integration, though v1 widgets
are best iframed and left alone.
-Widgets have a `postMessage` API they can use to interact with Riot, which also allows
-Riot to interact with them. Typically this is most used by the sticker picker (an
+Widgets have a `postMessage` API they can use to interact with Element, which also allows
+Element to interact with them. Typically this is most used by the sticker picker (an
account-level widget), though widgets like the Jitsi widget will request permissions to
get 'stuck' into the room list during a conference.
@@ -28,7 +28,7 @@ Widgets can be added with the `/addwidget ` command.
Integration managers (like Scalar and Dimension) are accessible via the 4 squares in
the top right of the room and provide a simple UI over top of bridges, bots, and other
-stuff to plug into a room. They are a separate service to Riot and are thus iframed
+stuff to plug into a room. They are a separate service to Element and are thus iframed
in a dialog as well. They also have a `postMessage` API they can use to interact with
the client to create things like widgets, give permissions to bridges, and generally
set everything up for the integration the user is working with.
@@ -51,7 +51,7 @@ over `postMessage`, even if they aren't going to be using the widget APIs).
Widgets added with the `/addwidget` command will *not* be wrapped as they are not going
through an integration manager. The widgets themselves *should* also work outside of
-Riot. Widgets currently have a "pop out" button which opens them in a new tab and
+Element. Widgets currently have a "pop out" button which opens them in a new tab and
therefore have no connection back to Riot.
## Jitsi widgets from integration managers
@@ -65,27 +65,27 @@ server they specified in their config.json - this is expected.
Some integration managers allow the user to change the conference name while others
will generate one for the user.
-## Jitsi widgets generated by Riot itself
+## Jitsi widgets generated by Element itself
When the user clicks on the call buttons by the composer, the integration manager is
-not involved in the slightest. Instead, Riot itself generates a widget event, this time
+not involved in the slightest. Instead, Element itself generates a widget event, this time
using the config.json parameters, and publishes that to the room. If there's only two
people in the room, a plain WebRTC call is made instead of using a widget at all - these
are defined in the Matrix specification.
-The Jitsi widget created by Riot uses a local `jitsi.html` wrapper (or one hosted by
-`https://riot.im/app` for desktop users or those on non-https domains) as the widget
-`url`. The wrapper has some basic functionality for talking to Riot to ensure the
+The Jitsi widget created by Element uses a local `jitsi.html` wrapper (or one hosted by
+`https://app.element.io` for desktop users or those on non-https domains) as the widget
+`url`. The wrapper has some basic functionality for talking to Element to ensure the
required `postMessage` calls are fulfilled.
**Note**: Per [jitsi.md](./jitsi.md) the `preferredDomain` can also come from the server's
client .well-known data.
-## The Jitsi wrapper in Riot
+## The Jitsi wrapper in Element
-Whenever Riot sees a Jitsi widget, it ditches the `url` and instead replaces it with
+Whenever Element sees a Jitsi widget, it ditches the `url` and instead replaces it with
its local wrapper, much like what it would do when creating a widget. However, instead
-of using one from riot.im/app, it will use one local to the client instead.
+of using one from [app.element.io](https://app.element.io), it will use one local to the client instead.
The wrapper is used to provide a consistent experience to users, as well as being faster
and less risky to load. The local wrapper URL is populated with the conference information
diff --git a/docs/jitsi.md b/docs/jitsi.md
index 1d2c5536a7..57d9f064cb 100644
--- a/docs/jitsi.md
+++ b/docs/jitsi.md
@@ -1,6 +1,6 @@
-# Jitsi in Riot
+# Jitsi in Element
-Riot uses [Jitsi](https://jitsi.org/) for conference calls, which provides options for
+Element uses [Jitsi](https://jitsi.org/) for conference calls, which provides options for
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
@@ -14,13 +14,13 @@ will add a Jitsi widget which allows anyone in the room to join.
Integration managers (available through the 4 squares in the top right of the room) may
provide their own approaches for adding Jitsi widgets.
-## Configuring Riot to use your self-hosted Jitsi server
+## Configuring Element to use your self-hosted Jitsi server
-Riot 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
server and cannot be split over multiple servers.
-However, you can configure Riot to *start* a conference with your Jitsi server by adding
+However, you can configure Element to *start* a conference with your Jitsi server by adding
to your [config](./config.md) the following:
```json
{
@@ -30,17 +30,18 @@ to your [config](./config.md) the following:
}
```
-The default is `jitsi.riot.im` (a free service offered by Riot), and the demo site for
+The default is `jitsi.riot.im` (a free service offered by Element), and the demo site for
Jitsi uses `meet.jit.si` (also free).
-Once you've applied the config change, refresh Riot 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.
-**Note**: The widget URL will point to a `jitsi.html` page hosted by Riot. 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.
**Hint**: If you want everyone on your homeserver to use the same Jitsi server by
-default, set the following on your homeserver's `/.well-known/matrix/client` config:
+default, and you are using element-web 1.6 or newer, set the following on your homeserver's
+`/.well-known/matrix/client` config:
```json
{
"im.vector.riot.jitsi": {
@@ -49,9 +50,24 @@ default, set the following on your homeserver's `/.well-known/matrix/client` con
}
```
-## Mobile app support
+## Element Android
-Currently the Riot mobile apps do not support custom Jitsi servers and will instead
+Element Android (1.0.5+) supports custom Jitsi domains, similar to Element Web above.
+
+1:1 calls, or calls between you and one other person, do not use Jitsi. Instead, those
+calls work directly between clients or via TURN servers configured on the respective
+homeservers.
+
+For rooms with more than 2 joined members, when creating a Jitsi conference via call/video buttons of the toolbar (not via integration manager), Element Android will create a widget using the [wrapper](https://github.com/vector-im/element-web/blob/develop/docs/jitsi-dev.md) hosted on `app.element.io`.
+The domain used is the one specified by the `/.well-known/matrix/client` endpoint, and if not present it uses the fallback defined in `config.xml` (jitsi.riot.im)
+
+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 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.
diff --git a/docs/kubernetes.md b/docs/kubernetes.md
new file mode 100644
index 0000000000..803a72e09d
--- /dev/null
+++ b/docs/kubernetes.md
@@ -0,0 +1,187 @@
+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",
+ "showLabsSettings": false,
+ "features": { },
+ "default_federate": true,
+ "default_theme": "light",
+ "roomDirectory": {
+ "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
+ },
+ "settingDefaults": {
+ "breadcrumbs": true
+ },
+ "jitsi": {
+ "preferredDomain": "jitsi.riot.im"
+ }
+ }
+
+
+ ---
+
+ # 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
+
+ ---
+
diff --git a/docs/labs.md b/docs/labs.md
index f7c0822a42..1051f29597 100644
--- a/docs/labs.md
+++ b/docs/labs.md
@@ -1,11 +1,29 @@
# Labs features
-Some notes on the features you can enable by going to `Settings->Labs`. Not exhaustive, chat in
-[#riot-web:matrix.org](https://matrix.to/#/#riot-web:matrix.org) for more information.
+If Labs is enabled in the [Element config](config.md), you can enable some of these features by going
+to `Settings->Labs`. This list is non-exhaustive and subject to change, chat in
+[#element-web:matrix.org](https://matrix.to/#/#element-web:matrix.org) for more information.
**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.**
+## Submit Abuse Report to Moderators [MSC3215](https://github.com/matrix-org/matrix-doc/pull/3215) support (`feature_report_to_moderators`)
+
+A new version of the "Report" dialog that lets users send abuse reports directly to room moderators,
+if the room supports it.
+
+## Matrix Spaces [MSC1772](https://github.com/matrix-org/matrix-doc/pull/1772) support (`feature_spaces`)
+
+Enables showing, using, creating, and managing spaces. Create Spaces from the all new Space Panel (to left of Room List).
+
+Incompatible with (will disable) `feature_custom_tags`, `feature_communities_v2_prototypes` and stable Communities/Groups support.
+
+Still in heavy development.
+
+## Render LaTeX maths in messages (`feature_latex_maths`)
+
+Enables rendering of LaTeX maths in messages using [KaTeX](https://katex.org/). LaTeX between single dollar-signs is interpreted as inline maths and double dollar-signs as display maths (i.e. centred on its own line).
+
## 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
@@ -21,7 +39,7 @@ your avatar next to the message composer.
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 Riot.
+Setting custom tags is not supported by Element.
## Render simple counters in room header (`feature_state_counters`)
@@ -48,7 +66,7 @@ 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 Riot. This is an implementation of [MSC1957](https://github.com/matrix-org/matrix-doc/pull/1957).
+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`)
@@ -66,21 +84,8 @@ An implementation of [MSC2241](https://github.com/matrix-org/matrix-doc/pull/224
This also includes a new implementation of the user & member info panel, designed to share more code between showing community members & room members. Built on top of this new panel is also a new UX for verification from the member panel.
-## Cross-signing (in development) (`feature_cross_signing`)
-
-Cross-signing ([MSC1756](https://github.com/matrix-org/matrix-doc/pull/1756))
-improves the device verification experience by allowing you to verify a user
-instead of verifying each of their devices.
-
-This feature is still in development and will be landing in several chunks.
-
-## Event indexing and E2EE search support using Seshat (`feature_event_indexing`)
-
-Adds support for search in E2E encrypted rooms. This enables an event indexer
-that downloads, stores, and indexes room messages for E2E encrypted rooms.
-
-The existing search will transparently work for encrypted rooms just like it
-does for non-encrypted.
+The setting will be removed in a future release, enabling it non-optionally for
+all users.
## Bridge info tab (`feature_bridge_state`)
@@ -94,16 +99,41 @@ tab as the single source of truth just yet.
This adds a presence indicator in the room list next to DM rooms where the other
person is online.
-## Show padlocks on invite only rooms (`feature_invite_only_padlocks`)
-
-This adds padlocks to room list tiles and room header for invite only rooms.
-This feature flag (unlike most) is enabled by default.
-
## Custom themes (`feature_custom_themes`)
-Custom themes are possible through Riot's [theme support](./theming.md), though
-normally these themes need to be defined in the config for Riot. This labs flag
+Custom themes are possible through Element's [theme support](./theming.md), though
+normally these themes need to be defined in the config for Element. This labs flag
adds an ability for end users to add themes themselves by using a URL to the JSON
theme definition.
-For some sample themes, check out [aaronraimist/riot-web-themes](https://github.com/aaronraimist/riot-web-themes).
+For some sample themes, check out [aaronraimist/element-themes](https://github.com/aaronraimist/element-themes).
+
+## Message preview tweaks
+
+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.
+
+## 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`)
+
+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).
+
+## Voice messages (`feature_voice_messages`)
+
+Offers a way to send more time-sensitive information through the power of voice. When enabled, use the microphone
+icon on the lower right to start recording your message. You will have a chance to review after you're done recording,
+and if it sounds fine then send it off for the rest of the room to hear.
+
+Voice messages are automatically downloaded to ensure they are ready for playback as soon as possible.
+
+## Do not disturb (`feature_dnd`)
+
+Enables UI for turning on "do not disturb" mode for the current device. When DND mode is engaged, popups
+and notification noises are suppressed. Not perfect, but can help reduce noise.
diff --git a/docs/memory-profiles-and-leaks.md b/docs/memory-profiles-and-leaks.md
index 3f8492d4d1..49acd0fdba 100644
--- a/docs/memory-profiles-and-leaks.md
+++ b/docs/memory-profiles-and-leaks.md
@@ -1,6 +1,6 @@
## Memory leaks
-Riot usually emits slow behaviour just before it is about to crash. Getting a
+Element usually emits slow behaviour just before it is about to crash. Getting a
memory snapshot (below) just before that happens is ideal in figuring out what
is going wrong.
@@ -14,14 +14,14 @@ this happens though so we can try and narrow down what might have gone wrong.
## Memory profiles/snapshots
When investigating memory leaks/problems it's usually important to compare snapshots
-from different points in the Riot session lifecycle. Most importantly, a snapshot
+from different points in the Element session lifecycle. Most importantly, a snapshot
to establish the baseline or "normal" memory usage is useful. Taking a snapshot
-roughly 30-60 minutes after starting Riot is a good time to establish "normal"
+roughly 30-60 minutes after starting Element is a good time to establish "normal"
memory usage for the app - anything after that is at risk of hiding the memory leak
and anything newer is still in the warmup stages of the app.
**Memory profiles can contain sensitive information.** If you are submitting a memory
-profile to us for debugging purposes, please pick the appropriate Riot developer and
+profile to us for debugging purposes, please pick the appropriate Element developer and
send them over an encrypted private message. *Do not share your memory profile in
public channels or with people you do not trust.*
@@ -42,7 +42,7 @@ While the profile is in progress, the tab might be frozen or unresponsive.
1. Press CTRL+SHIFT+I (I as in eye).
2. Click the Memory tab.
-3. Select "Heap Snapshot" and the riot.im VM instance (not the indexeddb one).
+3. Select "Heap Snapshot" and the app.element.io VM instance (not the indexeddb one).
4. Click "Take Snapshot".
5. Wait a bit (coffee is a good option).
6. When the save button appears on the left side of the panel, click it to save the
diff --git a/docs/native-node-modules.md b/docs/native-node-modules.md
index 8daa51f93e..eaf84ecae9 100644
--- a/docs/native-node-modules.md
+++ b/docs/native-node-modules.md
@@ -1,60 +1,3 @@
# Native Node Modules
-For some features, the desktop version of Riot 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 Riot 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 Riot 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 Riot dependencies at this time.
-
-At the moment, we need to make some changes to the Riot 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 Riot 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 Riot can be run from the main folder
-as usual using:
-
- yarn electron
-
+This documentation moved to the [`element-desktop`](https://github.com/vector-im/element-desktop/blob/develop/docs/native-node-modules.md) repository.
diff --git a/docs/pr-previews.md b/docs/pr-previews.md
new file mode 100644
index 0000000000..dd1d6e220a
--- /dev/null
+++ b/docs/pr-previews.md
@@ -0,0 +1,33 @@
+# Pull Request Previews
+
+Pull requests to the React SDK layer (and in the future other layers as well)
+automatically set up a preview site with a full deployment of Element with the
+changes from the pull request added in so that anyone can easily test and review
+them. This is especially useful for checking visual and interactive changes.
+
+To access the preview site, scroll down to the bottom of the PR where the
+various CI results are displayed:
+
+![Pull request: checks section](./img/pr-checks.png)
+
+The checks section could be collapsed at first, so you may need to click "Show
+all checks" to reveal them. Look for an entry that mentions `deploy-preview`. It
+may be at the end of the list, so you may need scroll a bit to see it. To access
+the preview site, click the "Details" link in the deploy preview row.
+
+**Important:** Please always use test accounts when logging into preview sites,
+as they may contain unreviewed and potentially dangerous code that could damage
+your account, exfiltrate encryption keys, etc.
+
+## FAQs
+
+### Are preview sites created for pull requests from contributors?
+
+Yes, they are created for all PRs from any author.
+
+### Do preview sites expire after some time period?
+
+No, there is no expiry date, so they should remain accessible indefinitely, but
+of course they obviously aren't meant to live beyond the development workflow,
+so please don't rely on them for anything important. They may disappear at any
+time without notice.
diff --git a/docs/review.md b/docs/review.md
index 7e0b413a5c..b84f422dca 100644
--- a/docs/review.md
+++ b/docs/review.md
@@ -1,7 +1,7 @@
# Review Guidelines
The following summarises review guidelines that we follow for pull requests in
-Riot Web and other supporting repos. These are just guidelines (not strict
+Element Web and other supporting repos. These are just guidelines (not strict
rules) and may be updated over time.
## Code Review
@@ -14,6 +14,7 @@ When reviewing code, here are some things we look for and also things we avoid:
* Performance
* Accessibility
* Security
+* Quality via automated and manual testing
* Comments and documentation where needed
* Sharing knowledge of different areas among the team
* Ensuring it's something we're comfortable maintaining for the long term
@@ -34,6 +35,7 @@ When reviewing code, here are some things we look for and also things we avoid:
* Reviewers should be explicit about required versus optional changes
* Reviews are conversations and the PR author should feel comfortable
discussing and pushing back on changes before making them
+* Reviewers are encouraged to ask for tests where they believe it is reasonable
* Core team should lead by example through their tone and language
* Take the time to thank and point out good code changes
* Using softer language like "please" and "what do you think?" goes a long way
@@ -41,7 +43,7 @@ When reviewing code, here are some things we look for and also things we avoid:
### Workflow
-* Authors should request review from the riot-web team by default (if someone on
+* Authors should request review from the element-web team by default (if someone on
the team is clearly the expert in an area, a direct review request to them may
be more appropriate)
* Reviewers should remove the team review request and request review from
@@ -56,9 +58,46 @@ 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
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
-We want to ensure that all changes to Riot fit with our design and product
+We want to ensure that all changes to Element fit with our design and product
vision. We often request review from those teams so they can provide their
perspective.
@@ -71,12 +110,11 @@ functionality is:
required (though may still be useful) since we can continue tweaking
As it can be difficult to review design work from looking at just the changed
-files in a PR, authors should be prepared for Design and / or Product teams to
-request a link to an ad-hoc build of Riot (hosted anywhere) that can be used for
-the review. In the future, we [hope to automate
-this](https://github.com/vector-im/riot-web/issues/12624) for every PR.
+files in a PR, a [preview site](./pr-previews.md) that includes your changes
+will be added automatically so that anyone who's interested can try them out
+easily.
Before starting work on a feature, it's best to ensure your plan aligns well
-with our vision for Riot. Please chat with the team in
-[#riot-dev:matrix.org](https://matrix.to/#/#riot-dev:matrix.org) before you
-start so we can ensure it's something we'd be willing to merge.
+with our vision for Element. Please chat with the team in
+[#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) before
+you start so we can ensure it's something we'd be willing to merge.
diff --git a/docs/skinning thoughts.md b/docs/skinning thoughts.md
index bbaf18a284..0466aaa035 100644
--- a/docs/skinning thoughts.md
+++ b/docs/skinning thoughts.md
@@ -5,14 +5,14 @@ matrix-react-sdk
- base CSS
- all the components needed to build a workable app (including the top layer)
-riot-web: the riot skin
- - riot-specific classes (e.g. login header/footer)
- - riot-specific themes
+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 riot-web are bits which apply vector-specific skinning
-specifically "Stuff that any other brand would not want to use. (e.g. riot logos, links, T&Cs)"
+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?)
@@ -21,7 +21,7 @@ ideally matrix-react-sdk itself should ship with a default skin which actually w
status skin (can go in the same app for now)
- has status theme
- - which inherits from riot light 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
@@ -52,7 +52,7 @@ other changes:
- skins/vector/themes/foo/css
- skins/vector/themes/foo/img
- skins/vector/themes/foo/fonts
- - ideally riot-web would contain almost nothing but skins/vector directory.
+ - ideally element-web would contain almost nothing but skins/vector directory.
- ability to entirely replace CSS rather than override it for a given theme
- e.g. if we replace `Login.js` with `StatusLogin.js`, then we should similarly be able to replace `_Login.scss` with `_StatusLogin.scss`.
@@ -64,5 +64,5 @@ random thoughts;
-----------------
Immediate plan for Status:
- * Implement it as a theme for the riot skin
+ * Implement it as a theme for the Element skin
* Ideally move skins to a sensible level (possibly even including src?)
diff --git a/docs/theming.md b/docs/theming.md
index 19967067de..9b90fb2606 100644
--- a/docs/theming.md
+++ b/docs/theming.md
@@ -1,14 +1,14 @@
-Theming Riot
+Theming Element
============
Themes are a very basic way of providing simple alternative look & feels to the
-riot-web app via CSS & custom imagery.
+Element app via CSS & custom imagery.
They are *NOT* co be confused with 'skins', which describe apps which sit on top
-of matrix-react-sdk - e.g. in theory Riot itself is a react-sdk skin.
-As of Jan 2017, skins are not fully supported; riot is the only available skin.
+of matrix-react-sdk - e.g. in theory Element itself is a react-sdk skin.
+As of Jan 2017, skins are not fully supported; Element is the only available skin.
-To define a theme for Riot:
+To define a theme for Element:
1. Pick a name, e.g. `teal`. at time of writing we have `light` and `dark`.
2. Fork `src/skins/vector/css/themes/dark.scss` to be `teal.scss`
@@ -41,6 +41,16 @@ eg. in config.json:
{
"name": "Electric Blue",
"is_dark": false,
+ "fonts": {
+ "faces": [
+ {
+ "font-family": "Inter",
+ "src": [{"url": "/fonts/Inter.ttf", "format": "ttf"}]
+ }
+ ],
+ "general": "Inter, sans",
+ "monospace": "'Courier New'"
+ },
"colors": {
"accent-color": "#3596fc",
"primary-color": "#368bd6",
@@ -54,7 +64,9 @@ eg. in config.json:
"timeline-background-color": "#ffffff",
"timeline-text-color": "#2e2f32",
"timeline-text-secondary-color": "#61708b",
- "timeline-highlights-color": "#f3f8fd"
+ "timeline-highlights-color": "#f3f8fd",
+ "username-colors": ["#ff0000", ...]
+ "avatar-background-colors": ["#cc0000", ...]
}
}, {
"name": "Deep Purple",
@@ -78,3 +90,9 @@ eg. in config.json:
]
}
```
+
+`username-colors` is expected to contain 8 colors. `avatar-background-colors` is expected to contain 3 colors. Both values are optional and have fallbacks from the built-in theme.
+
+These are exposed as `--username-colors_0`, ... and `--avatar-background-colors_0`, ... respectively in CSS.
+
+All properties in `fonts` are optional, and will default to the standard Riot fonts.
diff --git a/docs/translating-dev.md b/docs/translating-dev.md
index ae5735e8af..1653b8c615 100644
--- a/docs/translating-dev.md
+++ b/docs/translating-dev.md
@@ -1,4 +1,4 @@
-# How to translate riot-web (Dev Guide)
+# How to translate Element (Dev Guide)
## Requirements
@@ -6,7 +6,7 @@
- Including up-to-date versions of matrix-react-sdk and matrix-js-sdk
- Latest LTS version of Node.js installed
- Be able to understand English
-- Be able to understand the language you want to translate riot-web into
+- Be able to understand the language you want to translate Element into
## Translating strings vs. marking strings for translation
diff --git a/docs/translating.md b/docs/translating.md
index 5cfd9eaadd..cdfb48f25e 100644
--- a/docs/translating.md
+++ b/docs/translating.md
@@ -1,32 +1,32 @@
-# How to translate riot-web
+# How to translate Element
## Requirements
- Web Browser
- Be able to understand English
-- Be able to understand the language you want to translate riot-web into
+- Be able to understand the language you want to translate Element into
-## Step 0: Join #riotweb-translations:matrix.org
+## Step 0: Join #element-translations:matrix.org
-1. Come and join https://matrix.to/#/#riotweb-translations:matrix.org
+1. Come and join https://matrix.to/#/#element-translations:matrix.org
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 :)
## Step 1: Preparing your Weblate Profile
-1. Head to https://translate.riot.im and register either via Github or email
+1. Head to https://translate.element.io and register either via Github or email
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
-4. Head to https://translate.riot.im/accounts/profile/ and select the languages you know and maybe another language you know too.
-6. Head to https://translate.riot.im/accounts/profile/#subscriptions and select Riot Web as Project
+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
-Go to https://translate.riot.im/projects/riot-web/ and visit the 2 sub-projects.
+Go to https://translate.element.io/projects/element-web/ and visit the 2 sub-projects.
If your language is listed go to Step 2a and if not go to Step 2b
## Step 2a: Helping on existing languages.
-1. Head to one of the projects listed https://translate.riot.im/projects/riot-web/
+1. Head to one of the projects listed https://translate.element.io/projects/element-web/
2. Click on the ``translate`` button on the right side of your language
3. Fill in the translations in the writeable field. You will see the original English string and the string of your second language above.
@@ -34,7 +34,7 @@ Head to the explanations under Steb 2b
## Step 2b: Adding a new language
-1. Go to one of the projects listed https://translate.riot.im/projects/riot-web/
+1. Go to one of the projects listed https://translate.element.io/projects/element-web/
2. Click the ``Start new translation`` button at the bottom
3. Select a language
4. Start translating like in 2a.3
@@ -50,7 +50,7 @@ The yellow button has to be used if you are unsure about the translation but you
### What are "%(something)s"?
-These things are variables that are expanded when displayed by Riot. They can be room names, usernames or similar. If you find one, you can move to the right place for your language, but not delete it as the variable will be missing if you do.
+These things are variables that are expanded when displayed by Element. They can be room names, usernames or similar. If you find one, you can move to the right place for your language, but not delete it as the variable will be missing if you do.
A special case is `%(urlStart)s` and `%(urlEnd)s` which are used to mark the beginning of a hyperlink (i.e. `` and ``. You must keep these markers surrounding the equivalent string in your language that needs to be hyperlinked.
diff --git a/electron_app/build/entitlements.mac.plist b/electron_app/build/entitlements.mac.plist
deleted file mode 100644
index 3fdab97494..0000000000
--- a/electron_app/build/entitlements.mac.plist
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
- com.apple.security.cs.allow-jit
-
- com.apple.security.cs.allow-unsigned-executable-memory
-
-
- com.apple.security.cs.disable-library-validation
-
-
-
- com.apple.security.device.camera
-
- com.apple.security.device.audio-input
-
-
-
diff --git a/electron_app/build/icon.icns b/electron_app/build/icon.icns
deleted file mode 100644
index eba95ecf4f..0000000000
Binary files a/electron_app/build/icon.icns and /dev/null differ
diff --git a/electron_app/build/icon.ico b/electron_app/build/icon.ico
deleted file mode 100644
index 1305b7dd9a..0000000000
Binary files a/electron_app/build/icon.ico and /dev/null differ
diff --git a/electron_app/build/icons/128x128.png b/electron_app/build/icons/128x128.png
deleted file mode 100644
index 9c52d6695b..0000000000
Binary files a/electron_app/build/icons/128x128.png and /dev/null differ
diff --git a/electron_app/build/icons/16x16.png b/electron_app/build/icons/16x16.png
deleted file mode 100644
index 7435c1b5be..0000000000
Binary files a/electron_app/build/icons/16x16.png and /dev/null differ
diff --git a/electron_app/build/icons/24x24.png b/electron_app/build/icons/24x24.png
deleted file mode 100644
index f484995e72..0000000000
Binary files a/electron_app/build/icons/24x24.png and /dev/null differ
diff --git a/electron_app/build/icons/256x256.png b/electron_app/build/icons/256x256.png
deleted file mode 100644
index f52d02c88b..0000000000
Binary files a/electron_app/build/icons/256x256.png and /dev/null differ
diff --git a/electron_app/build/icons/48x48.png b/electron_app/build/icons/48x48.png
deleted file mode 100644
index fcbcbc495f..0000000000
Binary files a/electron_app/build/icons/48x48.png and /dev/null differ
diff --git a/electron_app/build/icons/512x512.png b/electron_app/build/icons/512x512.png
deleted file mode 100644
index 801e1504db..0000000000
Binary files a/electron_app/build/icons/512x512.png and /dev/null differ
diff --git a/electron_app/build/icons/64x64.png b/electron_app/build/icons/64x64.png
deleted file mode 100644
index 4a86e56efe..0000000000
Binary files a/electron_app/build/icons/64x64.png and /dev/null differ
diff --git a/electron_app/build/icons/96x96.png b/electron_app/build/icons/96x96.png
deleted file mode 100644
index 8a998989fe..0000000000
Binary files a/electron_app/build/icons/96x96.png and /dev/null differ
diff --git a/electron_app/build/install-spinner.gif b/electron_app/build/install-spinner.gif
deleted file mode 100644
index 4a685294b6..0000000000
Binary files a/electron_app/build/install-spinner.gif and /dev/null differ
diff --git a/electron_app/img/riot.ico b/electron_app/img/riot.ico
deleted file mode 100644
index 1305b7dd9a..0000000000
Binary files a/electron_app/img/riot.ico and /dev/null differ
diff --git a/electron_app/img/riot.png b/electron_app/img/riot.png
deleted file mode 100644
index f52d02c88b..0000000000
Binary files a/electron_app/img/riot.png and /dev/null differ
diff --git a/electron_app/package.json b/electron_app/package.json
deleted file mode 100644
index 390b61d8d3..0000000000
--- a/electron_app/package.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "riot-web",
- "productName": "Riot",
- "main": "src/electron-main.js",
- "version": "1.5.15",
- "description": "A feature-rich client for Matrix.org",
- "author": "New Vector Ltd.",
- "dependencies": {
- "auto-launch": "^5.0.1",
- "electron-store": "^2.0.0",
- "electron-window-state": "^4.1.0",
- "minimist": "^1.2.0",
- "png-to-ico": "^1.0.2"
- }
-}
diff --git a/electron_app/riot.im/New_Vector_Ltd.pem b/electron_app/riot.im/New_Vector_Ltd.pem
deleted file mode 100644
index 1a34127210..0000000000
--- a/electron_app/riot.im/New_Vector_Ltd.pem
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF0jCCBLqgAwIBAgIRAISYBqZi3VvCUeSfHXF+cbwwDQYJKoZIhvcNAQELBQAw
-gZExCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
-BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTcwNQYD
-VQQDEy5DT01PRE8gUlNBIEV4dGVuZGVkIFZhbGlkYXRpb24gQ29kZSBTaWduaW5n
-IENBMB4XDTE3MDgyMzAwMDAwMFoXDTIwMDgyMjIzNTk1OVowgdgxETAPBgNVBAUT
-CDEwODczNjYxMRMwEQYLKwYBBAGCNzwCAQMTAkdCMR0wGwYDVQQPExRQcml2YXRl
-IE9yZ2FuaXphdGlvbjELMAkGA1UEBhMCR0IxETAPBgNVBBEMCFdDMVIgNEFHMQ8w
-DQYDVQQIDAZMb25kb24xDzANBgNVBAcMBkxvbmRvbjEbMBkGA1UECQwSMjYgUmVk
-IExpb24gU3F1YXJlMRcwFQYDVQQKDA5OZXcgVmVjdG9yIEx0ZDEXMBUGA1UEAwwO
-TmV3IFZlY3RvciBMdGQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7
-X0HP3oM/SVr6PboD03ndtYTONZDcJ/GJ3EyYi6UNrcbKjuDHwPktx9hjAhNjcVkG
-lmuTEPluPj9DbvjaTrers0cQsAS1vJ0RHjLfA93Flg1ys9Q6OThUMw77FtFPtiJU
-z5cSYzfFAhn/4dv7BcgGptn+Mv/8CaTu+RUZJUgoSlRWcT1TREmxkzWotbblqsHO
-zjDmUg20tL5/qpt6BSWsNespf5udKQFXMtqkczBcLvBLmql0vurVcQy8BibB+Q89
-QKwRzwLgaIa7O8WEssFcW8uJe9s0SNtUy8ehbuoSxpA/DbHFwsiDbNA78vp7HrqM
-qY6t6OIgLtDYBFCfe/btAgMBAAGjggHaMIIB1jAfBgNVHSMEGDAWgBTfj/MgDOnK
-pgTYW1g3Kj2rRtyDSTAdBgNVHQ4EFgQUH+mDOdRkF3bYDxCWEaGB4lxiCxcwDgYD
-VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMw
-EQYJYIZIAYb4QgEBBAQDAgQQMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQYBMCsw
-KQYIKwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMFUGA1Ud
-HwROMEwwSqBIoEaGRGh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0NPTU9ET1JTQUV4
-dGVuZGVkVmFsaWRhdGlvbkNvZGVTaWduaW5nQ0EuY3JsMIGGBggrBgEFBQcBAQR6
-MHgwUAYIKwYBBQUHMAKGRGh0dHA6Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9ET1JT
-QUV4dGVuZGVkVmFsaWRhdGlvbkNvZGVTaWduaW5nQ0EuY3J0MCQGCCsGAQUFBzAB
-hhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wJgYDVR0RBB8wHaAbBggrBgEFBQcI
-A6APMA0MC0dCLTEwODczNjYxMA0GCSqGSIb3DQEBCwUAA4IBAQBJ2aH4aixh0aiz
-4WKlK+LMVLHpQ2POE3FZYNpAW7o1q2YDGEADXdGrygPE9NCGNBXKo0CAemCYNWfX
-Ov/jdoiMfeqW3vrZ66oEy8OqbvJSwK1xmomWuYw3wYPWcPVG+YbWYD2CGdQu8jTz
-fzAJCpvAuY3Wji3fQjiecAC7JCSB4fBHa0ALJOmiSqKQUUpkXs5kW7O0lPBnHzNF
-2tQGltXMSIrq1QfFtcreMyKlwDOxPIh360dv5aHhaeSRDRKxq7uq5ikQF2gjKx4k
-ieg2HRbAW6fVPpFr4zRS5umpeZV3i06i11VQQPS/mA/OBEXyaqzx4mr6B7U6ptrp
-jMqiUv2w
------END CERTIFICATE-----
diff --git a/electron_app/riot.im/README b/electron_app/riot.im/README
deleted file mode 100644
index 8e463c25ec..0000000000
--- a/electron_app/riot.im/README
+++ /dev/null
@@ -1,6 +0,0 @@
-This directory contains the config file for the official riot.im distribution
-of Riot Desktop.
-
-You probably do not want to build with this config unless you're building the
-official riot.im distribution, or you'll find your builds will replace
-themselves with the riot.im build.
diff --git a/electron_app/riot.im/config.json b/electron_app/riot.im/config.json
deleted file mode 100644
index 85e2d223af..0000000000
--- a/electron_app/riot.im/config.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "update_base_url": "https://packages.riot.im/desktop/update/",
- "default_server_name": "matrix.org",
- "brand": "Riot",
- "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"
- ],
- "hosting_signup_link": "https://modular.im/?utm_source=riot-web&utm_medium=web",
- "bug_report_endpoint_url": "https://riot.im/bugreports/submit",
- "roomDirectory": {
- "servers": [
- "matrix.org"
- ]
- },
- "piwik": {
- "url": "https://piwik.riot.im/",
- "siteId": 1,
- "policyUrl": "https://matrix.org/legal/riot-im-cookie-policy"
- },
- "phasedRollOut": {
- "feature_lazyloading": {
- "offset": 1539684000000,
- "period": 604800000
- }
- },
- "features": {
- "feature_lazyloading": "enable"
- },
- "enable_presence_by_hs_url": {
- "https://matrix.org": false,
- "https://matrix-client.matrix.org": false
- }
-}
diff --git a/electron_app/riot.im/env.sh b/electron_app/riot.im/env.sh
deleted file mode 100644
index 0ee810521d..0000000000
--- a/electron_app/riot.im/env.sh
+++ /dev/null
@@ -1 +0,0 @@
-export OSSLSIGNCODE_SIGNARGS='-pkcs11module /Library/Frameworks/eToken.framework/Versions/Current/libeToken.dylib -pkcs11engine /usr/local/lib/engines/engine_pkcs11.so -certs electron_app/riot.im/New_Vector_Ltd.pem -key 0a3271cbc1ec0fd8afb37f6bbe0cd65ba08d3b4d -t http://timestamp.comodoca.com -verbose'
diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js
deleted file mode 100644
index 91258c6cfd..0000000000
--- a/electron_app/src/electron-main.js
+++ /dev/null
@@ -1,641 +0,0 @@
-/*
-Copyright 2016 Aviral Dasgupta
-Copyright 2016 OpenMarket Ltd
-Copyright 2018, 2019 New Vector Ltd
-Copyright 2017, 2019 Michael Telatynski <7t3chguy@gmail.com>
-
-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.
-*/
-
-// Squirrel on windows starts the app with various flags
-// as hooks to tell us when we've been installed/uninstalled
-// etc.
-const checkSquirrelHooks = require('./squirrelhooks');
-if (checkSquirrelHooks()) return;
-
-const argv = require('minimist')(process.argv, {
- alias: {help: "h"},
-});
-
-const {app, ipcMain, powerSaveBlocker, BrowserWindow, Menu, autoUpdater, protocol} = require('electron');
-const AutoLaunch = require('auto-launch');
-const path = require('path');
-
-const tray = require('./tray');
-const vectorMenu = require('./vectormenu');
-const webContentsHandler = require('./webcontents-handler');
-const updater = require('./updater');
-const protocolInit = require('./protocol');
-
-const windowStateKeeper = require('electron-window-state');
-const Store = require('electron-store');
-
-const fs = require('fs');
-const afs = fs.promises;
-
-let Seshat = null;
-
-try {
- Seshat = require('matrix-seshat');
-} catch (e) {
- if (e.code === "MODULE_NOT_FOUND") {
- console.log("Seshat isn't installed, event indexing is disabled.");
- } else {
- console.warn("Seshat unexpected error:", e);
- }
-}
-
-if (argv["help"]) {
- console.log("Options:");
- console.log(" --profile-dir {path}: Path to where to store the profile.");
- console.log(" --profile {name}: Name of alternate profile to use, allows for running multiple accounts.");
- console.log(" --devtools: Install and use react-devtools and react-perf.");
- console.log(" --no-update: Disable automatic updating.");
- console.log(" --hidden: Start the application hidden in the system tray.");
- console.log(" --help: Displays this help message.");
- console.log("And more such as --proxy, see:" +
- "https://electronjs.org/docs/api/chrome-command-line-switches#supported-chrome-command-line-switches");
- app.exit();
-}
-
-if (argv['profile-dir']) {
- app.setPath('userData', argv['profile-dir']);
-} else if (argv['profile']) {
- app.setPath('userData', `${app.getPath('userData')}-${argv['profile']}`);
-}
-
-let vectorConfig = {};
-try {
- vectorConfig = require('../../webapp/config.json');
-} catch (e) {
- // it would be nice to check the error code here and bail if the config
- // is unparseable, but we get MODULE_NOT_FOUND in the case of a missing
- // file or invalid json, so node is just very unhelpful.
- // Continue with the defaults (ie. an empty config)
-}
-
-try {
- // Load local config and use it to override values from the one baked with the build
- const localConfig = require(path.join(app.getPath('userData'), 'config.json'));
-
- // If the local config has a homeserver defined, don't use the homeserver from the build
- // config. This is to avoid a problem where Riot thinks there are multiple homeservers
- // defined, and panics as a result.
- const homeserverProps = ['default_is_url', 'default_hs_url', 'default_server_name', 'default_server_config'];
- if (Object.keys(localConfig).find(k => homeserverProps.includes(k))) {
- // Rip out all the homeserver options from the vector config
- vectorConfig = Object.keys(vectorConfig)
- .filter(k => !homeserverProps.includes(k))
- .reduce((obj, key) => {obj[key] = vectorConfig[key]; return obj;}, {});
- }
-
- vectorConfig = Object.assign(vectorConfig, localConfig);
-} catch (e) {
- // Could not load local config, this is expected in most cases.
-}
-
-const eventStorePath = path.join(app.getPath('userData'), 'EventStore');
-const store = new Store({ name: "electron-config" });
-
-let eventIndex = null;
-
-let mainWindow = null;
-global.appQuitting = false;
-
-// It's important to call `path.join` so we don't end up with the packaged asar in the final path.
-const iconFile = `riot.${process.platform === 'win32' ? 'ico' : 'png'}`;
-const iconPath = path.join(__dirname, "..", "..", "img", iconFile);
-const trayConfig = {
- icon_path: iconPath,
- brand: vectorConfig.brand || 'Riot',
-};
-
-// handle uncaught errors otherwise it displays
-// stack traces in popup dialogs, which is terrible (which
-// it will do any time the auto update poke fails, and there's
-// no other way to catch this error).
-// Assuming we generally run from the console when developing,
-// this is far preferable.
-process.on('uncaughtException', function(error) {
- console.log('Unhandled exception', error);
-});
-
-let focusHandlerAttached = false;
-ipcMain.on('setBadgeCount', function(ev, count) {
- app.setBadgeCount(count);
- if (count === 0 && mainWindow) {
- mainWindow.flashFrame(false);
- }
-});
-
-ipcMain.on('loudNotification', function() {
- if (process.platform === 'win32' && mainWindow && !mainWindow.isFocused() && !focusHandlerAttached) {
- mainWindow.flashFrame(true);
- mainWindow.once('focus', () => {
- mainWindow.flashFrame(false);
- focusHandlerAttached = false;
- });
- focusHandlerAttached = true;
- }
-});
-
-let powerSaveBlockerId = null;
-ipcMain.on('app_onAction', function(ev, payload) {
- switch (payload.action) {
- case 'call_state':
- if (powerSaveBlockerId !== null && powerSaveBlocker.isStarted(powerSaveBlockerId)) {
- if (payload.state === 'ended') {
- powerSaveBlocker.stop(powerSaveBlockerId);
- powerSaveBlockerId = null;
- }
- } else {
- if (powerSaveBlockerId === null && payload.state === 'connected') {
- powerSaveBlockerId = powerSaveBlocker.start('prevent-display-sleep');
- }
- }
- break;
- }
-});
-
-autoUpdater.on('update-downloaded', (ev, releaseNotes, releaseName, releaseDate, updateURL) => {
- if (!mainWindow) return;
- // forward to renderer
- mainWindow.webContents.send('update-downloaded', {
- releaseNotes,
- releaseName,
- releaseDate,
- updateURL,
- });
-});
-
-ipcMain.on('ipcCall', async function(ev, payload) {
- if (!mainWindow) return;
-
- const args = payload.args || [];
- let ret;
-
- switch (payload.name) {
- case 'getUpdateFeedUrl':
- ret = autoUpdater.getFeedURL();
- break;
- case 'getAutoLaunchEnabled':
- ret = await launcher.isEnabled();
- break;
- case 'setAutoLaunchEnabled':
- if (args[0]) {
- launcher.enable();
- } else {
- launcher.disable();
- }
- break;
- case 'getMinimizeToTrayEnabled':
- ret = tray.hasTray();
- break;
- case 'setMinimizeToTrayEnabled':
- if (args[0]) {
- // Create trayIcon icon
- tray.create(trayConfig);
- } else {
- tray.destroy();
- }
- store.set('minimizeToTray', args[0]);
- break;
- case 'getAutoHideMenuBarEnabled':
- ret = global.mainWindow.isMenuBarAutoHide();
- break;
- case 'setAutoHideMenuBarEnabled':
- store.set('autoHideMenuBar', args[0]);
- global.mainWindow.setAutoHideMenuBar(args[0]);
- global.mainWindow.setMenuBarVisibility(!args[0]);
- break;
- case 'getAppVersion':
- ret = app.getVersion();
- break;
- case 'focusWindow':
- if (mainWindow.isMinimized()) {
- mainWindow.restore();
- } else if (!mainWindow.isVisible()) {
- mainWindow.show();
- } else {
- mainWindow.focus();
- }
- break;
- case 'getConfig':
- ret = vectorConfig;
- break;
-
- default:
- mainWindow.webContents.send('ipcReply', {
- id: payload.id,
- error: "Unknown IPC Call: " + payload.name,
- });
- return;
- }
-
- mainWindow.webContents.send('ipcReply', {
- id: payload.id,
- reply: ret,
- });
-});
-
-ipcMain.on('seshat', async function(ev, payload) {
- if (!mainWindow) return;
-
- const sendError = (id, e) => {
- const error = {
- message: e.message
- }
-
- mainWindow.webContents.send('seshatReply', {
- id:id,
- error: error
- });
- }
-
- const args = payload.args || [];
- let ret;
-
- switch (payload.name) {
- case 'supportsEventIndexing':
- if (Seshat === null) ret = false;
- else ret = true;
- break;
-
- case 'initEventIndex':
- if (eventIndex === null) {
- try {
- await afs.mkdir(eventStorePath, {recursive: true});
- eventIndex = new Seshat(eventStorePath, {passphrase: "DEFAULT_PASSPHRASE"});
- } catch (e) {
- sendError(payload.id, e);
- return;
- }
- }
- break;
-
- case 'closeEventIndex':
- eventIndex = null;
- break;
-
- case 'deleteEventIndex':
- const deleteFolderRecursive = async(p) => {
- for (let entry of await afs.readdir(p)) {
- const curPath = path.join(p, entry);
- await afs.unlink(curPath);
- }
- }
-
- try {
- await deleteFolderRecursive(eventStorePath);
- } catch (e) {
- }
-
- break;
-
- case 'isEventIndexEmpty':
- if (eventIndex === null) ret = true;
- else ret = await eventIndex.isEmpty();
- break;
-
- case 'addEventToIndex':
- try {
- eventIndex.addEvent(args[0], args[1]);
- } catch (e) {
- sendError(payload.id, e);
- return;
- }
- break;
-
- case 'commitLiveEvents':
- try {
- ret = await eventIndex.commit();
- } catch (e) {
- sendError(payload.id, e);
- return;
- }
- break;
-
- case 'searchEventIndex':
- try {
- ret = await eventIndex.search(args[0]);
- } catch (e) {
- sendError(payload.id, e);
- return;
- }
- break;
-
- case 'addHistoricEvents':
- if (eventIndex === null) ret = false;
- else {
- try {
- ret = await eventIndex.addHistoricEvents(
- args[0], args[1], args[2]);
- } catch (e) {
- sendError(payload.id, e);
- return;
- }
- }
- break;
-
- case 'getStats':
- if (eventIndex === null) ret = 0;
- else {
- try {
- ret = await eventIndex.getStats();
- } catch (e) {
- sendError(payload.id, e);
- return;
- }
- }
- break;
-
- case 'removeCrawlerCheckpoint':
- if (eventIndex === null) ret = false;
- else {
- try {
- ret = await eventIndex.removeCrawlerCheckpoint(args[0]);
- } catch (e) {
- sendError(payload.id, e);
- return;
- }
- }
- break;
-
- case 'addCrawlerCheckpoint':
- if (eventIndex === null) ret = false;
- else {
- try {
- ret = await eventIndex.addCrawlerCheckpoint(args[0]);
- } catch (e) {
- sendError(payload.id, e);
- return;
- }
- }
- break;
-
- case 'loadFileEvents':
- if (eventIndex === null) ret = [];
- else {
- try {
- ret = await eventIndex.loadFileEvents(args[0]);
- } catch (e) {
- sendError(payload.id, e);
- return;
- }
- }
- break;
-
- case 'loadCheckpoints':
- if (eventIndex === null) ret = [];
- else {
- try {
- ret = await eventIndex.loadCheckpoints();
- } catch (e) {
- ret = [];
- }
- }
- break;
-
- default:
- mainWindow.webContents.send('seshatReply', {
- id: payload.id,
- error: "Unknown IPC Call: " + payload.name,
- });
- return;
- }
-
- mainWindow.webContents.send('seshatReply', {
- id: payload.id,
- reply: ret,
- });
-});
-
-app.commandLine.appendSwitch('--enable-usermedia-screen-capturing');
-
-const gotLock = app.requestSingleInstanceLock();
-if (!gotLock) {
- console.log('Other instance detected: exiting');
- app.exit();
-}
-
-// do this after we know we are the primary instance of the app
-protocolInit();
-
-const launcher = new AutoLaunch({
- name: vectorConfig.brand || 'Riot',
- isHidden: true,
- mac: {
- useLaunchAgent: true,
- },
-});
-
-// Register the scheme the app is served from as 'standard'
-// which allows things like relative URLs and IndexedDB to
-// work.
-// Also mark it as secure (ie. accessing resources from this
-// protocol and HTTPS won't trigger mixed content warnings).
-protocol.registerSchemesAsPrivileged([{
- scheme: 'vector',
- privileges: {
- standard: true,
- secure: true,
- supportFetchAPI: true,
- },
-}]);
-
-app.on('ready', () => {
- if (argv['devtools']) {
- try {
- const { default: installExt, REACT_DEVELOPER_TOOLS, REACT_PERF } = require('electron-devtools-installer');
- installExt(REACT_DEVELOPER_TOOLS)
- .then((name) => console.log(`Added Extension: ${name}`))
- .catch((err) => console.log('An error occurred: ', err));
- installExt(REACT_PERF)
- .then((name) => console.log(`Added Extension: ${name}`))
- .catch((err) => console.log('An error occurred: ', err));
- } catch (e) {
- console.log(e);
- }
- }
-
- protocol.registerFileProtocol('vector', (request, callback) => {
- if (request.method !== 'GET') {
- callback({error: -322}); // METHOD_NOT_SUPPORTED from chromium/src/net/base/net_error_list.h
- return null;
- }
-
- const parsedUrl = new URL(request.url);
- if (parsedUrl.protocol !== 'vector:') {
- callback({error: -302}); // UNKNOWN_URL_SCHEME
- return;
- }
- if (parsedUrl.host !== 'vector') {
- callback({error: -105}); // NAME_NOT_RESOLVED
- return;
- }
-
- const target = parsedUrl.pathname.split('/');
-
- // path starts with a '/'
- if (target[0] !== '') {
- callback({error: -6}); // FILE_NOT_FOUND
- return;
- }
-
- if (target[target.length - 1] == '') {
- target[target.length - 1] = 'index.html';
- }
-
- let baseDir;
- // first part of the path determines where we serve from
- if (target[1] === 'webapp') {
- baseDir = __dirname + "/../../webapp";
- } else {
- callback({error: -6}); // FILE_NOT_FOUND
- return;
- }
-
- // Normalise the base dir and the target path separately, then make sure
- // the target path isn't trying to back out beyond its root
- baseDir = path.normalize(baseDir);
-
- const relTarget = path.normalize(path.join(...target.slice(2)));
- if (relTarget.startsWith('..')) {
- callback({error: -6}); // FILE_NOT_FOUND
- return;
- }
- const absTarget = path.join(baseDir, relTarget);
-
- callback({
- path: absTarget,
- });
- }, (error) => {
- if (error) console.error('Failed to register protocol');
- });
-
- if (argv['no-update']) {
- console.log('Auto update disabled via command line flag "--no-update"');
- } else if (vectorConfig['update_base_url']) {
- console.log(`Starting auto update with base URL: ${vectorConfig['update_base_url']}`);
- updater.start(vectorConfig['update_base_url']);
- } else {
- console.log('No update_base_url is defined: auto update is disabled');
- }
-
- // Load the previous window state with fallback to defaults
- const mainWindowState = windowStateKeeper({
- defaultWidth: 1024,
- defaultHeight: 768,
- });
-
- const preloadScript = path.normalize(`${__dirname}/preload.js`);
- mainWindow = global.mainWindow = new BrowserWindow({
- icon: iconPath,
- show: false,
- autoHideMenuBar: store.get('autoHideMenuBar', true),
-
- x: mainWindowState.x,
- y: mainWindowState.y,
- width: mainWindowState.width,
- height: mainWindowState.height,
- webPreferences: {
- preload: preloadScript,
- nodeIntegration: false,
- sandbox: true,
- enableRemoteModule: false,
- // We don't use this: it's useful for the preload script to
- // share a context with the main page so we can give select
- // objects to the main page. The sandbox option isolates the
- // main page from the background script.
- contextIsolation: false,
- webgl: false,
- },
- });
- mainWindow.loadURL('vector://vector/webapp/');
- Menu.setApplicationMenu(vectorMenu);
-
- // Create trayIcon icon
- if (store.get('minimizeToTray', true)) tray.create(trayConfig);
-
- mainWindow.once('ready-to-show', () => {
- mainWindowState.manage(mainWindow);
-
- if (!argv['hidden']) {
- mainWindow.show();
- } else {
- // hide here explicitly because window manage above sometimes shows it
- mainWindow.hide();
- }
- });
-
- mainWindow.on('closed', () => {
- mainWindow = global.mainWindow = null;
- });
- mainWindow.on('close', (e) => {
- // If we are not quitting and have a tray icon then minimize to tray
- if (!global.appQuitting && (tray.hasTray() || process.platform === 'darwin')) {
- // On Mac, closing the window just hides it
- // (this is generally how single-window Mac apps
- // behave, eg. Mail.app)
- e.preventDefault();
- mainWindow.hide();
- return false;
- }
- });
-
- if (process.platform === 'win32') {
- // Handle forward/backward mouse buttons in Windows
- mainWindow.on('app-command', (e, cmd) => {
- if (cmd === 'browser-backward' && mainWindow.webContents.canGoBack()) {
- mainWindow.webContents.goBack();
- } else if (cmd === 'browser-forward' && mainWindow.webContents.canGoForward()) {
- mainWindow.webContents.goForward();
- }
- });
- }
-
- webContentsHandler(mainWindow.webContents);
-});
-
-app.on('window-all-closed', () => {
- app.quit();
-});
-
-app.on('activate', () => {
- mainWindow.show();
-});
-
-app.on('before-quit', () => {
- global.appQuitting = true;
- if (mainWindow) {
- mainWindow.webContents.send('before-quit');
- }
-});
-
-app.on('second-instance', (ev, commandLine, workingDirectory) => {
- // If other instance launched with --hidden then skip showing window
- if (commandLine.includes('--hidden')) return;
-
- // Someone tried to run a second instance, we should focus our window.
- if (mainWindow) {
- if (!mainWindow.isVisible()) mainWindow.show();
- if (mainWindow.isMinimized()) mainWindow.restore();
- mainWindow.focus();
- }
-});
-
-// Set the App User Model ID to match what the squirrel
-// installer uses for the shortcut icon.
-// This makes notifications work on windows 8.1 (and is
-// a noop on other platforms).
-app.setAppUserModelId('com.squirrel.riot-web.Riot');
diff --git a/electron_app/src/protocol.js b/electron_app/src/protocol.js
deleted file mode 100644
index 153ff64084..0000000000
--- a/electron_app/src/protocol.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-Copyright 2020 The Matrix.org Foundation C.I.C.
-
-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.
-*/
-
-const {app} = require('electron');
-
-const processUrl = (url) => {
- if (!global.mainWindow) return;
- console.log("Handling link: ", url);
- global.mainWindow.loadURL(url.replace("riot://", "vector://"));
-};
-
-module.exports = () => {
- // get all args except `hidden` as it'd mean the app would not get focused
- // XXX: passing args to protocol handlers only works on Windows,
- // so unpackaged deep-linking and --profile passing won't work on Mac/Linux
- const args = process.argv.slice(1).filter(arg => arg !== "--hidden" && arg !== "-hidden");
- if (app.isPackaged) {
- app.setAsDefaultProtocolClient('riot', process.execPath, args);
- } else if (process.platform === 'win32') { // on Mac/Linux this would just cause the electron binary to open
- // special handler for running without being packaged, e.g `electron .` by passing our app path to electron
- app.setAsDefaultProtocolClient('riot', process.execPath, [app.getAppPath(), ...args]);
- }
-
- if (process.platform === 'darwin') {
- // Protocol handler for macos
- app.on('open-url', function(ev, url) {
- ev.preventDefault();
- processUrl(url);
- });
- } else {
- // Protocol handler for win32/Linux
- app.on('second-instance', (ev, commandLine) => {
- const url = commandLine[commandLine.length - 1];
- if (!url.startsWith("riot://")) return;
- processUrl(url);
- });
- }
-};
-
-
diff --git a/electron_app/src/squirrelhooks.js b/electron_app/src/squirrelhooks.js
deleted file mode 100644
index 728c9cfb2c..0000000000
--- a/electron_app/src/squirrelhooks.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-Copyright 2017 OpenMarket 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.
-*/
-
-const path = require('path');
-const spawn = require('child_process').spawn;
-const {app} = require('electron');
-
-function runUpdateExe(args, done) {
- // Invokes Squirrel's Update.exe which will do things for us like create shortcuts
- // Note that there's an Update.exe in the app-x.x.x directory and one in the parent
- // directory: we need to run the one in the parent directory, because it discovers
- // information about the app by inspecting the directory it's run from.
- const updateExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe');
- console.log(`Spawning '${updateExe}' with args '${args}'`);
- spawn(updateExe, args, {
- detached: true,
- }).on('close', done);
-}
-
-function checkSquirrelHooks() {
- if (process.platform !== 'win32') return false;
-
- const cmd = process.argv[1];
- const target = path.basename(process.execPath);
- if (cmd === '--squirrel-install' || cmd === '--squirrel-updated') {
- runUpdateExe(['--createShortcut=' + target + ''], app.quit);
- return true;
- } else if (cmd === '--squirrel-uninstall') {
- runUpdateExe(['--removeShortcut=' + target + ''], app.quit);
- return true;
- } else if (cmd === '--squirrel-obsolete') {
- app.quit();
- return true;
- }
- return false;
-}
-
-module.exports = checkSquirrelHooks;
diff --git a/electron_app/src/tray.js b/electron_app/src/tray.js
deleted file mode 100644
index 04aaa1f179..0000000000
--- a/electron_app/src/tray.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Copyright 2017 Karl Glatz
-Copyright 2017 OpenMarket 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.
-*/
-
-const {app, Tray, Menu, nativeImage} = require('electron');
-const pngToIco = require('png-to-ico');
-const path = require('path');
-const fs = require('fs');
-
-let trayIcon = null;
-
-exports.hasTray = function hasTray() {
- return (trayIcon !== null);
-};
-
-exports.destroy = function() {
- if (trayIcon) {
- trayIcon.destroy();
- trayIcon = null;
- }
-};
-
-exports.create = function(config) {
- // no trays on darwin
- if (process.platform === 'darwin' || trayIcon) return;
-
- const toggleWin = function() {
- if (global.mainWindow.isVisible() && !global.mainWindow.isMinimized()) {
- global.mainWindow.hide();
- } else {
- if (global.mainWindow.isMinimized()) global.mainWindow.restore();
- if (!global.mainWindow.isVisible()) global.mainWindow.show();
- global.mainWindow.focus();
- }
- };
-
- const contextMenu = Menu.buildFromTemplate([
- {
- label: `Show/Hide ${config.brand}`,
- click: toggleWin,
- },
- { type: 'separator' },
- {
- label: 'Quit',
- click: function() {
- app.quit();
- },
- },
- ]);
-
- const defaultIcon = nativeImage.createFromPath(config.icon_path);
-
- trayIcon = new Tray(defaultIcon);
- trayIcon.setToolTip(config.brand);
- trayIcon.setContextMenu(contextMenu);
- trayIcon.on('click', toggleWin);
-
- let lastFavicon = null;
- global.mainWindow.webContents.on('page-favicon-updated', async function(ev, favicons) {
- if (!favicons || favicons.length <= 0 || !favicons[0].startsWith('data:')) {
- if (lastFavicon !== null) {
- global.mainWindow.setIcon(defaultIcon);
- trayIcon.setImage(defaultIcon);
- lastFavicon = null;
- }
- return;
- }
-
- // No need to change, shortcut
- if (favicons[0] === lastFavicon) return;
- lastFavicon = favicons[0];
-
- let newFavicon = nativeImage.createFromDataURL(favicons[0]);
-
- // Windows likes ico's too much.
- if (process.platform === 'win32') {
- try {
- const icoPath = path.join(app.getPath('temp'), 'win32_riot_icon.ico');
- fs.writeFileSync(icoPath, await pngToIco(newFavicon.toPNG()));
- newFavicon = nativeImage.createFromPath(icoPath);
- } catch (e) {
- console.error("Failed to make win32 ico", e);
- }
- }
-
- trayIcon.setImage(newFavicon);
- global.mainWindow.setIcon(newFavicon);
- });
-
- global.mainWindow.webContents.on('page-title-updated', function(ev, title) {
- trayIcon.setToolTip(title);
- });
-};
diff --git a/electron_app/src/updater.js b/electron_app/src/updater.js
deleted file mode 100644
index 49fa4e0419..0000000000
--- a/electron_app/src/updater.js
+++ /dev/null
@@ -1,84 +0,0 @@
-const { app, autoUpdater, ipcMain } = require('electron');
-
-const UPDATE_POLL_INTERVAL_MS = 60 * 60 * 1000;
-const INITIAL_UPDATE_DELAY_MS = 30 * 1000;
-
-function installUpdate() {
- // for some reason, quitAndInstall does not fire the
- // before-quit event, so we need to set the flag here.
- global.appQuitting = true;
- autoUpdater.quitAndInstall();
-}
-
-function pollForUpdates() {
- try {
- autoUpdater.checkForUpdates();
- } catch (e) {
- console.log('Couldn\'t check for update', e);
- }
-}
-
-module.exports = {};
-module.exports.start = function startAutoUpdate(updateBaseUrl) {
- if (updateBaseUrl.slice(-1) !== '/') {
- updateBaseUrl = updateBaseUrl + '/';
- }
- try {
- let url;
- // For reasons best known to Squirrel, the way it checks for updates
- // is completely different between macOS and windows. On macOS, it
- // hits a URL that either gives it a 200 with some json or
- // 204 No Content. On windows it takes a base path and looks for
- // files under that path.
- if (process.platform === 'darwin') {
- // include the current version in the URL we hit. Electron doesn't add
- // it anywhere (apart from the User-Agent) so it's up to us. We could
- // (and previously did) just use the User-Agent, but this doesn't
- // rely on NSURLConnection setting the User-Agent to what we expect,
- // and also acts as a convenient cache-buster to ensure that when the
- // app updates it always gets a fresh value to avoid update-looping.
- url = `${updateBaseUrl}macos/?localVersion=${encodeURIComponent(app.getVersion())}`;
-
- } else if (process.platform === 'win32') {
- url = `${updateBaseUrl}win32/${process.arch}/`;
- } else {
- // Squirrel / electron only supports auto-update on these two platforms.
- // I'm not even going to try to guess which feed style they'd use if they
- // implemented it on Linux, or if it would be different again.
- console.log('Auto update not supported on this platform');
- }
-
- if (url) {
- autoUpdater.setFeedURL(url);
- // We check for updates ourselves rather than using 'updater' because we need to
- // do it in the main process (and we don't really need to check every 10 minutes:
- // every hour should be just fine for a desktop app)
- // However, we still let the main window listen for the update events.
- // We also wait a short time before checking for updates the first time because
- // of squirrel on windows and it taking a small amount of time to release a
- // lock file.
- setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS);
- setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS);
- }
- } catch (err) {
- // will fail if running in debug mode
- console.log('Couldn\'t enable update checking', err);
- }
-}
-
-ipcMain.on('install_update', installUpdate);
-ipcMain.on('check_updates', pollForUpdates);
-
-function ipcChannelSendUpdateStatus(status) {
- if (global.mainWindow) {
- global.mainWindow.webContents.send('check_updates', status);
- }
-}
-
-autoUpdater.on('update-available', function() {
- ipcChannelSendUpdateStatus(true);
-}).on('update-not-available', function() {
- ipcChannelSendUpdateStatus(false);
-}).on('error', function(error) {
- ipcChannelSendUpdateStatus(error.message);
-});
diff --git a/electron_app/src/vectormenu.js b/electron_app/src/vectormenu.js
deleted file mode 100644
index b6e00d509d..0000000000
--- a/electron_app/src/vectormenu.js
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-Copyright 2016 OpenMarket 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.
-*/
-
-const {app, shell, Menu} = require('electron');
-
-// Menu template from http://electron.atom.io/docs/api/menu/, edited
-const template = [
- {
- label: '&Edit',
- submenu: [
- { role: 'undo' },
- { role: 'redo' },
- { type: 'separator' },
- { role: 'cut' },
- { role: 'copy' },
- { role: 'paste' },
- { role: 'pasteandmatchstyle' },
- { role: 'delete' },
- { role: 'selectall' },
- ],
- },
- {
- label: '&View',
- submenu: [
- { type: 'separator' },
- { role: 'resetzoom' },
- { role: 'zoomin', accelerator: 'CommandOrControl+=' },
- { role: 'zoomout' },
- { type: 'separator' },
- {
- label: 'Preferences',
- accelerator: 'Command+,', // Mac-only accelerator
- click() { global.mainWindow.webContents.send('preferences'); },
- },
- { role: 'togglefullscreen' },
- { role: 'toggledevtools' },
- ],
- },
- {
- label: '&Window',
- role: 'window',
- submenu: [
- { role: 'minimize' },
- { role: 'close' },
- ],
- },
- {
- label: '&Help',
- role: 'help',
- submenu: [
- {
- label: 'Riot Help',
- click() { shell.openExternal('https://about.riot.im/help'); },
- },
- ],
- },
-];
-
-// macOS has specific menu conventions...
-if (process.platform === 'darwin') {
- // first macOS menu is the name of the app
- const name = app.getName();
- template.unshift({
- label: name,
- submenu: [
- { role: 'about' },
- { type: 'separator' },
- {
- role: 'services',
- submenu: [],
- },
- { type: 'separator' },
- { role: 'hide' },
- { role: 'hideothers' },
- { role: 'unhide' },
- { type: 'separator' },
- { role: 'quit' },
- ],
- });
- // Edit menu.
- // This has a 'speech' section on macOS
- template[1].submenu.push(
- { type: 'separator' },
- {
- label: 'Speech',
- submenu: [
- { role: 'startspeaking' },
- { role: 'stopspeaking' },
- ],
- });
-
- // Window menu.
- // This also has specific functionality on macOS
- template[3].submenu = [
- {
- label: 'Close',
- accelerator: 'CmdOrCtrl+W',
- role: 'close',
- },
- {
- label: 'Minimize',
- accelerator: 'CmdOrCtrl+M',
- role: 'minimize',
- },
- {
- label: 'Zoom',
- role: 'zoom',
- },
- {
- type: 'separator',
- },
- {
- label: 'Bring All to Front',
- role: 'front',
- },
- ];
-} else {
- template.unshift({
- label: '&File',
- submenu: [
- // For some reason, 'about' does not seem to work on windows.
- /*{
- role: 'about'
- },*/
- { role: 'quit' },
- ],
- });
-}
-
-module.exports = Menu.buildFromTemplate(template);
-
diff --git a/electron_app/src/webcontents-handler.js b/electron_app/src/webcontents-handler.js
deleted file mode 100644
index 782d12e56b..0000000000
--- a/electron_app/src/webcontents-handler.js
+++ /dev/null
@@ -1,191 +0,0 @@
-const {clipboard, nativeImage, Menu, MenuItem, shell, dialog} = require('electron');
-const url = require('url');
-const fs = require('fs');
-const request = require('request');
-
-const MAILTO_PREFIX = "mailto:";
-
-const PERMITTED_URL_SCHEMES = [
- 'http:',
- 'https:',
- MAILTO_PREFIX,
-];
-
-function safeOpenURL(target) {
- // openExternal passes the target to open/start/xdg-open,
- // so put fairly stringent limits on what can be opened
- // (for instance, open /bin/sh does indeed open a terminal
- // with a shell, albeit with no arguments)
- const parsedUrl = url.parse(target);
- if (PERMITTED_URL_SCHEMES.indexOf(parsedUrl.protocol) > -1) {
- // explicitly use the URL re-assembled by the url library,
- // so we know the url parser has understood all the parts
- // of the input string
- const newTarget = url.format(parsedUrl);
- shell.openExternal(newTarget);
- }
-}
-
-function onWindowOrNavigate(ev, target) {
- // always prevent the default: if something goes wrong,
- // we don't want to end up opening it in the electron
- // app, as we could end up opening any sort of random
- // url in a window that has node scripting access.
- ev.preventDefault();
- safeOpenURL(target);
-}
-
-function onLinkContextMenu(ev, params) {
- let url = params.linkURL || params.srcURL;
-
- if (url.startsWith('vector://vector/webapp')) {
- url = "https://riot.im/app/" + url.substring(23);
- }
-
- const popupMenu = new Menu();
- // No point trying to open blob: URLs in an external browser: it ain't gonna work.
- if (!url.startsWith('blob:')) {
- popupMenu.append(new MenuItem({
- label: url,
- click() {
- safeOpenURL(url);
- },
- }));
- }
-
- let addSaveAs = false;
- if (params.mediaType && params.mediaType === 'image' && !url.startsWith('file://')) {
- popupMenu.append(new MenuItem({
- label: '&Copy image',
- click() {
- if (url.startsWith('data:')) {
- clipboard.writeImage(nativeImage.createFromDataURL(url));
- } else {
- ev.sender.copyImageAt(params.x, params.y);
- }
- },
- }));
-
- // We want the link to be ordered below the copy stuff, but don't want to duplicate
- // the `if` statement, so use a flag.
- addSaveAs = true;
- }
-
- // No point offering to copy a blob: URL either
- if (!url.startsWith('blob:')) {
- // Special-case e-mail URLs to strip the `mailto:` like modern browsers do
- if (url.startsWith(MAILTO_PREFIX)) {
- popupMenu.append(new MenuItem({
- label: 'Copy email &address',
- click() {
- clipboard.writeText(url.substr(MAILTO_PREFIX.length));
- },
- }));
- } else {
- popupMenu.append(new MenuItem({
- label: 'Copy link &address',
- click() {
- clipboard.writeText(url);
- },
- }));
- }
- }
-
- if (addSaveAs) {
- popupMenu.append(new MenuItem({
- label: 'Sa&ve image as...',
- click() {
- const targetFileName = params.titleText || "image.png";
- const filePath = dialog.showSaveDialog({
- defaultPath: targetFileName,
- });
-
- if (!filePath) return; // user cancelled dialog
-
- try {
- if (url.startsWith("data:")) {
- fs.writeFileSync(filePath, nativeImage.createFromDataURL(url));
- } else {
- request.get(url).pipe(fs.createWriteStream(filePath));
- }
- } catch (err) {
- console.error(err);
- dialog.showMessageBox({
- type: "error",
- title: "Failed to save image",
- message: "The image failed to save",
- });
- }
- },
- }));
- }
-
- // popup() requires an options object even for no options
- popupMenu.popup({});
- ev.preventDefault();
-}
-
-function _CutCopyPasteSelectContextMenus(params) {
- return [{
- role: 'cut',
- label: 'Cu&t',
- enabled: params.editFlags.canCut,
- }, {
- role: 'copy',
- label: '&Copy',
- enabled: params.editFlags.canCopy,
- }, {
- role: 'paste',
- label: '&Paste',
- enabled: params.editFlags.canPaste,
- }, {
- role: 'pasteandmatchstyle',
- enabled: params.editFlags.canPaste,
- }, {
- role: 'selectall',
- label: "Select &All",
- enabled: params.editFlags.canSelectAll,
- }];
-}
-
-function onSelectedContextMenu(ev, params) {
- const items = _CutCopyPasteSelectContextMenus(params);
- const popupMenu = Menu.buildFromTemplate(items);
-
- // popup() requires an options object even for no options
- popupMenu.popup({});
- ev.preventDefault();
-}
-
-function onEditableContextMenu(ev, params) {
- const items = [
- { role: 'undo' },
- { role: 'redo', enabled: params.editFlags.canRedo },
- { type: 'separator' },
- ].concat(_CutCopyPasteSelectContextMenus(params));
-
- const popupMenu = Menu.buildFromTemplate(items);
-
- // popup() requires an options object even for no options
- popupMenu.popup({});
- ev.preventDefault();
-}
-
-
-module.exports = (webContents) => {
- webContents.on('new-window', onWindowOrNavigate);
- webContents.on('will-navigate', (ev, target) => {
- if (target.startsWith("vector://")) return;
- return onWindowOrNavigate(ev, target);
- });
-
- webContents.on('context-menu', function(ev, params) {
- if (params.linkURL || params.srcURL) {
- onLinkContextMenu(ev, params);
- } else if (params.selectionText) {
- onSelectedContextMenu(ev, params);
- } else if (params.isEditable) {
- onEditableContextMenu(ev, params);
- }
- });
-};
diff --git a/electron_app/yarn.lock b/electron_app/yarn.lock
deleted file mode 100644
index eb4b54caa1..0000000000
--- a/electron_app/yarn.lock
+++ /dev/null
@@ -1,837 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@types/node@^9.4.0":
- version "9.6.45"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.45.tgz#a9e5cfd026a3abaaf17e3c0318a470da9f2f178e"
- integrity sha512-9scD7xI1kpIoMs3gVFMOWsWDyRIQ1AOZwe56i1CQPE6N/P4POYkn9UtW5F66t8C2AIoPtVfOFycQ2r11t3pcyg==
-
-ajv@^6.5.5:
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1"
- integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==
- dependencies:
- fast-deep-equal "^2.0.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
-applescript@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/applescript/-/applescript-1.0.0.tgz#bb87af568cad034a4e48c4bdaf6067a3a2701317"
- integrity sha1-u4evVoytA0pOSMS9r2Bno6JwExc=
-
-asn1@~0.2.3:
- version "0.2.4"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
- integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
- dependencies:
- safer-buffer "~2.1.0"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
- integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
- integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-
-auto-launch@^5.0.1:
- version "5.0.5"
- resolved "https://registry.yarnpkg.com/auto-launch/-/auto-launch-5.0.5.tgz#d14bd002b1ef642f85e991a6195ff5300c8ad3c0"
- integrity sha512-ppdF4mihhYzMYLuCcx9H/c5TUOCev8uM7en53zWVQhyYAJrurd2bFZx3qQVeJKF2jrc7rsPRNN5cD+i23l6PdA==
- dependencies:
- applescript "^1.0.0"
- mkdirp "^0.5.1"
- path-is-absolute "^1.0.0"
- untildify "^3.0.2"
- winreg "1.2.4"
-
-aws-sign2@~0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
- integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
-
-aws4@^1.8.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
- integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
-
-bcrypt-pbkdf@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
- integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
- dependencies:
- tweetnacl "^0.14.3"
-
-bignumber.js@^2.1.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-2.4.0.tgz#838a992da9f9d737e0f4b2db0be62bb09dd0c5e8"
- integrity sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=
-
-bmp-js@0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.0.3.tgz#64113e9c7cf1202b376ed607bf30626ebe57b18a"
- integrity sha1-ZBE+nHzxICs3btYHvzBibr5XsYo=
-
-buffer-equal@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b"
- integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=
-
-caseless@~0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
- integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-
-combined-stream@^1.0.6, combined-stream@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
- integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
- dependencies:
- delayed-stream "~1.0.0"
-
-conf@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/conf/-/conf-2.2.0.tgz#ee282efafc1450b61e205372041ad7d866802d9a"
- integrity sha512-93Kz74FOMo6aWRVpAZsonOdl2I57jKtHrNmxhumehFQw4X8Sk37SohNY11PG7Q8Okta+UnrVaI006WLeyp8/XA==
- dependencies:
- dot-prop "^4.1.0"
- env-paths "^1.0.0"
- make-dir "^1.0.0"
- pkg-up "^2.0.0"
- write-file-atomic "^2.3.0"
-
-core-util-is@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
- integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
- dependencies:
- assert-plus "^1.0.0"
-
-deep-equal@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
- integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
-
-define-properties@^1.1.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
- integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
- dependencies:
- object-keys "^1.0.12"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
- integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
-
-dom-walk@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
- integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=
-
-dot-prop@^4.1.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
- integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
- dependencies:
- is-obj "^1.0.0"
-
-ecc-jsbn@~0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
- integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
- dependencies:
- jsbn "~0.1.0"
- safer-buffer "^2.1.0"
-
-electron-store@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-2.0.0.tgz#1035cca2a95409d1f54c7466606345852450d64a"
- integrity sha512-1WCFYHsYvZBqDsoaS0Relnz0rd81ZkBAI0Fgx7Nq2UWU77rSNs1qxm4S6uH7TCZ0bV3LQpJFk7id/is/ZgoOPA==
- dependencies:
- conf "^2.0.0"
-
-electron-window-state@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/electron-window-state/-/electron-window-state-4.1.1.tgz#6b34fdc31b38514dfec8b7c8f7b5d4addb67632d"
- integrity sha1-azT9wxs4UU3+yLfI97XUrdtnYy0=
- dependencies:
- deep-equal "^1.0.1"
- jsonfile "^2.2.3"
- mkdirp "^0.5.1"
-
-env-paths@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0"
- integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=
-
-es-abstract@^1.5.0:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
- integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
- dependencies:
- es-to-primitive "^1.2.0"
- function-bind "^1.1.1"
- has "^1.0.3"
- is-callable "^1.1.4"
- is-regex "^1.0.4"
- object-keys "^1.0.12"
-
-es-to-primitive@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
- integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
- dependencies:
- is-callable "^1.1.4"
- is-date-object "^1.0.1"
- is-symbol "^1.0.2"
-
-es6-promise@^3.0.2:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
- integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=
-
-exif-parser@^0.1.9:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922"
- integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=
-
-extend@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
- integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-
-extsprintf@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
- integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
-
-extsprintf@^1.2.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
- integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
-
-fast-deep-equal@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
- integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
-
-fast-json-stable-stringify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
- integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
-
-file-type@^3.1.0:
- version "3.9.0"
- resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
- integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek=
-
-find-up@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
- integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
- dependencies:
- locate-path "^2.0.0"
-
-for-each@^0.3.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
- integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
- dependencies:
- is-callable "^1.1.3"
-
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
- integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
-
-form-data@~2.3.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
- integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.6"
- mime-types "^2.1.12"
-
-function-bind@^1.0.2, function-bind@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-
-getpass@^0.1.1:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
- integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
- dependencies:
- assert-plus "^1.0.0"
-
-global@~4.3.0:
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
- integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=
- dependencies:
- min-document "^2.19.0"
- process "~0.5.1"
-
-graceful-fs@^4.1.11, graceful-fs@^4.1.6:
- version "4.1.15"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
- integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
-
-har-schema@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
- integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
-
-har-validator@~5.1.0:
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
- integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
- dependencies:
- ajv "^6.5.5"
- har-schema "^2.0.0"
-
-has-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
- integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
-
-has@^1.0.1, has@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
- dependencies:
- function-bind "^1.1.1"
-
-http-signature@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
- integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
- dependencies:
- assert-plus "^1.0.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
- integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
-
-ip-regex@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd"
- integrity sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=
-
-is-callable@^1.1.3, is-callable@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
- integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
-
-is-date-object@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
- integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
-
-is-function@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
- integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=
-
-is-obj@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
- integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
-
-is-regex@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
- integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
- dependencies:
- has "^1.0.1"
-
-is-symbol@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
- integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
- dependencies:
- has-symbols "^1.0.0"
-
-is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
- integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
-
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
- integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
-
-jimp@^0.2.28:
- version "0.2.28"
- resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.2.28.tgz#dd529a937190f42957a7937d1acc3a7762996ea2"
- integrity sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=
- dependencies:
- bignumber.js "^2.1.0"
- bmp-js "0.0.3"
- es6-promise "^3.0.2"
- exif-parser "^0.1.9"
- file-type "^3.1.0"
- jpeg-js "^0.2.0"
- load-bmfont "^1.2.3"
- mime "^1.3.4"
- mkdirp "0.5.1"
- pixelmatch "^4.0.0"
- pngjs "^3.0.0"
- read-chunk "^1.0.1"
- request "^2.65.0"
- stream-to-buffer "^0.1.0"
- tinycolor2 "^1.1.2"
- url-regex "^3.0.0"
-
-jpeg-js@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.2.0.tgz#53e448ec9d263e683266467e9442d2c5a2ef5482"
- integrity sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=
-
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
- integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
-
-json-schema-traverse@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
- integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
- integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
-
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
- integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-
-jsonfile@^2.2.3:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
- integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsprim@^1.2.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
- integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
- dependencies:
- assert-plus "1.0.0"
- extsprintf "1.3.0"
- json-schema "0.2.3"
- verror "1.10.0"
-
-load-bmfont@^1.2.3:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b"
- integrity sha512-kT63aTAlNhZARowaNYcY29Fn/QYkc52M3l6V1ifRcPewg2lvUZDAj7R6dXjOL9D0sict76op3T5+odumDSF81g==
- dependencies:
- buffer-equal "0.0.1"
- mime "^1.3.4"
- parse-bmfont-ascii "^1.0.3"
- parse-bmfont-binary "^1.0.5"
- parse-bmfont-xml "^1.1.4"
- phin "^2.9.1"
- xhr "^2.0.1"
- xtend "^4.0.0"
-
-locate-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
- integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
- dependencies:
- p-locate "^2.0.0"
- path-exists "^3.0.0"
-
-make-dir@^1.0.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
- integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
- dependencies:
- pify "^3.0.0"
-
-mime-db@~1.38.0:
- version "1.38.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad"
- integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==
-
-mime-types@^2.1.12, mime-types@~2.1.19:
- version "2.1.22"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd"
- integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==
- dependencies:
- mime-db "~1.38.0"
-
-mime@^1.3.4:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
- integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-
-min-document@^2.19.0:
- version "2.19.0"
- resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
- integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
- dependencies:
- dom-walk "^0.1.0"
-
-minimist@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
- integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-
-minimist@^1.2.0:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.3.tgz#3db5c0765545ab8637be71f333a104a965a9ca3f"
- integrity sha512-+bMdgqjMN/Z77a6NlY/I3U5LlRDbnmaAk6lDveAPKwSpcPM4tKAuYsvYF8xjhOPXhOYGe/73vVLVez5PW+jqhw==
-
-mkdirp@0.5.1, mkdirp@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
- dependencies:
- minimist "0.0.8"
-
-oauth-sign@~0.9.0:
- version "0.9.0"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
- integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-
-object-keys@^1.0.12:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032"
- integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==
-
-p-limit@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
- integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
- dependencies:
- p-try "^1.0.0"
-
-p-locate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
- integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
- dependencies:
- p-limit "^1.1.0"
-
-p-try@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
- integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
-
-parse-bmfont-ascii@^1.0.3:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285"
- integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=
-
-parse-bmfont-binary@^1.0.5:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006"
- integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=
-
-parse-bmfont-xml@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389"
- integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==
- dependencies:
- xml-parse-from-string "^1.0.0"
- xml2js "^0.4.5"
-
-parse-headers@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.2.tgz#9545e8a4c1ae5eaea7d24992bca890281ed26e34"
- integrity sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==
- dependencies:
- for-each "^0.3.3"
- string.prototype.trim "^1.1.2"
-
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
- integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
-performance-now@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
- integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-
-phin@^2.9.1:
- version "2.9.3"
- resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c"
- integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==
-
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
- integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
-
-pixelmatch@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
- integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=
- dependencies:
- pngjs "^3.0.0"
-
-pkg-up@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
- integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=
- dependencies:
- find-up "^2.1.0"
-
-png-to-ico@^1.0.2:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/png-to-ico/-/png-to-ico-1.0.7.tgz#9346b5f4d6fd7e94cb08fd49eeb585f501c3e5f2"
- integrity sha512-heHiZjPFhVgLiuSG4C4wwKN9YPGLpPJvOfXRyI+cEJf0vPutjJ4XDaeI2f/hzTFs+2juihDw3pP8R5JtTuQTGg==
- dependencies:
- "@types/node" "^9.4.0"
- jimp "^0.2.28"
- minimist "^1.2.0"
-
-pngjs@^3.0.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
- integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
-
-process@~0.5.1:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
- integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=
-
-psl@^1.1.24:
- version "1.1.31"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184"
- integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==
-
-punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
- integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
-
-punycode@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
- integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-
-qs@~6.5.2:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
- integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-
-read-chunk@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-1.0.1.tgz#5f68cab307e663f19993527d9b589cace4661194"
- integrity sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=
-
-request@^2.65.0:
- version "2.88.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
- integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.8.0"
- caseless "~0.12.0"
- combined-stream "~1.0.6"
- extend "~3.0.2"
- forever-agent "~0.6.1"
- form-data "~2.3.2"
- har-validator "~5.1.0"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.19"
- oauth-sign "~0.9.0"
- performance-now "^2.1.0"
- qs "~6.5.2"
- safe-buffer "^5.1.2"
- tough-cookie "~2.4.3"
- tunnel-agent "^0.6.0"
- uuid "^3.3.2"
-
-safe-buffer@^5.0.1, safe-buffer@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-sax@>=0.6.0:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
- integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-
-signal-exit@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
- integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
-
-sshpk@^1.7.0:
- version "1.16.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
- integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- bcrypt-pbkdf "^1.0.0"
- dashdash "^1.12.0"
- ecc-jsbn "~0.1.1"
- getpass "^0.1.1"
- jsbn "~0.1.0"
- safer-buffer "^2.0.2"
- tweetnacl "~0.14.0"
-
-stream-to-buffer@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz#26799d903ab2025c9bd550ac47171b00f8dd80a9"
- integrity sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=
- dependencies:
- stream-to "~0.2.0"
-
-stream-to@~0.2.0:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/stream-to/-/stream-to-0.2.2.tgz#84306098d85fdb990b9fa300b1b3ccf55e8ef01d"
- integrity sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=
-
-string.prototype.trim@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea"
- integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=
- dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.5.0"
- function-bind "^1.0.2"
-
-tinycolor2@^1.1.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
- integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=
-
-tough-cookie@~2.4.3:
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
- integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
- dependencies:
- psl "^1.1.24"
- punycode "^1.4.1"
-
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
- dependencies:
- safe-buffer "^5.0.1"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
- integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
-
-untildify@^3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9"
- integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==
-
-uri-js@^4.2.2:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
- integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
- dependencies:
- punycode "^2.1.0"
-
-url-regex@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-3.2.0.tgz#dbad1e0c9e29e105dd0b1f09f6862f7fdb482724"
- integrity sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=
- dependencies:
- ip-regex "^1.0.1"
-
-uuid@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
- integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
-
-verror@1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
- integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
- dependencies:
- assert-plus "^1.0.0"
- core-util-is "1.0.2"
- extsprintf "^1.2.0"
-
-winreg@1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.4.tgz#ba065629b7a925130e15779108cf540990e98d1b"
- integrity sha1-ugZWKbepJRMOFXeRCM9UCZDpjRs=
-
-write-file-atomic@^2.3.0:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9"
- integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==
- dependencies:
- graceful-fs "^4.1.11"
- imurmurhash "^0.1.4"
- signal-exit "^3.0.2"
-
-xhr@^2.0.1:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd"
- integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==
- dependencies:
- global "~4.3.0"
- is-function "^1.0.1"
- parse-headers "^2.0.0"
- xtend "^4.0.0"
-
-xml-parse-from-string@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28"
- integrity sha1-qQKekp09vN7RafPG4oI42VpdWig=
-
-xml2js@^0.4.5:
- version "0.4.19"
- resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
- integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==
- dependencies:
- sax ">=0.6.0"
- xmlbuilder "~9.0.1"
-
-xmlbuilder@~9.0.1:
- version "9.0.7"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
- integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
-
-xtend@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
- integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
diff --git a/riot.im/README b/element.io/README
similarity index 51%
rename from riot.im/README
rename to element.io/README
index 2186e48dee..140a3fc0c8 100644
--- a/riot.im/README
+++ b/element.io/README
@@ -1,11 +1,12 @@
This directory contains the config files and deployment scripts for the official
-riot.im distribution of Riot Web at https://riot.im.
+element.io distribution of Element Web.
You probably do not want to build with this config unless you're building the
-official riot.im distribution, but these files may be useful if you want to
+official element.io distribution, but these files may be useful if you want to
inspect the configuration used there.
-Riot Desktop uses a separate config (see electron_app/riot.im/config.json).
+Element Desktop uses a separate config (see
+https://github.com/vector-im/element-desktop/tree/develop/element.io).
Deployment scripts (such as app/deploy.py) are meant to be run on the web server
-hosting the Riot installation.
+hosting the Element installation.
diff --git a/element.io/app/config.json b/element.io/app/config.json
new file mode 100644
index 0000000000..5922fcf504
--- /dev/null
+++ b/element.io/app/config.json
@@ -0,0 +1,52 @@
+{
+ "default_server_name": "matrix.org",
+ "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"
+ ],
+ "hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web",
+ "bug_report_endpoint_url": "https://element.io/bugreports/submit",
+ "showLabsSettings": false,
+ "piwik": {
+ "url": "https://piwik.riot.im/",
+ "siteId": 1,
+ "policyUrl": "https://element.io/cookie-policy"
+ },
+ "roomDirectory": {
+ "servers": [
+ "matrix.org",
+ "gitter.im",
+ "libera.chat"
+ ]
+ },
+ "enable_presence_by_hs_url": {
+ "https://matrix.org": false,
+ "https://matrix-client.matrix.org": false
+ },
+ "terms_and_conditions_links": [
+ {
+ "url": "https://element.io/privacy",
+ "text": "Privacy Policy"
+ },
+ {
+ "url": "https://element.io/cookie-policy",
+ "text": "Cookie Policy"
+ }
+ ],
+ "hostSignup": {
+ "brand": "Element Home",
+ "cookiePolicyUrl": "https://element.io/cookie-policy",
+ "domains": [
+ "matrix.org"
+ ],
+ "privacyPolicyUrl": "https://element.io/privacy",
+ "termsOfServiceUrl": "https://element.io/terms-of-service",
+ "url": "https://ems.element.io/element-home/in-app-loader"
+ }
+}
diff --git a/riot.im/app/deploy.py b/element.io/app/deploy.py
similarity index 99%
rename from riot.im/app/deploy.py
rename to element.io/app/deploy.py
index 33aa0af017..a0e8d96dcb 100755
--- a/riot.im/app/deploy.py
+++ b/element.io/app/deploy.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# download and unpack a riot-web tarball.
+# download and unpack a element-web tarball.
#
# Allows `bundles` to be extracted to a common directory, and a link to
# config.json to be added.
diff --git a/riot.im/app/config.json b/element.io/develop/config.json
similarity index 51%
rename from riot.im/app/config.json
rename to element.io/develop/config.json
index 100051537e..58da5283db 100644
--- a/riot.im/app/config.json
+++ b/element.io/develop/config.json
@@ -1,6 +1,6 @@
{
"default_server_name": "matrix.org",
- "brand": "Riot",
+ "brand": "Element",
"integrations_ui_url": "https://scalar.vector.im/",
"integrations_rest_url": "https://scalar.vector.im/api",
"integrations_widgets_urls": [
@@ -10,18 +10,19 @@
"https://scalar-staging.vector.im/api",
"https://scalar-staging.riot.im/scalar/api"
],
- "hosting_signup_link": "https://modular.im/?utm_source=riot-web&utm_medium=web",
- "bug_report_endpoint_url": "https://riot.im/bugreports/submit",
- "features": {
- },
+ "hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web",
+ "bug_report_endpoint_url": "https://element.io/bugreports/submit",
+ "showLabsSettings": true,
"piwik": {
"url": "https://piwik.riot.im/",
"siteId": 1,
- "policyUrl": "https://matrix.org/legal/riot-im-cookie-policy"
+ "policyUrl": "https://element.io/cookie-policy"
},
"roomDirectory": {
"servers": [
- "matrix.org"
+ "matrix.org",
+ "gitter.im",
+ "libera.chat"
]
},
"enable_presence_by_hs_url": {
@@ -30,12 +31,22 @@
},
"terms_and_conditions_links": [
{
- "url": "https://riot.im/privacy",
+ "url": "https://element.io/privacy",
"text": "Privacy Policy"
},
{
- "url": "https://matrix.org/legal/riot-im-cookie-policy",
+ "url": "https://element.io/cookie-policy",
"text": "Cookie Policy"
}
- ]
+ ],
+ "hostSignup": {
+ "brand": "Element Home",
+ "cookiePolicyUrl": "https://element.io/cookie-policy",
+ "domains": [
+ "matrix.org"
+ ],
+ "privacyPolicyUrl": "https://element.io/privacy",
+ "termsOfServiceUrl": "https://element.io/terms-of-service",
+ "url": "https://ems.element.io/element-home/in-app-loader"
+ }
}
diff --git a/package.json b/package.json
index 0b83a69f9b..82d78d3310 100644
--- a/package.json
+++ b/package.json
@@ -1,13 +1,11 @@
{
- "name": "riot-web",
- "productName": "Riot",
- "main": "electron_app/src/electron-main.js",
- "version": "1.5.15",
+ "name": "element-web",
+ "version": "1.7.32",
"description": "A feature-rich client for Matrix.org",
"author": "New Vector Ltd.",
"repository": {
"type": "git",
- "url": "https://github.com/vector-im/riot-web"
+ "url": "https://github.com/vector-im/element-web"
},
"license": "Apache-2.0",
"files": [
@@ -31,195 +29,150 @@
"scripts": {
"i18n": "matrix-gen-i18n",
"prunei18n": "matrix-prune-i18n",
- "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",
+ "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",
"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 electron_app/dist",
- "build": "yarn clean && yarn build:genfiles && yarn build:compile && yarn build:types && yarn build:bundle",
- "build-stats": "yarn clean && yarn build:genfiles && yarn build:compile && yarn build:types && yarn build:bundle-stats",
- "build:jitsi": "scripts/build-jitsi.sh",
+ "clean": "rimraf lib webapp",
+ "build": "yarn clean && yarn build:genfiles && yarn build:bundle",
+ "build-stats": "yarn clean && yarn build:genfiles && yarn build:bundle-stats",
+ "build:jitsi": "node scripts/build-jitsi.js",
"build:res": "node scripts/copy-res.js",
"build:genfiles": "yarn reskindex && yarn build:res && yarn build:jitsi",
"build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js",
- "build:compile": "babel -d lib --verbose --extensions \".ts,.js,.tsx\" src",
- "build:bundle": "cross-env NODE_ENV=production webpack -p --progress --bail --mode production",
- "build:bundle-stats": "cross-env NODE_ENV=production webpack -p --progress --bail --mode production --json > webpack-stats.json",
- "build:electron": "yarn build && yarn install:electron && electron-builder -wml --ia32 --x64",
- "build:electron:linux": "yarn build && electron-builder -l --x64",
- "build:electron:macos": "yarn build && electron-builder -m --x64",
- "build:electron:windows": "yarn build && electron-builder -w --ia32 --x64",
- "build:types": "tsc --emitDeclarationOnly --jsx react",
- "install:electron": "electron-builder install-app-deps",
+ "build:bundle": "webpack --progress --bail --mode production",
+ "build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json",
"dist": "scripts/package.sh",
- "start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,riot-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"",
+ "start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"",
+ "start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js --https\"",
"start:res": "yarn build:jitsi && node scripts/copy-res.js -w",
- "start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development",
- "electron": "yarn build && yarn install:electron && electron .",
- "lint": "yarn lint:types && yarn lint:ts && yarn lint:js && yarn lint:style",
+ "start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development --disable-host-check",
+ "lint": "yarn lint:types && yarn lint:js && yarn lint:style",
"lint:js": "eslint src",
- "lint:ts": "echo 'We don't actually have a typescript linter at this layer because tslint is being removed from our stack. Presumably your TS is fine.'",
"lint:types": "tsc --noEmit --jsx react",
"lint:style": "stylelint 'res/css/**/*.scss'",
"test": "jest"
},
"dependencies": {
+ "@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.3.tgz",
"browser-request": "^0.3.3",
- "favico.js": "^0.3.10",
"gfm.css": "^1.1.2",
- "highlight.js": "^9.13.1",
+ "highlight.js": "^10.5.0",
+ "jsrsasign": "^10.2.0",
+ "katex": "^0.12.0",
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
"matrix-react-sdk": "github:matrix-org/matrix-react-sdk#develop",
- "olm": "https://packages.matrix.org/npm/olm/olm-3.1.4.tgz",
- "postcss-easings": "^2.0.0",
+ "matrix-widget-api": "^0.1.0-beta.15",
"prop-types": "^15.7.2",
- "react": "^16.9.0",
- "react-dom": "^16.9.0",
- "sanitize-html": "^1.19.1",
- "ua-parser-js": "^0.7.19"
+ "react": "^17.0.2",
+ "react-dom": "^17.0.2",
+ "sanitize-html": "^2.3.2",
+ "ua-parser-js": "^0.7.24"
},
"devDependencies": {
- "@babel/cli": "^7.7.5",
- "@babel/core": "^7.7.5",
- "@babel/plugin-proposal-class-properties": "^7.7.4",
- "@babel/plugin-proposal-decorators": "^7.7.4",
- "@babel/plugin-proposal-export-default-from": "^7.7.4",
- "@babel/plugin-proposal-numeric-separator": "^7.7.4",
- "@babel/plugin-proposal-object-rest-spread": "^7.7.4",
- "@babel/plugin-syntax-dynamic-import": "^7.7.4",
- "@babel/plugin-transform-flow-comments": "^7.7.4",
- "@babel/plugin-transform-runtime": "^7.7.6",
- "@babel/preset-env": "^7.7.6",
- "@babel/preset-flow": "^7.7.4",
- "@babel/preset-react": "^7.7.4",
- "@babel/preset-typescript": "^7.7.4",
- "@babel/register": "^7.7.4",
- "@babel/runtime": "^7.7.6",
- "@types/jest": "^25.2.1",
- "@types/react": "16.9",
- "@types/react-dom": "^16.9.4",
- "autoprefixer": "^9.7.3",
- "babel-eslint": "^10.0.3",
- "babel-jest": "^24.9.0",
- "babel-loader": "^8.0.6",
- "canvas": "^2.6.1",
- "chokidar": "^3.3.1",
- "concurrently": "^4.0.1",
- "cpx": "^1.3.2",
- "cross-env": "^6.0.3",
- "css-loader": "^3.3.2",
- "electron-builder": "^22.3.2",
- "electron-builder-squirrel-windows": "^22.3.2",
- "electron-devtools-installer": "^2.2.4",
- "electron-notarize": "^0.2.0",
- "eslint": "^5.8.0",
- "eslint-config-google": "^0.7.1",
- "eslint-plugin-babel": "^4.1.2",
- "eslint-plugin-flowtype": "^2.50.3",
- "eslint-plugin-jest": "^23.0.4",
- "eslint-plugin-react": "^7.11.1",
- "eslint-plugin-react-hooks": "^2.2.0",
+ "@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-decorators": "^7.12.12",
+ "@babel/plugin-proposal-export-default-from": "^7.12.1",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
+ "@babel/plugin-proposal-numeric-separator": "^7.12.7",
+ "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
+ "@babel/plugin-proposal-optional-chaining": "^7.12.7",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-transform-runtime": "^7.12.10",
+ "@babel/preset-env": "^7.12.11",
+ "@babel/preset-react": "^7.12.10",
+ "@babel/preset-typescript": "^7.12.7",
+ "@babel/register": "^7.12.10",
+ "@babel/runtime": "^7.12.5",
+ "@principalstudio/html-webpack-inject-preload": "^1.2.7",
+ "@types/flux": "^3.1.9",
+ "@types/modernizr": "^3.5.3",
+ "@types/node": "^14.14.22",
+ "@types/react": "^17.0.2",
+ "@types/react-dom": "^17.0.2",
+ "@types/sanitize-html": "^2.3.1",
+ "@typescript-eslint/eslint-plugin": "^4.17.0",
+ "@typescript-eslint/parser": "^4.17.0",
+ "autoprefixer": "^9.8.6",
+ "babel-jest": "^26.6.3",
+ "babel-loader": "^8.2.2",
+ "chokidar": "^3.5.1",
+ "concurrently": "^5.3.0",
+ "cpx": "^1.5.0",
+ "css-loader": "^3.6.0",
+ "eslint": "7.18.0",
+ "eslint-config-google": "^0.14.0",
+ "eslint-plugin-matrix-org": "github:matrix-org/eslint-plugin-matrix-org#main",
+ "eslint-plugin-react": "^7.22.0",
+ "eslint-plugin-react-hooks": "^4.2.0",
"extract-text-webpack-plugin": "^4.0.0-beta.0",
- "fake-indexeddb": "^3.0.0",
- "file-loader": "^5.0.2",
+ "fake-indexeddb": "^3.1.2",
+ "file-loader": "^5.1.0",
"fs-extra": "^0.30.0",
- "html-webpack-plugin": "^3.2.0",
- "jest": "^24.9.0",
- "jest-environment-jsdom-fourteen": "^1.0.1",
- "json-loader": "^0.5.3",
- "loader-utils": "^1.2.3",
+ "html-webpack-plugin": "^4.5.2",
+ "jest": "^26.6.3",
+ "jest-environment-jsdom-sixteen": "^1.0.3",
+ "json-loader": "^0.5.7",
+ "loader-utils": "^1.4.0",
"matrix-mock-request": "^1.2.3",
- "matrix-react-test-utils": "^0.2.2",
- "mini-css-extract-plugin": "^0.8.0",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.1",
- "modernizr": "^3.6.0",
- "optimize-css-assets-webpack-plugin": "^5.0.3",
+ "matrix-react-test-utils": "^0.2.3",
+ "matrix-web-i18n": "github:matrix-org/matrix-web-i18n",
+ "mini-css-extract-plugin": "^0.12.0",
+ "minimist": "^1.2.5",
+ "mkdirp": "^1.0.4",
+ "modernizr": "^3.11.7",
+ "node-fetch": "^2.6.1",
+ "optimize-css-assets-webpack-plugin": "^5.0.4",
+ "postcss-easings": "^2.0.0",
"postcss-extend": "^1.0.5",
- "postcss-hexrgba": "^2.0.0",
+ "postcss-hexrgba": "^2.0.1",
"postcss-import": "^12.0.1",
"postcss-loader": "^3.0.0",
"postcss-mixins": "^6.2.3",
- "postcss-nested": "^4.2.1",
+ "postcss-nested": "^4.2.3",
"postcss-preset-env": "^6.7.0",
- "postcss-scss": "^2.0.0",
+ "postcss-scss": "^2.1.1",
"postcss-simple-vars": "^5.0.2",
"postcss-strip-inline-comments": "^0.1.5",
- "rimraf": "^2.4.3",
+ "rimraf": "^3.0.2",
"shell-escape": "^0.2.0",
- "stylelint": "^12.0.1",
- "terser-webpack-plugin": "^2.3.0",
- "typescript": "^3.7.3",
- "webpack": "^4.41.2",
- "webpack-cli": "^3.3.10",
- "webpack-dev-server": "^3.9.0"
- },
- "build": {
- "appId": "im.riot.app",
- "electronVersion": "7.1.14",
- "files": [
- "node_modules/**",
- "src/**"
- ],
- "extraResources": [
- {
- "from": "electron_app/img",
- "to": "img"
- },
- "webapp/**/*"
- ],
- "linux": {
- "target": "deb",
- "category": "Network;InstantMessaging;Chat",
- "maintainer": "support@riot.im",
- "desktop": {
- "StartupWMClass": "riot"
- }
- },
- "mac": {
- "category": "public.app-category.social-networking",
- "darkModeSupport": true
- },
- "win": {
- "target": {
- "target": "squirrel"
- },
- "sign": "scripts/electron_winSign"
- },
- "directories": {
- "buildResources": "electron_app/build",
- "output": "electron_app/dist",
- "app": "electron_app"
- },
- "afterSign": "scripts/electron_afterSign.js",
- "protocols": [
- {
- "name": "riot",
- "schemes": [
- "riot"
- ]
- }
- ]
+ "simple-proxy-agent": "^1.1.0",
+ "stylelint": "^13.9.0",
+ "stylelint-config-standard": "^20.0.0",
+ "stylelint-scss": "^3.18.0",
+ "terser-webpack-plugin": "^2.3.8",
+ "typescript": "^4.1.3",
+ "webpack": "^4.46.0",
+ "webpack-cli": "^3.3.12",
+ "webpack-dev-server": "^3.11.2",
+ "worker-loader": "^2.0.0"
},
"jest": {
- "modulePathIgnorePatterns": [
- "/electron_app"
- ],
- "testEnvironment": "jest-environment-jsdom-fourteen",
+ "testEnvironment": "jest-environment-jsdom-sixteen",
"testMatch": [
- "/test/**/*-test.*"
+ "/test/**/*-test.js"
],
"setupFilesAfterEnv": [
"/node_modules/matrix-react-sdk/test/setupTests.js"
],
"moduleNameMapper": {
+ "\\.(css|scss)$": "/__mocks__/cssMock.js",
"\\.(gif|png|svg|ttf|woff2)$": "/node_modules/matrix-react-sdk/__mocks__/imageMock.js",
"\\$webapp/i18n/languages.json": "/node_modules/matrix-react-sdk/__mocks__/languages.json",
"^browser-request$": "/node_modules/matrix-react-sdk/__mocks__/browser-request.js",
"^react$": "/node_modules/react",
"^react-dom$": "/node_modules/react-dom",
"^matrix-js-sdk$": "/node_modules/matrix-js-sdk/src",
- "^matrix-react-sdk$": "/node_modules/matrix-react-sdk/src"
+ "^matrix-react-sdk$": "/node_modules/matrix-react-sdk/src",
+ "decoderWorker\\.min\\.js": "/node_modules/matrix-react-sdk/__mocks__/empty.js",
+ "decoderWorker\\.min\\.wasm": "/node_modules/matrix-react-sdk/__mocks__/empty.js",
+ "waveWorker\\.min\\.js": "/node_modules/matrix-react-sdk/__mocks__/empty.js",
+ "context-filter-polyfill": "/node_modules/matrix-react-sdk/__mocks__/empty.js",
+ "FontManager.ts": "/node_modules/matrix-react-sdk/__mocks__/FontManager.js",
+ "workers/(.+)\\.worker\\.ts": "/node_modules/matrix-react-sdk/__mocks__/workerMock.js"
},
"transformIgnorePatterns": [
"/node_modules/(?!matrix-js-sdk).+$",
diff --git a/release.sh b/release.sh
index fada07f728..9886fb7478 100755
--- a/release.sh
+++ b/release.sh
@@ -1,6 +1,6 @@
#!/bin/bash
#
-# Script to perform a release of riot-web.
+# Script to perform a release of element-web.
#
# Requires github-changelog-generator; to install, do
# pip install git+https://github.com/matrix-org/github-changelog-generator.git
@@ -38,13 +38,13 @@ do
echo "Upgrading $i to $latestver..."
yarn add -E $i@$latestver
git add -u
- # The `-e` flag opens the editor and gives you a chance to check
- # the upgrade for correctness.
- git commit -m "Upgrade $i to $latestver" -e
+ git commit -m "Upgrade $i to $latestver"
fi
fi
done
+./node_modules/matrix-js-sdk/release.sh -n -z "$orig_args"
+
release="${1#v}"
tag="v${release}"
prerelease=0
@@ -54,16 +54,6 @@ prerelease=0
# with a hyphen is a prerelease.
echo $release | grep -q '-' && prerelease=1
-# bump Electron's package.json first
-echo "electron yarn version"
-cd electron_app
-yarn version --no-git-tag-version --new-version "$release"
-git commit package.json -m "$tag"
-
-cd ..
-
-./node_modules/matrix-js-sdk/release.sh -u vector-im -z "$orig_args"
-
if [ $prerelease -eq 0 ]
then
# For a release, reset SDK deps back to the `develop` branch.
diff --git a/res/css/structures/ErrorView.scss b/res/css/structures/ErrorView.scss
new file mode 100644
index 0000000000..4fbb2b00a8
--- /dev/null
+++ b/res/css/structures/ErrorView.scss
@@ -0,0 +1,101 @@
+/*
+Copyright 2020 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 font-size variables manually, ideally this scss would get loaded by the theme which has all variables in context
+@import "../../../node_modules/matrix-react-sdk/res/css/_font-sizes.scss";
+
+.mx_ErrorView {
+ background: #c5e0f7;
+ background: -moz-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%);
+ 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";
+ width: 100%;
+ min-height: 100%;
+ height: auto;
+ color: #000;
+
+ .mx_ErrorView_container {
+ max-width: 680px;
+ margin: auto;
+ }
+
+ .mx_Button {
+ border: 0;
+ border-radius: 4px;
+ font-size: $font-18px;
+ margin-left: 4px;
+ margin-right: 4px;
+ min-width: 80px;
+ background-color: #03b381;
+ color: #fff;
+ cursor: pointer;
+ padding: 12px 22px;
+ word-break: break-word;
+ text-decoration: none;
+ }
+
+ .mx_Center {
+ justify-content: center;
+ }
+
+ .mx_HomePage_header {
+ color: #2e2f32;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ font-size: $font-16px;
+ h1 {
+ font-size: $font-32px;
+ }
+ h2 {
+ font-size: $font-24px;
+ color: #000;
+ }
+
+ .mx_HomePage_col {
+ display: flex;
+ flex-direction: row;
+ }
+
+ .mx_HomePage_row {
+ flex: 1 1 0;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ }
+
+ .mx_HomePage_logo {
+ margin: auto 20px auto 0;
+ }
+
+ h1, h2 {
+ font-weight: 600;
+ margin-bottom: 32px;
+ }
+
+ .mx_Spacer {
+ margin-top: 24px;
+ }
+
+ .mx_FooterLink {
+ color: #368bd6;
+ text-decoration: none;
+ }
+}
diff --git a/res/decoder-ring/datatypes.js b/res/decoder-ring/datatypes.js
new file mode 100644
index 0000000000..93a779e079
--- /dev/null
+++ b/res/decoder-ring/datatypes.js
@@ -0,0 +1,107 @@
+/*
+ * Quick-n-dirty algebraic datatypes.
+ *
+ * These let us handle the possibility of failure without having to constantly write code to check for it.
+ * We can apply all of the transformations we need as if the data is present using `map`.
+ * If there's a None, or a FetchError, or a Pending, those are left untouched.
+ *
+ * I've used perhaps an odd bit of terminology from scalaz in `fold`. This is basically a `switch` statement:
+ * You pass it a set of functions to handle the various different states of the datatype, and if it finds the
+ * function it'll call it on its value.
+ *
+ * It's handy to have this in functional style when dealing with React as we can dispatch different ways of rendering
+ * really simply:
+ * ```
+ * bundleFetchStatus.fold({
+ * some: (fetchStatus) => ,
+ * }),
+ * ```
+ */
+
+
+class Optional {
+ static from(value) {
+ return value && Some.of(value) || None;
+ }
+ map(f) {
+ return this;
+ }
+ flatMap(f) {
+ return this;
+ }
+ fold({ none }) {
+ return none && none();
+ }
+}
+class Some extends Optional {
+ constructor(value) {
+ super();
+ this.value = value;
+ }
+ map(f) {
+ return Some.of(f(this.value));
+ }
+ flatMap(f) {
+ return f(this.value);
+ }
+ fold({ some }) {
+ return some && some(this.value);
+ }
+ static of(value) {
+ return new Some(value);
+ }
+}
+const None = new Optional();
+
+class FetchStatus {
+ constructor(opt = {}) {
+ this.opt = { at: Date.now(), ...opt };
+ }
+ map(f) {
+ return this;
+ }
+ flatMap(f) {
+ return this;
+ }
+}
+class Success extends FetchStatus {
+ static of(value) {
+ return new Success(value);
+ }
+ constructor(value, opt) {
+ super(opt);
+ this.value = value;
+ }
+ map(f) {
+ return new Success(f(this.value), this.opt);
+ }
+ flatMap(f) {
+ return f(this.value, this.opt);
+ }
+ fold({ success }) {
+ return success instanceof Function ? success(this.value, this.opt) : undefined;
+ }
+}
+class Pending extends FetchStatus {
+ static of(opt) {
+ return new Pending(opt);
+ }
+ constructor(opt) {
+ super(opt);
+ }
+ fold({ pending }) {
+ return pending instanceof Function ? pending(this.opt) : undefined;
+ }
+}
+class FetchError extends FetchStatus {
+ static of(reason, opt) {
+ return new FetchError(reason, opt);
+ }
+ constructor(reason, opt) {
+ super(opt);
+ this.reason = reason;
+ }
+ fold({ error }) {
+ return error instanceof Function ? error(this.reason, this.opt) : undefined;
+ }
+}
diff --git a/res/decoder-ring/decoder.js b/res/decoder-ring/decoder.js
new file mode 100644
index 0000000000..b0cbd3c2e9
--- /dev/null
+++ b/res/decoder-ring/decoder.js
@@ -0,0 +1,336 @@
+class StartupError extends Error {}
+
+/*
+ * We need to know the bundle path before we can fetch the sourcemap files. In a production environment, we can guess
+ * it using this.
+ */
+async function getBundleName(baseUrl) {
+ const res = await fetch(new URL("index.html", baseUrl).toString());
+ if (!res.ok) {
+ throw new StartupError(`Couldn't fetch index.html to prefill bundle; ${res.status} ${res.statusText}`);
+ }
+ const index = await res.text();
+ return index.split("\n").map((line) =>
+ line.match(/
+
+
+
+
+
+
+
+
+
+
+
+
+ Waiting for javascript to run...
+
+
+