From 4b12b711eeded3e6f0270a1d7de7d3cfb1d01a0c Mon Sep 17 00:00:00 2001 From: Dariusz Niemczyk Date: Sun, 1 Aug 2021 16:17:58 +0200 Subject: [PATCH 01/31] Add data-mx-theme to theme css for hot-reload --- src/vector/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vector/index.html b/src/vector/index.html index 1a242a80ed..29b1f13221 100644 --- a/src/vector/index.html +++ b/src/vector/index.html @@ -43,7 +43,7 @@ if (match) { var title = match[1].charAt(0).toUpperCase() + match[1].slice(1); %> - + <% } else { %> <% } From b677edbc58d54dee274f0b193b2a931554451f33 Mon Sep 17 00:00:00 2001 From: Dariusz Niemczyk Date: Sun, 1 Aug 2021 16:28:38 +0200 Subject: [PATCH 02/31] Make CSS Hot-reload work in a hacky way --- package.json | 4 +- src/vector/devcss.ts | 33 ++++++++++++ src/vector/index.ts | 8 +++ webpack.config.js | 119 ++++++++++++++++++++++++++++++++++--------- yarn.lock | 38 +++++++++++++- 5 files changed, 174 insertions(+), 28 deletions(-) create mode 100644 src/vector/devcss.ts diff --git a/package.json b/package.json index eb6c4136cf..fcf2b1fa53 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js\"", "start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n reskindex,reskindex-react,res,element-js \"yarn reskindex:watch\" \"yarn reskindex:watch-react\" \"yarn start:res\" \"yarn start:js --https\"", "start:res": "yarn build:jitsi && node scripts/copy-res.js -w", - "start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development --disable-host-check", + "start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --progress --mode development --disable-host-check --hot", "lint": "yarn lint:types && yarn lint:js && yarn lint:style", "lint:js": "eslint --max-warnings 0 src", "lint:js-fix": "eslint --fix src", @@ -141,6 +141,8 @@ "rimraf": "^3.0.2", "shell-escape": "^0.2.0", "simple-proxy-agent": "^1.1.0", + "string-replace-loader": "2", + "style-loader": "2", "stylelint": "^13.9.0", "stylelint-config-standard": "^20.0.0", "stylelint-scss": "^3.18.0", diff --git a/src/vector/devcss.ts b/src/vector/devcss.ts new file mode 100644 index 0000000000..1937ca949d --- /dev/null +++ b/src/vector/devcss.ts @@ -0,0 +1,33 @@ +/* +Copyright 2021 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. +*/ + +/** + * This code will be autoremoved on production builds. + * The purpose of this code is that the webpack's `string-replace-loader` + * pretty much search for this string in this specific file and replaces it + * like a macro before any previous compilations, which allows us to inject + * some css requires statements that are specific to the themes we have turned + * on by ourselves. Without that very specific workaround, webpack would just + * import all the CSSes, which would make the whole thing useless, as on my + * machine with i9 the recompilation for all themes turned ou would take way + * over 30s, which is definitely too high for nice css reloads speed. + * + * For more details, see webpack.config.js:184 (string-replace-loader) + */ +if (process.env.NODE_ENV === 'development') { + "use theming"; +} + diff --git a/src/vector/index.ts b/src/vector/index.ts index 8817167069..fe424c47f2 100644 --- a/src/vector/index.ts +++ b/src/vector/index.ts @@ -25,6 +25,14 @@ require('gfm.css/gfm.css'); require('highlight.js/styles/github.css'); require('katex/dist/katex.css'); +/** + * This require is necessary only for purposes of CSS hot reload, as otherwise + * webpack has some incredibly problems figuring out which css files should be + * hot reloaded, even with proper hints for the loader. + * + * On production build it's going to be an empty module, so don't worry about that. + */ +require('./devcss'); // These are things that can run before the skin loads - be careful not to reference the react-sdk though. import { parseQsFromFragment } from "./url_utils"; import './modernizr'; diff --git a/webpack.config.js b/webpack.config.js index bb1d5d9ff5..03ac4a8eff 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,6 +1,7 @@ /* eslint-disable quote-props */ const path = require('path'); +const webpack = require('webpack'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const TerserPlugin = require('terser-webpack-plugin'); @@ -10,9 +11,35 @@ const HtmlWebpackInjectPreload = require('@principalstudio/html-webpack-inject-p let ogImageUrl = process.env.RIOT_OG_IMAGE_URL; if (!ogImageUrl) ogImageUrl = 'https://app.element.io/themes/element/img/logos/opengraph.png'; -const additionalPlugins = [ - // This is where you can put your customisation replacements. -]; +const cssThemes = { + // CSS themes + "theme-legacy": "./node_modules/matrix-react-sdk/res/themes/legacy-light/css/legacy-light.scss", + "theme-legacy-dark": "./node_modules/matrix-react-sdk/res/themes/legacy-dark/css/legacy-dark.scss", + "theme-light": "./node_modules/matrix-react-sdk/res/themes/light/css/light.scss", + "theme-dark": "./node_modules/matrix-react-sdk/res/themes/dark/css/dark.scss", + "theme-light-custom": "./node_modules/matrix-react-sdk/res/themes/light-custom/css/light-custom.scss", + "theme-dark-custom": "./node_modules/matrix-react-sdk/res/themes/dark-custom/css/dark-custom.scss", +}; + +function getActiveThemes() { + const theme = process.env.MATRIX_THEMES ?? 'light,dark'; + const themes = theme.split(',').filter(x => x).map(x => x.trim()).filter(x => x); + return themes; +} + +const ACTIVE_THEMES = getActiveThemes(); +function getThemesImports() { + const imports = ACTIVE_THEMES.map((t, index) => { + const themeImportPath = cssThemes[`theme-${t}`].replace('./node_modules/', ''); + return themeImportPath; + }); + const s = JSON.stringify(ACTIVE_THEMES); + return ` + window.MX_insertedThemeStylesCounter = 0 + window.MX_DEV_ACTIVE_THEMES = (${s}); + ${imports.map(i => `import("${i}")`).join('\n')}; + `; +} module.exports = (env, argv) => { let nodeEnv = argv.mode; @@ -29,6 +56,7 @@ module.exports = (env, argv) => { // application to productions standards nodeEnv = "production"; } + const devMode = nodeEnv !== 'production'; const development = {}; if (argv.mode === "production") { @@ -48,6 +76,13 @@ module.exports = (env, argv) => { return { ...development, + watch: true, + watchOptions: { + aggregateTimeout: 200, + poll: 1000, + ignored: [/node_modules([\\]+|\/)+(?!matrix-react-sdk|matrix-js-sdk)/], + }, + node: { // Mock out the NodeFS module: The opus decoder imports this wrongly. fs: 'empty', @@ -59,14 +94,7 @@ module.exports = (env, argv) => { "jitsi": "./src/vector/jitsi/index.ts", "usercontent": "./node_modules/matrix-react-sdk/src/usercontent/index.js", "recorder-worklet": "./node_modules/matrix-react-sdk/src/audio/RecorderWorklet.ts", - - // CSS themes - "theme-legacy": "./node_modules/matrix-react-sdk/res/themes/legacy-light/css/legacy-light.scss", - "theme-legacy-dark": "./node_modules/matrix-react-sdk/res/themes/legacy-dark/css/legacy-dark.scss", - "theme-light": "./node_modules/matrix-react-sdk/res/themes/light/css/light.scss", - "theme-dark": "./node_modules/matrix-react-sdk/res/themes/dark/css/dark.scss", - "theme-light-custom": "./node_modules/matrix-react-sdk/res/themes/light-custom/css/light-custom.scss", - "theme-dark-custom": "./node_modules/matrix-react-sdk/res/themes/dark-custom/css/dark-custom.scss", + ...(devMode ? {} : cssThemes), }, optimization: { @@ -89,7 +117,7 @@ module.exports = (env, argv) => { // This fixes duplicate files showing up in chrome with sourcemaps enabled. // See https://github.com/webpack/webpack/issues/7128 for more info. - namedModules: false, + namedModules: true, // Minification is normally enabled by default for webpack in production mode, but // we use a CSS optimizer too and need to manage it ourselves. @@ -150,6 +178,14 @@ module.exports = (env, argv) => { /olm[\\/](javascript[\\/])?olm\.js$/, ], rules: [ + devMode && { + test: /devcss\.ts$/, + loader: 'string-replace-loader', + options: { + search: '"use theming";', + replace: getThemesImports(), + }, + }, { test: /\.worker\.ts$/, loader: "worker-loader", @@ -181,7 +217,7 @@ module.exports = (env, argv) => { { test: /\.css$/, use: [ - MiniCssExtractPlugin.loader, + devMode ? 'style-loader' : MiniCssExtractPlugin.loader, { loader: 'css-loader', options: { @@ -219,7 +255,7 @@ module.exports = (env, argv) => { // It's important that this plugin is last otherwise we end // up with broken CSS. - require('postcss-preset-env')({stage: 3, browsers: 'last 2 versions'}), + require('postcss-preset-env')({ stage: 3, browsers: 'last 2 versions' }), ], parser: "postcss-scss", "local-plugins": true, @@ -230,7 +266,31 @@ module.exports = (env, argv) => { { test: /\.scss$/, use: [ - MiniCssExtractPlugin.loader, + /** + * This code is hopeful that no .scss outside of our themes will be directly imported in any + * of the JS/TS files. + * Should be MUCH better with webpack 5, but we're stuck to this solution for now. + */ + devMode ? { + loader: 'style-loader', options: { + attributes: { + 'data-mx-theme': 'replace_me', + }, + // Properly disable all other instances of themes + insert: function insertBeforeAt(element) { + const isMatrixTheme = element.attributes['data-mx-theme'].value === 'replace_me'; + const parent = document.querySelector('head'); + + element.disabled = true; + if (isMatrixTheme) { + element.attributes['data-mx-theme'].value = window.MX_DEV_ACTIVE_THEMES[window.MX_insertedThemeStylesCounter]; + window.MX_insertedThemeStylesCounter++; + } + + parent.appendChild(element); + }, + }, + } : MiniCssExtractPlugin.loader, { loader: 'css-loader', options: { @@ -257,7 +317,7 @@ module.exports = (env, argv) => { // It's important that this plugin is last otherwise we end // up with broken CSS. - require('postcss-preset-env')({stage: 3, browsers: 'last 2 versions'}), + require('postcss-preset-env')({ stage: 3, browsers: 'last 2 versions' }), ], parser: "postcss-scss", "local-plugins": true, @@ -374,9 +434,15 @@ module.exports = (env, argv) => { }, plugins: [ + new webpack.EnvironmentPlugin({ + NODE_ENV: 'development', // use 'development' unless process.env.NODE_ENV is defined + DEBUG: false, + }), + // This exports our CSS using the splitChunks and loaders above. new MiniCssExtractPlugin({ - filename: 'bundles/[hash]/[name].css', + filename: "bundles/[hash]/[name].css", + chunkFilename: "bundles/[hash]/[name].css", ignoreOrder: false, // Enable to remove warnings about conflicting order }), @@ -437,7 +503,6 @@ module.exports = (env, argv) => { files: [{ match: /.*Inter.*\.woff2$/ }], }), - ...additionalPlugins, ], output: { @@ -457,17 +522,21 @@ module.exports = (env, argv) => { // configuration for the webpack-dev-server devServer: { // serve unwebpacked assets from webapp. - contentBase: './webapp', + contentBase: [ + './src/', + './webapp', + './bundles/**', + './node_modules/matrix-react-sdk/**', + './node_modules/matrix-js-sdk/**', + ], // Only output errors, warnings, or new compilations. // This hides the massive list of modules. stats: 'minimal', - - // hot module replacement doesn't work (I think we'd need react-hot-reload?) - // so webpack-dev-server reloads the page on every update which is quite - // tedious in Riot since that can take a while. - hot: false, - inline: false, + hot: true, + injectHot: true, + hotOnly: true, + inline: true, }, }; }; diff --git a/yarn.lock b/yarn.lock index 39fd6d5ba8..74e40d7f90 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1454,7 +1454,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7": +"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": version "7.0.8" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== @@ -1919,7 +1919,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -7130,6 +7130,15 @@ loader-utils@^1.0.0, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4 emojis-list "^3.0.0" json5 "^1.0.1" +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -10196,6 +10205,15 @@ schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7 ajv "^6.12.4" ajv-keywords "^3.5.2" +schema-utils@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -10718,6 +10736,14 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +string-replace-loader@2: + version "2.3.0" + resolved "https://registry.yarnpkg.com/string-replace-loader/-/string-replace-loader-2.3.0.tgz#7f29be7d73c94dd92eccd5c5a15651181d7ecd3d" + integrity sha512-HYBIHStViMKLZC/Lehxy42OuwsBaPzX/LjcF5mkJlE2SnHXmW6SW6eiHABTXnY8ZCm/REbdJ8qnA0ptmIzN0Ng== + dependencies: + loader-utils "^1.2.3" + schema-utils "^2.6.5" + string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -10833,6 +10859,14 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +style-loader@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" + integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + style-search@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" From a9f3f873a5d24a6544e2d975d077aded204b6bf6 Mon Sep 17 00:00:00 2001 From: Dariusz Niemczyk Date: Sun, 1 Aug 2021 17:05:33 +0200 Subject: [PATCH 03/31] Add a .env config and explanation how to use HMR --- .env.example | 13 ++++++++ .gitignore | 1 + README.md | 51 +++++++++++++++++++------------ package.json | 1 + webpack.config.js | 77 +++++++++++++++++++++++++++++------------------ yarn.lock | 5 +++ 6 files changed, 99 insertions(+), 49 deletions(-) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000000..52f2a023a2 --- /dev/null +++ b/.env.example @@ -0,0 +1,13 @@ +# If you want to have proper hot-reload css experience, define one and set this on. +CSS_HOT_RELOAD=1 +# Define which one theme you want to load for hot-reload purposes. +# You can load multiple themes at once, but switching between is quite buggy with the hot-reload turned on. +# To use a single theme just uncomment a line with the theme you want to use. +MATRIX_THEMES='light' +#MATRIX_THEMES='dark' +#MATRIX_THEMES='light-legacy' +#MATRIX_THEMES='dark-legacy' +#MATRIX_THEMES='light-custom' +#MATRIX_THEMES='dark-custom' +# If you want to use multiple themes, define the combinations manually like below: +#MATRIX_THEMES='light,dark' diff --git a/.gitignore b/.gitignore index bc6255165b..52152e1a11 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ electron/pub /webpack-stats.json .vscode .vscode/ +.env diff --git a/README.md b/README.md index 8bf6ecd8cf..76acfcaf85 100644 --- a/README.md +++ b/README.md @@ -30,14 +30,14 @@ and [element-ios](https://github.com/vector-im/element-ios). Getting Started =============== -The easiest way to test Element is to just use the hosted copy at https://app.element.io. -The `develop` branch is continuously deployed to https://develop.element.io +The easiest way to test Element is to just use the hosted copy at . +The `develop` branch is continuously deployed to for those who like living dangerously. 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/element-web/releases +1. Download the latest version from 1. Untar the tarball on your web server 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) @@ -46,7 +46,7 @@ released version of Element: 1. Enter the URL into your browser and log into Element! Releases are signed using gpg and the OpenPGP standard, and can be checked against the public key located -at https://packages.riot.im/element-release-key.asc. +at . 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 @@ -72,7 +72,7 @@ access to Element (or other apps) due to sharing the same domain. We have put some coarse mitigations into place to try to protect against this situation, but it's still not good practice to do it in the first place. See -https://github.com/vector-im/element-web/issues/1977 for more details. + for more details. Configuration best practices ---------------------------- @@ -80,15 +80,15 @@ 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 +* 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` +* 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 +* 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 +* The `X-XSS-Protection: 1; mode=block;` header, for basic XSS protection in legacy browsers. [mime-sniffing]: @@ -127,10 +127,10 @@ guide](https://classic.yarnpkg.com/en/docs/install) if you do not have it alread 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 + * 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://develop.element.io - the continuous integration release of + can use - 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. @@ -148,15 +148,16 @@ Running as a Desktop app ======================== Element can also be run as a desktop app, wrapped in Electron. You can download a -pre-built version from https://element.io/get-started or, if you prefer, +pre-built version from or, if you prefer, build it yourself. -To build it yourself, follow the instructions at https://github.com/vector-im/element-desktop. +To build it yourself, follow the instructions at . Many thanks to @aviraldg for the initial work on the Electron integration. Other options for running as a desktop app: - * @asdf:matrix.org points out that you can use nativefier and it just works(tm) + +* @asdf:matrix.org points out that you can use nativefier and it just works(tm) ```bash yarn global add nativefier @@ -171,6 +172,7 @@ Running from Docker 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/element-web ``` @@ -178,11 +180,13 @@ 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/element-web/config.json` then your Docker command would be: + ```bash 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/element-web.git element-web cd element-web @@ -192,6 +196,7 @@ docker build . If you're building a custom branch, or want to use the develop branch, check out the appropriate element-web branch and then run: + ```bash docker build -t \ --build-arg USE_CUSTOM_SDKS=true \ @@ -224,6 +229,7 @@ Caching requirements ==================== Element requires the following URLs not to be cached, when/if you are serving Element from your own webserver: + ``` /config.*.json /i18n @@ -261,6 +267,10 @@ 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 Element itself. +CSS hot-reload is currently an opt-in development feature, and if you want to have +it working properly on your environment, create a `.env` file in this repository +with proper environmental, see `.env.example` for documentation and example. + Setting up a dev environment ============================ @@ -302,14 +312,15 @@ yarn reskindex yarn start ``` - Wait a few seconds for the initial build to finish; you should see something like: + ``` [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 disables caching, so do NOT use it in production. @@ -317,7 +328,7 @@ Wait a few seconds for the initial build to finish; you should see something lik Configure the app by copying `config.sample.json` to `config.json` and modifying it. See the [configuration docs](docs/config.md) for details. -Open http://127.0.0.1:8080/ in your browser to see your newly built Element. +Open 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 @@ -393,14 +404,14 @@ Triaging issues We strive to completely cover all applicable issues with these core labels: 1. __Type__ — Every issue is assigned a type: - - __[T-Defect](https://github.com/vector-im/element-web/labels/T-Defect):__ + * __[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):__ + * __[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):__ + * __[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):__ + * __[T-Other](https://github.com/vector-im/element-web/labels/T-Other):__ Questions, user support, anything else 2. __Severity__ — All issues labeled `T-Defect` are also assigned a severity: diff --git a/package.json b/package.json index fcf2b1fa53..1b2c87f331 100644 --- a/package.json +++ b/package.json @@ -104,6 +104,7 @@ "concurrently": "^5.3.0", "cpx": "^1.5.0", "css-loader": "^3.6.0", + "dotenv": "^10.0.0", "eslint": "7.18.0", "eslint-config-google": "^0.14.0", "eslint-plugin-matrix-org": "github:matrix-org/eslint-plugin-matrix-org#main", diff --git a/webpack.config.js b/webpack.config.js index 03ac4a8eff..035cfdb977 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,5 +1,6 @@ /* eslint-disable quote-props */ +const dotenv = require('dotenv'); const path = require('path'); const webpack = require('webpack'); const HtmlWebpackPlugin = require('html-webpack-plugin'); @@ -21,24 +22,29 @@ const cssThemes = { "theme-dark-custom": "./node_modules/matrix-react-sdk/res/themes/dark-custom/css/dark-custom.scss", }; -function getActiveThemes() { - const theme = process.env.MATRIX_THEMES ?? 'light,dark'; - const themes = theme.split(',').filter(x => x).map(x => x.trim()).filter(x => x); - return themes; +let dotenvConfig = { parsed: {} }; +try { + dotenvConfig = dotenv.config(); +} catch (err) { + dotenvConfig = { + parsed: { + CSS_HOT_RELOAD: 0, + MATRIX_THEMES: 'light', + }, + }; } -const ACTIVE_THEMES = getActiveThemes(); -function getThemesImports() { - const imports = ACTIVE_THEMES.map((t, index) => { - const themeImportPath = cssThemes[`theme-${t}`].replace('./node_modules/', ''); - return themeImportPath; - }); - const s = JSON.stringify(ACTIVE_THEMES); - return ` - window.MX_insertedThemeStylesCounter = 0 - window.MX_DEV_ACTIVE_THEMES = (${s}); - ${imports.map(i => `import("${i}")`).join('\n')}; - `; +const CSS_HOT_RELOAD = process.env.CSS_HOT_RELOAD ?? dotenvConfig.CSS_HOT_RELOAD; +const MATRIX_THEMES = process.env.MATRIX_THEMES ?? dotenvConfig.MATRIX_THEMES; + +function getActiveThemes() { + // We want to use `light` theme by default if it's not defined. + const theme = MATRIX_THEMES; + const themes = theme.split(',').filter(x => x).map(x => x.trim()).filter(x => x); + if (themes.length > 1) { + throw new Error('Please see `.env.example` for proper hotreload&themes configuation.'); + } + return themes; } module.exports = (env, argv) => { @@ -57,6 +63,7 @@ module.exports = (env, argv) => { nodeEnv = "production"; } const devMode = nodeEnv !== 'production'; + const useCssHotReload = CSS_HOT_RELOAD === '1' && devMode; const development = {}; if (argv.mode === "production") { @@ -73,16 +80,22 @@ module.exports = (env, argv) => { const reactSdkSrcDir = path.resolve(require.resolve("matrix-react-sdk/package.json"), '..', 'src'); const jsSdkSrcDir = path.resolve(require.resolve("matrix-js-sdk/package.json"), '..', 'src'); + const ACTIVE_THEMES = getActiveThemes(); + function getThemesImports() { + const imports = ACTIVE_THEMES.map((t, index) => { + const themeImportPath = cssThemes[`theme-${ t }`].replace('./node_modules/', ''); + return themeImportPath; + }); + const s = JSON.stringify(ACTIVE_THEMES); + return ` + window.MX_insertedThemeStylesCounter = 0 + window.MX_DEV_ACTIVE_THEMES = (${ s }); + ${ imports.map(i => `import("${ i }")`).join('\n') }; + `; + } + return { ...development, - - watch: true, - watchOptions: { - aggregateTimeout: 200, - poll: 1000, - ignored: [/node_modules([\\]+|\/)+(?!matrix-react-sdk|matrix-js-sdk)/], - }, - node: { // Mock out the NodeFS module: The opus decoder imports this wrongly. fs: 'empty', @@ -94,7 +107,7 @@ module.exports = (env, argv) => { "jitsi": "./src/vector/jitsi/index.ts", "usercontent": "./node_modules/matrix-react-sdk/src/usercontent/index.js", "recorder-worklet": "./node_modules/matrix-react-sdk/src/audio/RecorderWorklet.ts", - ...(devMode ? {} : cssThemes), + ...(useCssHotReload ? {} : cssThemes), }, optimization: { @@ -178,7 +191,7 @@ module.exports = (env, argv) => { /olm[\\/](javascript[\\/])?olm\.js$/, ], rules: [ - devMode && { + useCssHotReload && { test: /devcss\.ts$/, loader: 'string-replace-loader', options: { @@ -217,7 +230,7 @@ module.exports = (env, argv) => { { test: /\.css$/, use: [ - devMode ? 'style-loader' : MiniCssExtractPlugin.loader, + MiniCssExtractPlugin.loader, { loader: 'css-loader', options: { @@ -271,8 +284,14 @@ module.exports = (env, argv) => { * of the JS/TS files. * Should be MUCH better with webpack 5, but we're stuck to this solution for now. */ - devMode ? { + useCssHotReload ? { loader: 'style-loader', options: { + /** + * If we refactor the `theme.js` in `matrix-react-sdk` a little bit, + * we could try using `lazyStyleTag` here to add and remove styles on demand, + * that would nicely resolve issues of race conditions for themes, + * at least for development purposes. + */ attributes: { 'data-mx-theme': 'replace_me', }, @@ -430,7 +449,7 @@ module.exports = (env, argv) => { }, ], }, - ], + ].filter(Boolean), }, plugins: [ diff --git a/yarn.lock b/yarn.lock index 74e40d7f90..495862952c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4024,6 +4024,11 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + duplexer@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" From da4a49fd3159b202c52a0b10e8ba75a09b21c69c Mon Sep 17 00:00:00 2001 From: Dariusz Niemczyk Date: Sun, 1 Aug 2021 17:13:29 +0200 Subject: [PATCH 04/31] Add a default theme for CI --- webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack.config.js b/webpack.config.js index 035cfdb977..7aab5d1387 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -39,7 +39,7 @@ const MATRIX_THEMES = process.env.MATRIX_THEMES ?? dotenvConfig.MATRIX_THEMES; function getActiveThemes() { // We want to use `light` theme by default if it's not defined. - const theme = MATRIX_THEMES; + const theme = MATRIX_THEMES ?? 'light'; const themes = theme.split(',').filter(x => x).map(x => x.trim()).filter(x => x); if (themes.length > 1) { throw new Error('Please see `.env.example` for proper hotreload&themes configuation.'); From 88df5c33a9e85674d39c1621c130d8122ce3f9a4 Mon Sep 17 00:00:00 2001 From: Dariusz Niemczyk <3636685+Palid@users.noreply.github.com> Date: Mon, 2 Aug 2021 11:09:10 +0200 Subject: [PATCH 05/31] Update webpack.config.js Co-authored-by: Germain --- webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack.config.js b/webpack.config.js index 7aab5d1387..0701b0f437 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -42,7 +42,7 @@ function getActiveThemes() { const theme = MATRIX_THEMES ?? 'light'; const themes = theme.split(',').filter(x => x).map(x => x.trim()).filter(x => x); if (themes.length > 1) { - throw new Error('Please see `.env.example` for proper hotreload&themes configuation.'); + throw new Error('Please see `.env.example` for proper hot reload & themes configuration.'); } return themes; } From 10fb3859faab523dad0f9cce23fa7110fd943569 Mon Sep 17 00:00:00 2001 From: Dariusz Niemczyk <“palid@users.noreply.github.com”> Date: Mon, 2 Aug 2021 22:27:13 +0200 Subject: [PATCH 06/31] Add better docs and iframe support --- .env.example | 3 +- webpack.config.js | 74 +++++++++++++++++++---------------------------- 2 files changed, 32 insertions(+), 45 deletions(-) diff --git a/.env.example b/.env.example index 52f2a023a2..65d7581ad0 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,6 @@ # If you want to have proper hot-reload css experience, define one and set this on. CSS_HOT_RELOAD=1 # Define which one theme you want to load for hot-reload purposes. -# You can load multiple themes at once, but switching between is quite buggy with the hot-reload turned on. # To use a single theme just uncomment a line with the theme you want to use. MATRIX_THEMES='light' #MATRIX_THEMES='dark' @@ -9,5 +8,7 @@ MATRIX_THEMES='light' #MATRIX_THEMES='dark-legacy' #MATRIX_THEMES='light-custom' #MATRIX_THEMES='dark-custom' +# You can load multiple themes at once, but switching between them may require full page reload. +# It will also multiple compliation times by the number of turned on themes. # If you want to use multiple themes, define the combinations manually like below: #MATRIX_THEMES='light,dark' diff --git a/webpack.config.js b/webpack.config.js index 0701b0f437..8df042d14c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -9,6 +9,7 @@ const TerserPlugin = require('terser-webpack-plugin'); const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const HtmlWebpackInjectPreload = require('@principalstudio/html-webpack-inject-preload'); +dotenv.config(); let ogImageUrl = process.env.RIOT_OG_IMAGE_URL; if (!ogImageUrl) ogImageUrl = 'https://app.element.io/themes/element/img/logos/opengraph.png'; @@ -22,28 +23,10 @@ const cssThemes = { "theme-dark-custom": "./node_modules/matrix-react-sdk/res/themes/dark-custom/css/dark-custom.scss", }; -let dotenvConfig = { parsed: {} }; -try { - dotenvConfig = dotenv.config(); -} catch (err) { - dotenvConfig = { - parsed: { - CSS_HOT_RELOAD: 0, - MATRIX_THEMES: 'light', - }, - }; -} - -const CSS_HOT_RELOAD = process.env.CSS_HOT_RELOAD ?? dotenvConfig.CSS_HOT_RELOAD; -const MATRIX_THEMES = process.env.MATRIX_THEMES ?? dotenvConfig.MATRIX_THEMES; - function getActiveThemes() { // We want to use `light` theme by default if it's not defined. - const theme = MATRIX_THEMES ?? 'light'; + const theme = process.env.MATRIX_THEMES ?? 'dark'; const themes = theme.split(',').filter(x => x).map(x => x.trim()).filter(x => x); - if (themes.length > 1) { - throw new Error('Please see `.env.example` for proper hot reload & themes configuration.'); - } return themes; } @@ -63,7 +46,7 @@ module.exports = (env, argv) => { nodeEnv = "production"; } const devMode = nodeEnv !== 'production'; - const useCssHotReload = CSS_HOT_RELOAD === '1' && devMode; + const useCssHotReload = process.env.CSS_HOT_RELOAD === '1' && devMode; const development = {}; if (argv.mode === "production") { @@ -88,10 +71,10 @@ module.exports = (env, argv) => { }); const s = JSON.stringify(ACTIVE_THEMES); return ` - window.MX_insertedThemeStylesCounter = 0 - window.MX_DEV_ACTIVE_THEMES = (${ s }); - ${ imports.map(i => `import("${ i }")`).join('\n') }; - `; + window.MX_insertedThemeStylesCounter = 0; + window.MX_DEV_ACTIVE_THEMES = (${ s }); + ${ imports.map(i => `import("${ i }")`).join('\n') }; + `; } return { @@ -285,27 +268,30 @@ module.exports = (env, argv) => { * Should be MUCH better with webpack 5, but we're stuck to this solution for now. */ useCssHotReload ? { - loader: 'style-loader', options: { - /** - * If we refactor the `theme.js` in `matrix-react-sdk` a little bit, - * we could try using `lazyStyleTag` here to add and remove styles on demand, - * that would nicely resolve issues of race conditions for themes, - * at least for development purposes. - */ - attributes: { - 'data-mx-theme': 'replace_me', - }, - // Properly disable all other instances of themes + loader: 'style-loader', + /** + * If we refactor the `theme.js` in `matrix-react-sdk` a little bit, + * we could try using `lazyStyleTag` here to add and remove styles on demand, + * that would nicely resolve issues of race conditions for themes, + * at least for development purposes. + */ + options: { + insert: function insertBeforeAt(element) { - const isMatrixTheme = element.attributes['data-mx-theme'].value === 'replace_me'; const parent = document.querySelector('head'); - - element.disabled = true; - if (isMatrixTheme) { - element.attributes['data-mx-theme'].value = window.MX_DEV_ACTIVE_THEMES[window.MX_insertedThemeStylesCounter]; - window.MX_insertedThemeStylesCounter++; + // We're in iframe + if (!window.MX_DEV_ACTIVE_THEMES) { + parent.appendChild(element); + return; } - + // Properly disable all other instances of themes + element.disabled = true; + element.onload = () => { + element.disabled = true; + }; + const theme = window.MX_DEV_ACTIVE_THEMES[window.MX_insertedThemeStylesCounter]; + element.setAttribute('data-mx-theme', theme); + window.MX_insertedThemeStylesCounter++; parent.appendChild(element); }, }, @@ -460,8 +446,8 @@ module.exports = (env, argv) => { // This exports our CSS using the splitChunks and loaders above. new MiniCssExtractPlugin({ - filename: "bundles/[hash]/[name].css", - chunkFilename: "bundles/[hash]/[name].css", + filename: useCssHotReload ? "bundles/[name].css" : "bundles/[hash]/[name].css", + chunkFilename: useCssHotReload ? "bundles/[name].css" : "bundles/[hash]/[name].css", ignoreOrder: false, // Enable to remove warnings about conflicting order }), From c90430954bc1d8fa947bc2734b275783391e3099 Mon Sep 17 00:00:00 2001 From: Ekaterina Gerasimova Date: Thu, 29 Jul 2021 16:17:04 +0100 Subject: [PATCH 07/31] Update issue labelling guidelines in README Add "prevalence" labels to use as a guideline for how often issues crop up. Combine prevalence and severity to indicate correspondence to how defects should be prioritised by the team. --- README.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 8bf6ecd8cf..22166b66bf 100644 --- a/README.md +++ b/README.md @@ -415,19 +415,24 @@ We strive to completely cover all applicable issues with these core labels: * __[S-Tolerable](https://github.com/vector-im/element-web/labels/S-Tolerable):__ Purely cosmetic or low / no impact to users -3. __Priority__ — All issues which are not `T-Other` are assigned a priority: - * __[P1](https://github.com/vector-im/element-web/labels/P1):__ Next - * __[P2](https://github.com/vector-im/element-web/labels/P2):__ Later - * __[P3](https://github.com/vector-im/element-web/labels/P3):__ Eventually - * __[P4](https://github.com/vector-im/element-web/labels/P4):__ Interesting — - Not yet scheduled, will accept patches - * __[P5](https://github.com/vector-im/element-web/labels/P5):__ Dubious — - Will not schedule, would consider patches +3. __Prevalence__ — All issues labeled `T-Defect` are also assigned a prevalence: + * __[P-High](https://github.com/vector-im/element-web/labels/P-High):__ Affects most users regularly or impacts most users' first experience (e.g. registration) + * __[P-Medium](https://github.com/vector-im/element-web/labels/P-Medium):__ Affects some users regularly or most users rarely + * __[P-Low](https://github.com/vector-im/element-web/labels/P-Low):__ Most users are unlikely to come across this or it is a corner case 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. +The Priority label is now deprecated. Defects will now be classed based on their severity and frequency +| Labels | Equivalent priority | What it means | +| ----------- | ----------- | ----------- | +| S‑Critical and F‑High
S‑Critical and F‑Medium
S‑Major and F‑High | P1 | These issues should be worked on in this sprint or next sprint. If the backlog of issues is too long, we should reevaluate why the bugs are not caught earlier. | +| S‑Critical and F‑Low
S‑Major and F‑Medium
S‑Minor and F‑High | P2 | When all the highest priority bugs are done, this is the next set to tackle. Ideally we should be fixing a few issues from this group every week. | +| S‑Major and F‑Low
S‑Minor and F‑Medium
S‑Tolerable and F‑High | P3 | These issues are wishful thinking. We hope to get to them one day, but we they are low priority. There are likely to be some good new contributor issues in here. | +| S‑Minor and F‑Low
S‑Tolerable and F‑Medium
S‑Minor and F‑Low | P4 and P5 | These issues are unlikely to be actively looked at by the webapp team, but may be picked up by community. | + + ### Other common labels We have a handful of other labels which are added on an as-needed basis, and not expected to be exhaustive: From d6606afd7247c273a0415ddf5e4a612d809eef07 Mon Sep 17 00:00:00 2001 From: Kat Gerasimova Date: Tue, 3 Aug 2021 13:35:31 +0100 Subject: [PATCH 08/31] Improve wording for triage label usage in README Signed-off-by: Ekaterina Gerasimova --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 22166b66bf..9b877c22fa 100644 --- a/README.md +++ b/README.md @@ -419,12 +419,13 @@ We strive to completely cover all applicable issues with these core labels: * __[P-High](https://github.com/vector-im/element-web/labels/P-High):__ Affects most users regularly or impacts most users' first experience (e.g. registration) * __[P-Medium](https://github.com/vector-im/element-web/labels/P-Medium):__ Affects some users regularly or most users rarely * __[P-Low](https://github.com/vector-im/element-web/labels/P-Low):__ Most users are unlikely to come across this or it is a corner case + This label may also be used for other types of issue. 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. -The Priority label is now deprecated. Defects will now be classed based on their severity and frequency +The Priority label is now deprecated. Defects will now be classed based on their severity and prevalence: | Labels | Equivalent priority | What it means | | ----------- | ----------- | ----------- | | S‑Critical and F‑High
S‑Critical and F‑Medium
S‑Major and F‑High | P1 | These issues should be worked on in this sprint or next sprint. If the backlog of issues is too long, we should reevaluate why the bugs are not caught earlier. | From 99c9824e15df9e0628185d9b75f1a1602816d337 Mon Sep 17 00:00:00 2001 From: Kat Gerasimova Date: Tue, 3 Aug 2021 14:08:02 +0100 Subject: [PATCH 09/31] Fix typo in triage text in the README Signed-off-by: Ekaterina Gerasimova --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9b877c22fa..b97bdef63a 100644 --- a/README.md +++ b/README.md @@ -428,10 +428,10 @@ We strive to completely cover all applicable issues with these core labels: The Priority label is now deprecated. Defects will now be classed based on their severity and prevalence: | Labels | Equivalent priority | What it means | | ----------- | ----------- | ----------- | -| S‑Critical and F‑High
S‑Critical and F‑Medium
S‑Major and F‑High | P1 | These issues should be worked on in this sprint or next sprint. If the backlog of issues is too long, we should reevaluate why the bugs are not caught earlier. | -| S‑Critical and F‑Low
S‑Major and F‑Medium
S‑Minor and F‑High | P2 | When all the highest priority bugs are done, this is the next set to tackle. Ideally we should be fixing a few issues from this group every week. | -| S‑Major and F‑Low
S‑Minor and F‑Medium
S‑Tolerable and F‑High | P3 | These issues are wishful thinking. We hope to get to them one day, but we they are low priority. There are likely to be some good new contributor issues in here. | -| S‑Minor and F‑Low
S‑Tolerable and F‑Medium
S‑Minor and F‑Low | P4 and P5 | These issues are unlikely to be actively looked at by the webapp team, but may be picked up by community. | +| S‑Critical and P‑High
S‑Critical and P‑Medium
S‑Major and P‑High | P1 | These issues should be worked on in this sprint or next sprint. If the backlog of issues is too long, we should reevaluate why the bugs are not caught earlier. | +| S‑Critical and P‑Low
S‑Major and P‑Medium
S‑Minor and P‑High | P2 | When all the highest priority bugs are done, this is the next set to tackle. Ideally we should be fixing a few issues from this group every week. | +| S‑Major and P‑Low
S‑Minor and P‑Medium
S‑Tolerable and P‑High | P3 | These issues are wishful thinking. We hope to get to them one day, but we they are low priority. There are likely to be some good new contributor issues in here. | +| S‑Minor and P‑Low
S‑Tolerable and P‑Medium
S‑Minor and P‑Low | P4 and P5 | These issues are unlikely to be actively looked at by the webapp team, but may be picked up by community. | ### Other common labels From 942700ee3b52367f5f42a746043b19846306b4e2 Mon Sep 17 00:00:00 2001 From: Dariusz Niemczyk Date: Tue, 3 Aug 2021 15:09:54 +0200 Subject: [PATCH 10/31] Bump eslint deps --- yarn.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index 39fd6d5ba8..ba87b98cb7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4252,8 +4252,8 @@ eslint-config-google@^0.14.0: integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== "eslint-plugin-matrix-org@github:matrix-org/eslint-plugin-matrix-org#main": - version "0.3.4" - resolved "https://codeload.github.com/matrix-org/eslint-plugin-matrix-org/tar.gz/45f6937539192e3820edcafc4d6d4d4187e85a6a" + version "0.3.5" + resolved "https://codeload.github.com/matrix-org/eslint-plugin-matrix-org/tar.gz/1d274dffca311b7a66c7efc9e309f4f6ea8d0717" eslint-plugin-react-hooks@^4.2.0: version "4.2.0" From c29ef4bb5f1bf854d5df04b571047ead341716b0 Mon Sep 17 00:00:00 2001 From: Kat Gerasimova Date: Tue, 3 Aug 2021 15:09:53 +0100 Subject: [PATCH 11/31] Add empty line to improve rendering in README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Šimon Brandner --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b97bdef63a..7f7b81c370 100644 --- a/README.md +++ b/README.md @@ -419,7 +419,8 @@ We strive to completely cover all applicable issues with these core labels: * __[P-High](https://github.com/vector-im/element-web/labels/P-High):__ Affects most users regularly or impacts most users' first experience (e.g. registration) * __[P-Medium](https://github.com/vector-im/element-web/labels/P-Medium):__ Affects some users regularly or most users rarely * __[P-Low](https://github.com/vector-im/element-web/labels/P-Low):__ Most users are unlikely to come across this or it is a corner case - This label may also be used for other types of issue. + + This label may also be used for other types of issues. 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 From cfb1aefbc62c046ae3f9fd1b2fbce97e619ff165 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 3 Aug 2021 17:17:20 +0100 Subject: [PATCH 12/31] Update eslint-plugin-matrix-org --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index eb6c4136cf..b718f37a82 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "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-matrix-org": "github:matrix-org/eslint-plugin-matrix-org#2306b3d4da4eba908b256014b979f1d3d43d2945", "eslint-plugin-react": "^7.22.0", "eslint-plugin-react-hooks": "^4.2.0", "extract-text-webpack-plugin": "^4.0.0-beta.0", diff --git a/yarn.lock b/yarn.lock index ba87b98cb7..1bf80d27ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4251,9 +4251,9 @@ eslint-config-google@^0.14.0: resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a" integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== -"eslint-plugin-matrix-org@github:matrix-org/eslint-plugin-matrix-org#main": +"eslint-plugin-matrix-org@github:matrix-org/eslint-plugin-matrix-org#2306b3d4da4eba908b256014b979f1d3d43d2945": version "0.3.5" - resolved "https://codeload.github.com/matrix-org/eslint-plugin-matrix-org/tar.gz/1d274dffca311b7a66c7efc9e309f4f6ea8d0717" + resolved "https://codeload.github.com/matrix-org/eslint-plugin-matrix-org/tar.gz/2306b3d4da4eba908b256014b979f1d3d43d2945" eslint-plugin-react-hooks@^4.2.0: version "4.2.0" From cc1a1e751b893143ac61a74c18c84a1b46cdc9fc Mon Sep 17 00:00:00 2001 From: Dariusz Niemczyk Date: Tue, 3 Aug 2021 18:37:48 +0200 Subject: [PATCH 13/31] Add some additional HMR cleanup for dev --- src/vector/devcss.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/vector/devcss.ts b/src/vector/devcss.ts index 1937ca949d..75ce2b2af2 100644 --- a/src/vector/devcss.ts +++ b/src/vector/devcss.ts @@ -28,6 +28,19 @@ limitations under the License. * For more details, see webpack.config.js:184 (string-replace-loader) */ if (process.env.NODE_ENV === 'development') { - "use theming"; + ("use theming"); + /** + * Clean up old hot-module script injections as they hog up memory + * and anything other than the newest one is really not needed at all. + * We don't need to do it more frequently than every half a minute or so, + * but it's done to delay full page reload due to app slowness. + */ + setInterval(() => { + const elements = Array.from(document.querySelectorAll("script[src*=hot-update]")); + if (elements.length > 1) { + const oldInjects = elements.slice(0, elements.length - 1); + oldInjects.forEach(e => e.remove()); + } + }, 1000); } From 06d536afbc44f434e41465071a39e39aff940c09 Mon Sep 17 00:00:00 2001 From: Dariusz Niemczyk Date: Tue, 3 Aug 2021 18:38:00 +0200 Subject: [PATCH 14/31] Revert nameModules in webpackConfig --- webpack.config.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index 8df042d14c..b2cb981ef6 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -113,7 +113,7 @@ module.exports = (env, argv) => { // This fixes duplicate files showing up in chrome with sourcemaps enabled. // See https://github.com/webpack/webpack/issues/7128 for more info. - namedModules: true, + namedModules: false, // Minification is normally enabled by default for webpack in production mode, but // we use a CSS optimizer too and need to manage it ourselves. @@ -528,18 +528,14 @@ module.exports = (env, argv) => { devServer: { // serve unwebpacked assets from webapp. contentBase: [ - './src/', './webapp', - './bundles/**', - './node_modules/matrix-react-sdk/**', - './node_modules/matrix-js-sdk/**', ], // Only output errors, warnings, or new compilations. // This hides the massive list of modules. stats: 'minimal', - hot: true, - injectHot: true, + // hot: false, + // injectHot: false, hotOnly: true, inline: true, }, From 1c10292343019255b44b3d3273e1c2c4ea4793f9 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 3 Aug 2021 18:10:36 +0100 Subject: [PATCH 15/31] Switch to new changelog generator See https://github.com/matrix-org/matrix-react-sdk/pull/6537 / https://github.com/matrix-org/matrix-js-sdk/pull/1824 --- package.json | 1 + release_config.yaml | 3 + yarn.lock | 306 +++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 307 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index eb6c4136cf..52803421b1 100644 --- a/package.json +++ b/package.json @@ -97,6 +97,7 @@ "@types/sanitize-html": "^2.3.1", "@typescript-eslint/eslint-plugin": "^4.17.0", "@typescript-eslint/parser": "^4.17.0", + "allchange": "github:matrix-org/allchange", "autoprefixer": "^9.8.6", "babel-jest": "^26.6.3", "babel-loader": "^8.2.2", diff --git a/release_config.yaml b/release_config.yaml index 49d7ccd519..4d207a32d8 100644 --- a/release_config.yaml +++ b/release_config.yaml @@ -1 +1,4 @@ signing_id: releases@riot.im +subprojects: + matrix-react-sdk: + includeByDefault: true diff --git a/yarn.lock b/yarn.lock index ba87b98cb7..dfce2b9838 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1309,6 +1309,107 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@octokit/auth-token@^2.4.4": + version "2.4.5" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3" + integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA== + dependencies: + "@octokit/types" "^6.0.3" + +"@octokit/core@^3.5.0": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.5.1.tgz#8601ceeb1ec0e1b1b8217b960a413ed8e947809b" + integrity sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw== + dependencies: + "@octokit/auth-token" "^2.4.4" + "@octokit/graphql" "^4.5.8" + "@octokit/request" "^5.6.0" + "@octokit/request-error" "^2.0.5" + "@octokit/types" "^6.0.3" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.12" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" + integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== + dependencies: + "@octokit/types" "^6.0.3" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^4.5.8": + version "4.6.4" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.4.tgz#0c3f5bed440822182e972317122acb65d311a5ed" + integrity sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg== + dependencies: + "@octokit/request" "^5.6.0" + "@octokit/types" "^6.0.3" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-9.3.0.tgz#160347858d727527901c6aae7f7d5c2414cc1f2e" + integrity sha512-oz60hhL+mDsiOWhEwrj5aWXTOMVtQgcvP+sRzX4C3cH7WOK9QSAoEtjWh0HdOf6V3qpdgAmUMxnQPluzDWR7Fw== + +"@octokit/plugin-paginate-rest@^2.6.2": + version "2.15.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.15.0.tgz#9c956c3710b2bd786eb3814eaf5a2b17392c150d" + integrity sha512-/vjcb0w6ggVRtsb8OJBcRR9oEm+fpdo8RJk45khaWw/W0c8rlB2TLCLyZt/knmC17NkX7T9XdyQeEY7OHLSV1g== + dependencies: + "@octokit/types" "^6.23.0" + +"@octokit/plugin-request-log@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.6.0.tgz#c28833b88d0f07bf94093405d02d43d73c7de99b" + integrity sha512-2G7lIPwjG9XnTlNhe/TRnpI8yS9K2l68W4RP/ki3wqw2+sVeTK8hItPxkqEI30VeH0UwnzpuksMU/yHxiVVctw== + dependencies: + "@octokit/types" "^6.23.0" + deprecation "^2.3.1" + +"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" + integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== + dependencies: + "@octokit/types" "^6.0.3" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.0.tgz#6084861b6e4fa21dc40c8e2a739ec5eff597e672" + integrity sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.1.0" + "@octokit/types" "^6.16.1" + is-plain-object "^5.0.0" + node-fetch "^2.6.1" + universal-user-agent "^6.0.0" + +"@octokit/rest@^18.6.7": + version "18.8.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.8.0.tgz#ba24f7ba554f015a7ae2b7cc2aecef5386ddfea5" + integrity sha512-lsuNRhgzGnLMn/NmQTNCit/6jplFWiTUlPXhqN0zCMLwf2/9pseHzsnTW+Cjlp4bLMEJJNPa5JOzSLbSCOahKw== + dependencies: + "@octokit/core" "^3.5.0" + "@octokit/plugin-paginate-rest" "^2.6.2" + "@octokit/plugin-request-log" "^1.0.2" + "@octokit/plugin-rest-endpoint-methods" "5.6.0" + +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.23.0": + version "6.23.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.23.0.tgz#b39f242b20036e89fa8f34f7962b4e9b7ff8f65b" + integrity sha512-eG3clC31GSS7K3oBK6C6o7wyXPrkP+mu++eus8CSZdpRytJ5PNszYxudOQ0spWZQ3S9KAtoTG6v1WK5prJcJrA== + dependencies: + "@octokit/openapi-types" "^9.3.0" + "@principalstudio/html-webpack-inject-preload@^1.2.7": version "1.2.7" resolved "https://registry.yarnpkg.com/@principalstudio/html-webpack-inject-preload/-/html-webpack-inject-preload-1.2.7.tgz#0c1f0b32a34d814b36ce84111f89990441cc64e8" @@ -1939,6 +2040,17 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" +"allchange@github:matrix-org/allchange": + version "0.0.1" + resolved "https://codeload.github.com/matrix-org/allchange/tar.gz/56b37b06339a3ac3fe771f3ec3d0bff798df8dab" + dependencies: + "@octokit/rest" "^18.6.7" + cli-color "^2.0.0" + js-yaml "^4.1.0" + loglevel "^1.7.1" + semver "^7.3.5" + yargs "^17.0.1" + alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -1971,7 +2083,7 @@ ansi-html@0.0.7: resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= -ansi-regex@^2.0.0: +ansi-regex@^2.0.0, ansi-regex@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= @@ -2041,6 +2153,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -2398,6 +2515,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +before-after-hook@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" + integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -3025,6 +3147,18 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.0.tgz#11ecfb58a79278cf6035a60c54e338f9d837897c" + integrity sha512-a0VZ8LeraW0jTuCkuAGMNufareGHhyZU9z8OGsW0gXd1hZGi1SRuNRXdbGkraBBKnhyUhyebFWnRbp+dIn0f0A== + dependencies: + ansi-regex "^2.1.1" + d "^1.0.1" + es5-ext "^0.10.51" + es6-iterator "^2.0.3" + memoizee "^0.4.14" + timers-ext "^0.1.7" + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -3043,6 +3177,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -3654,6 +3797,14 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -3806,6 +3957,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -4209,6 +4365,42 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.51, es5-ext@^0.10.53, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@^2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -4414,6 +4606,14 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= + dependencies: + d "1" + es5-ext "~0.10.14" + eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -4586,6 +4786,13 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -5085,7 +5292,7 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -6253,6 +6460,11 @@ is-primitive@^2.0.0: resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= +is-promise@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + is-regex@^1.0.3, is-regex@^1.0.4, is-regex@^1.1.2, is-regex@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" @@ -6875,6 +7087,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -7228,6 +7447,13 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" + integrity sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM= + dependencies: + es5-ext "~0.10.2" + make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -7453,6 +7679,20 @@ memoize-one@^5.1.1: resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== +memoizee@^0.4.14: + version "0.4.15" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" + integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== + dependencies: + d "^1.0.1" + es5-ext "^0.10.53" + es6-weak-map "^2.0.3" + event-emitter "^0.3.5" + is-promise "^2.2.2" + lru-queue "^0.1.0" + next-tick "^1.1.0" + timers-ext "^0.1.7" + memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -7806,6 +8046,16 @@ neo-async@^2.5.0, neo-async@^2.6.1: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +next-tick@1, next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -11116,6 +11366,14 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +timers-ext@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" + integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== + dependencies: + es5-ext "~0.10.46" + next-tick "1" + timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" @@ -11303,6 +11561,16 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -11452,6 +11720,11 @@ unist-util-stringify-position@^2.0.0: dependencies: "@types/unist" "^2.0.2" +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -11990,6 +12263,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -12037,6 +12319,11 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -12068,7 +12355,7 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.3: +yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== @@ -12106,6 +12393,19 @@ yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.0.1.tgz#6a1ced4ed5ee0b388010ba9fd67af83b9362e0bb" + integrity sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + zwitch@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" From 42e3fd02821fd0258c917472297b2cbe10b846c7 Mon Sep 17 00:00:00 2001 From: Jaiwanth Date: Wed, 4 Aug 2021 12:45:10 +0530 Subject: [PATCH 16/31] Add extendedAPI plugin to access globals --- webpack.config.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index bb1d5d9ff5..e6fa9bb0ea 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -6,6 +6,7 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const TerserPlugin = require('terser-webpack-plugin'); const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const HtmlWebpackInjectPreload = require('@principalstudio/html-webpack-inject-preload'); +const { ExtendedAPIPlugin } = require('webpack'); let ogImageUrl = process.env.RIOT_OG_IMAGE_URL; if (!ogImageUrl) ogImageUrl = 'https://app.element.io/themes/element/img/logos/opengraph.png'; @@ -219,7 +220,7 @@ module.exports = (env, argv) => { // It's important that this plugin is last otherwise we end // up with broken CSS. - require('postcss-preset-env')({stage: 3, browsers: 'last 2 versions'}), + require('postcss-preset-env')({ stage: 3, browsers: 'last 2 versions' }), ], parser: "postcss-scss", "local-plugins": true, @@ -257,7 +258,7 @@ module.exports = (env, argv) => { // It's important that this plugin is last otherwise we end // up with broken CSS. - require('postcss-preset-env')({stage: 3, browsers: 'last 2 versions'}), + require('postcss-preset-env')({ stage: 3, browsers: 'last 2 versions' }), ], parser: "postcss-scss", "local-plugins": true, @@ -437,6 +438,8 @@ module.exports = (env, argv) => { files: [{ match: /.*Inter.*\.woff2$/ }], }), + new ExtendedAPIPlugin(), + ...additionalPlugins, ], From 2d6a8d3d1e972f5a624544498b3b027a7d58c921 Mon Sep 17 00:00:00 2001 From: Kat Gerasimova Date: Wed, 4 Aug 2021 10:19:53 +0100 Subject: [PATCH 17/31] Make triage wording in README friendlier Co-authored-by: James Salter --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7f7b81c370..28e4a97a66 100644 --- a/README.md +++ b/README.md @@ -431,7 +431,7 @@ The Priority label is now deprecated. Defects will now be classed based on their | ----------- | ----------- | ----------- | | S‑Critical and P‑High
S‑Critical and P‑Medium
S‑Major and P‑High | P1 | These issues should be worked on in this sprint or next sprint. If the backlog of issues is too long, we should reevaluate why the bugs are not caught earlier. | | S‑Critical and P‑Low
S‑Major and P‑Medium
S‑Minor and P‑High | P2 | When all the highest priority bugs are done, this is the next set to tackle. Ideally we should be fixing a few issues from this group every week. | -| S‑Major and P‑Low
S‑Minor and P‑Medium
S‑Tolerable and P‑High | P3 | These issues are wishful thinking. We hope to get to them one day, but we they are low priority. There are likely to be some good new contributor issues in here. | +| S‑Major and P‑Low
S‑Minor and P‑Medium
S‑Tolerable and P‑High | P3 | These issues are wishful thinking for now. We hope to get to them one day, but they are low priority. There are likely to be some good new contributor issues in here. | | S‑Minor and P‑Low
S‑Tolerable and P‑Medium
S‑Minor and P‑Low | P4 and P5 | These issues are unlikely to be actively looked at by the webapp team, but may be picked up by community. | From 79157c0bf920a23635b1ece48a0c733a4c24dce7 Mon Sep 17 00:00:00 2001 From: James Salter Date: Wed, 4 Aug 2021 10:32:45 +0100 Subject: [PATCH 18/31] Add config keys for posthog --- docs/config.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/config.md b/docs/config.md index 1ca4bf48ff..6d482bf132 100644 --- a/docs/config.md +++ b/docs/config.md @@ -136,6 +136,9 @@ For a good example, see https://develop.element.io/config.json. 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. +1. `posthog`: [Posthog](https://posthog.com/) integration config. If not set, Posthog analytics are disabled. + 1. `projectApiKey`: The Posthog project API key + 2. `apiHost`: The Posthog API host Note that `index.html` also has an og:image meta tag that is set to an image hosted on riot.im. This is the image used if links to your copy of Element From d9289f063ab88fdb5ecf55b87525eddabf44a2b6 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 4 Aug 2021 13:31:27 +0100 Subject: [PATCH 19/31] Add codeowners --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000..2c068fff33 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @matrix-org/element-web From e9863f0719498bc2a828469db86bde613709c4ae Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 4 Aug 2021 18:50:09 +0100 Subject: [PATCH 20/31] Add github workflow to put issues tagged design on the design board --- .github/workflows/issues_to_projects.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/issues_to_projects.yaml diff --git a/.github/workflows/issues_to_projects.yaml b/.github/workflows/issues_to_projects.yaml new file mode 100644 index 0000000000..3b58e1b58f --- /dev/null +++ b/.github/workflows/issues_to_projects.yaml @@ -0,0 +1,14 @@ +on: + issues: + types: [labeled] +jobs: + move_issues: + name: Move issues to project board + runs-on: ubuntu-latest + steps: + - uses: konradpabjan/move-labeled-or-milestoned-issue@v2.0 + with: + action-token: "${{ secrets.ELEMENT_BOT_TOKEN }}" + project-url: "https://github.com/orgs/vector-im/projects/14" + column-name: "📥 Inbox" + label-name: "X-Needs-Design" From 54620a2eb8d4055f745a37b24d48f086adf196ff Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 4 Aug 2021 18:53:50 +0100 Subject: [PATCH 21/31] Fix org in codeowners --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 2c068fff33..558f9e0059 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @matrix-org/element-web +* @vector-im/element-web From d4fc3ed354937358b2002b16b7c392b90b074179 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 4 Aug 2021 15:08:52 -0600 Subject: [PATCH 22/31] Properly handle react-sdk's recorder worklet Fixes https://github.com/vector-im/element-web/issues/18393 --- package.json | 3 ++- src/vector/index.html | 5 +---- webpack.config.js | 21 ++++++++++++++++++++- yarn.lock | 14 ++++++++++++++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 48838379fa..ac155d09e0 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,8 @@ "webpack": "^4.46.0", "webpack-cli": "^3.3.12", "webpack-dev-server": "^3.11.2", - "worker-loader": "^2.0.0" + "worker-loader": "^2.0.0", + "worklet-loader": "^2.0.0" }, "jest": { "testEnvironment": "jest-environment-jsdom-sixteen", diff --git a/src/vector/index.html b/src/vector/index.html index 29b1f13221..b0a2425338 100644 --- a/src/vector/index.html +++ b/src/vector/index.html @@ -58,10 +58,7 @@ } %> - " - > +
diff --git a/webpack.config.js b/webpack.config.js index b2cb981ef6..18d389d854 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -89,7 +89,6 @@ module.exports = (env, argv) => { "mobileguide": "./src/vector/mobile_guide/index.ts", "jitsi": "./src/vector/jitsi/index.ts", "usercontent": "./node_modules/matrix-react-sdk/src/usercontent/index.js", - "recorder-worklet": "./node_modules/matrix-react-sdk/src/audio/RecorderWorklet.ts", ...(useCssHotReload ? {} : cssThemes), }, @@ -351,6 +350,26 @@ module.exports = (env, argv) => { outputPath: '.', }, }, + { + // Special case the recorder worklet as it can't end up HMR'd, but the worker-loader + // isn't good enough for us. Note that the worklet-loader is listed as "do not use", + // however it seems to work fine for our purposes. + test: /RecorderWorklet\.ts$/, + type: "javascript/auto", + use: [ // executed last -> first, for some reason. + { + loader: "worklet-loader", + options: { + // Override name so we know what it is in the output. + name: 'recorder-worklet.[hash:7].js', + }, + }, + { + // TS -> JS because the worklet-loader won't do this for us. + loader: "babel-loader", + }, + ], + }, { // This is from the same place as the encoderWorker above, but only needed // for Safari support. diff --git a/yarn.lock b/yarn.lock index 087e6e64f8..601a1363bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5651,6 +5651,11 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoek@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA== + hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -12284,6 +12289,15 @@ worker-loader@^2.0.0: loader-utils "^1.0.0" schema-utils "^0.4.0" +worklet-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/worklet-loader/-/worklet-loader-2.0.0.tgz#c6c8f7dbed38f3d32dfc61c399f13a85f7eebe9d" + integrity sha512-zvCCyhgrn85C5g1+EQWDz4KHxkEMq/fZQXVftjFOcxTy6f+grBSRTJLoit3u8xyKIBTGEgQzYiousSm3YWt8oA== + dependencies: + hoek "^4.2.1" + loader-utils "^1.0.0" + schema-utils "^0.4.0" + wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" From e123b8bcc0a3c13cb79b39922f1d5f286fad433c Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 4 Aug 2021 15:24:02 -0600 Subject: [PATCH 23/31] Appease Jest --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index ac155d09e0..f9127a1bf3 100644 --- a/package.json +++ b/package.json @@ -178,7 +178,8 @@ "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" + "workers/(.+)\\.worker\\.ts": "/node_modules/matrix-react-sdk/__mocks__/workerMock.js", + "RecorderWorklet": "/node_modules/matrix-react-sdk/__mocks__/empty.js" }, "transformIgnorePatterns": [ "/node_modules/(?!matrix-js-sdk).+$", From 6685ff0e79b7eeac6106e151ca81f51235a0d1c0 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 5 Aug 2021 11:10:50 +0100 Subject: [PATCH 24/31] Fix the decoder-ring --- res/decoder-ring/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/decoder-ring/index.html b/res/decoder-ring/index.html index 9984815f01..0b47e2b44d 100644 --- a/res/decoder-ring/index.html +++ b/res/decoder-ring/index.html @@ -11,7 +11,7 @@ - + From d5cd770c84d4d06a1b4fe3212253afe16a8309ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 6 Aug 2021 07:58:33 +0200 Subject: [PATCH 25/31] Add docs for feature_hidden_read_receipts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- docs/labs.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/labs.md b/docs/labs.md index f880e3cd58..0799ef7b50 100644 --- a/docs/labs.md +++ b/docs/labs.md @@ -129,3 +129,7 @@ encrypted on the server, as described in [MSC2697](https://github.com/matrix-org 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. + +## Hidden read receipts (`feature_hidden_read_receipts`) + +Enables sending hidden read receipts as per [MSC2285](https://github.com/matrix-org/matrix-doc/pull/2285) From 8480dbb726c204395e347c30c5af1862a7e86d79 Mon Sep 17 00:00:00 2001 From: Ekaterina Gerasimova Date: Fri, 6 Aug 2021 09:00:08 +0100 Subject: [PATCH 26/31] Add new issue templates for bugs Replace the old issue template with two new issue forms to help guide contributors through the issue creation Signed-off-by: Ekaterina Gerasimova --- .github/ISSUE_TEMPLATE/bug-desktop.yml | 54 ++++++++++++++++++++++ .github/ISSUE_TEMPLATE/bug-web.yml | 62 ++++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/bug_report.md | 58 ------------------------ 3 files changed, 116 insertions(+), 58 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug-desktop.yml create mode 100644 .github/ISSUE_TEMPLATE/bug-web.yml delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/bug-desktop.yml b/.github/ISSUE_TEMPLATE/bug-desktop.yml new file mode 100644 index 0000000000..fd1f34a3b5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-desktop.yml @@ -0,0 +1,54 @@ +name: Bug report for the Element desktop app (not in a browser) +description: File a bug report if you are using the desktop Element application. +title: "[Bug]: " +labels: [T-Defect, triage] +assignees: + - +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + + Please report security issues by email to security@matrix.org + - type: textarea + id: reproduction-steps + attributes: + label: Steps to reproduce + description: Please attach screenshots, videos or logs if you can. + placeholder: Tell us what you see! + value: | + 1. Where are you starting? What can you see? + 2. What do you click? + 3. More steps… + validations: + required: true + - type: textarea + id: what-happened + attributes: + label: What happened? + placeholder: Tell us what went wrong + validations: + required: true + - type: textarea + id: expected-result + attributes: + label: What did you expect? + placeholder: Tell us what you expected to happen + validations: + required: true + - type: input + id: os + attributes: + label: Operating system + placeholder: Windows, macOS, Ubuntu, Arch Linux… + validations: + required: false + - type: input + id: version + attributes: + label: Application version + description: You can find the version information in Settings -> Help & About. + placeholder: e.g. Element version 1.7.34, olm version 3.2.3 + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/bug-web.yml b/.github/ISSUE_TEMPLATE/bug-web.yml new file mode 100644 index 0000000000..70665b5909 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-web.yml @@ -0,0 +1,62 @@ +name: Bug report for Element Web (in browser) +description: File a bug report if you are using Element in a web browser like Firefox, Chrome, Edge, and so on. +title: "[Bug]: " +labels: [T-Defect, triage] +assignees: + - +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + + Please report security issues by email to security@matrix.org + - type: textarea + id: reproduction-steps + attributes: + label: Steps to reproduce + description: Please attach screenshots, videos or logs if you can. + placeholder: Tell us what you see! + value: | + 1. Where are you starting? What can you see? + 2. What do you click? + 3. More steps… + validations: + required: true + - type: textarea + id: what-happened + attributes: + label: What happened? + placeholder: Tell us what went wrong + validations: + required: true + - type: textarea + id: expected-result + attributes: + label: What did you expect? + placeholder: Tell us what you expected to happen + validations: + required: true + - type: input + id: os + attributes: + label: Operating system + placeholder: Windows, macOS, Ubuntu, Arch Linux… + validations: + required: false + - type: input + id: browser + attributes: + label: Browser information + description: Which browser are you using? Which version? + placeholder: e.g. Chromium Version 92.0.4515.131 + validations: + required: false + - type: input + id: webapp-url + attributes: + label: URL for webapp + description: Which URL are you using to access the webapp? If a private server, tell us what version of Element Web you are using. + placeholder: e.g. develop.element.io, app.element.io + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index d05466c6c0..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: T-Defect -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, Firefox, Safari, Edge? which version? -- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? -- **URL**: develop.element.io / app.element.io / somewhere else? If a private server, what version of Element Web? - -For the desktop app: - -- **OS**: Windows, macOS, Ubuntu, Arch Linux, etc? -- **Version**: 1.x.y From 98a71bd7df6b1e467962eb9c6da19fec1049c57d Mon Sep 17 00:00:00 2001 From: Ekaterina Gerasimova Date: Fri, 6 Aug 2021 09:14:06 +0100 Subject: [PATCH 27/31] Issue forms: add question about source for desktop --- .github/ISSUE_TEMPLATE/bug-desktop.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug-desktop.yml b/.github/ISSUE_TEMPLATE/bug-desktop.yml index fd1f34a3b5..05107985ba 100644 --- a/.github/ISSUE_TEMPLATE/bug-desktop.yml +++ b/.github/ISSUE_TEMPLATE/bug-desktop.yml @@ -52,3 +52,11 @@ body: placeholder: e.g. Element version 1.7.34, olm version 3.2.3 validations: required: false + - type: input + id: source + attributes: + label: How did you install the app? + description: Where did you install the app from? Please give a link or a description. + placeholder: e.g. From https://element.io/get-started + validations: + required: false From 854f5b5ef27d19c54385948b6bfcbd88d68e5f7f Mon Sep 17 00:00:00 2001 From: Ekaterina Gerasimova Date: Fri, 6 Aug 2021 11:40:10 +0100 Subject: [PATCH 28/31] Issue forms: remove title from bug template Signed-off-by: Ekaterina Gerasimova --- .github/ISSUE_TEMPLATE/bug-desktop.yml | 1 - .github/ISSUE_TEMPLATE/bug-web.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-desktop.yml b/.github/ISSUE_TEMPLATE/bug-desktop.yml index 05107985ba..2a1a9960da 100644 --- a/.github/ISSUE_TEMPLATE/bug-desktop.yml +++ b/.github/ISSUE_TEMPLATE/bug-desktop.yml @@ -1,6 +1,5 @@ name: Bug report for the Element desktop app (not in a browser) description: File a bug report if you are using the desktop Element application. -title: "[Bug]: " labels: [T-Defect, triage] assignees: - diff --git a/.github/ISSUE_TEMPLATE/bug-web.yml b/.github/ISSUE_TEMPLATE/bug-web.yml index 70665b5909..e8994f211c 100644 --- a/.github/ISSUE_TEMPLATE/bug-web.yml +++ b/.github/ISSUE_TEMPLATE/bug-web.yml @@ -1,6 +1,5 @@ name: Bug report for Element Web (in browser) description: File a bug report if you are using Element in a web browser like Firefox, Chrome, Edge, and so on. -title: "[Bug]: " labels: [T-Defect, triage] assignees: - From 188492d320e120de29563a4663d044b48ceee77f Mon Sep 17 00:00:00 2001 From: Ekaterina Gerasimova Date: Fri, 6 Aug 2021 11:42:41 +0100 Subject: [PATCH 29/31] Issue forms: remove triage label from bugs --- .github/ISSUE_TEMPLATE/bug-desktop.yml | 2 +- .github/ISSUE_TEMPLATE/bug-web.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-desktop.yml b/.github/ISSUE_TEMPLATE/bug-desktop.yml index 2a1a9960da..b00eec0ce2 100644 --- a/.github/ISSUE_TEMPLATE/bug-desktop.yml +++ b/.github/ISSUE_TEMPLATE/bug-desktop.yml @@ -1,6 +1,6 @@ name: Bug report for the Element desktop app (not in a browser) description: File a bug report if you are using the desktop Element application. -labels: [T-Defect, triage] +labels: [T-Defect] assignees: - body: diff --git a/.github/ISSUE_TEMPLATE/bug-web.yml b/.github/ISSUE_TEMPLATE/bug-web.yml index e8994f211c..b9b7003ac9 100644 --- a/.github/ISSUE_TEMPLATE/bug-web.yml +++ b/.github/ISSUE_TEMPLATE/bug-web.yml @@ -1,6 +1,6 @@ name: Bug report for Element Web (in browser) description: File a bug report if you are using Element in a web browser like Firefox, Chrome, Edge, and so on. -labels: [T-Defect, triage] +labels: [T-Defect] assignees: - body: From a77a975bf85bc9470ae73788462001444a30440a Mon Sep 17 00:00:00 2001 From: Ekaterina Gerasimova Date: Fri, 6 Aug 2021 12:43:32 +0100 Subject: [PATCH 30/31] Issue forms: remove unused assignee tag Signed-off-by: Ekaterina Gerasimova --- .github/ISSUE_TEMPLATE/bug-desktop.yml | 2 -- .github/ISSUE_TEMPLATE/bug-web.yml | 2 -- 2 files changed, 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-desktop.yml b/.github/ISSUE_TEMPLATE/bug-desktop.yml index b00eec0ce2..809fd812cc 100644 --- a/.github/ISSUE_TEMPLATE/bug-desktop.yml +++ b/.github/ISSUE_TEMPLATE/bug-desktop.yml @@ -1,8 +1,6 @@ name: Bug report for the Element desktop app (not in a browser) description: File a bug report if you are using the desktop Element application. labels: [T-Defect] -assignees: - - body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/bug-web.yml b/.github/ISSUE_TEMPLATE/bug-web.yml index b9b7003ac9..0010684a4a 100644 --- a/.github/ISSUE_TEMPLATE/bug-web.yml +++ b/.github/ISSUE_TEMPLATE/bug-web.yml @@ -1,8 +1,6 @@ name: Bug report for Element Web (in browser) description: File a bug report if you are using Element in a web browser like Firefox, Chrome, Edge, and so on. labels: [T-Defect] -assignees: - - body: - type: markdown attributes: From 0f27481b6ea56d8c1a2843d7e865a1b4c2c482b4 Mon Sep 17 00:00:00 2001 From: Germain Souquet Date: Fri, 6 Aug 2021 17:02:41 +0200 Subject: [PATCH 31/31] Change tsconfig to autodiscover all @types packages rather setting them explicitely --- tsconfig.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index e16688adb3..0e02b25bb1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,11 +12,6 @@ "outDir": "./lib", "declaration": true, "jsx": "react", - "types": [ - "node", - "react", - "flux" - ], "lib": [ "es2019", "dom",