Compare commits

..

101 Commits

Author SHA1 Message Date
RiotRobot
a5d5e2800c v1.5.9 2020-02-17 13:42:37 +00:00
RiotRobot
b225367e0d Prepare changelog for v1.5.9 2020-02-17 13:42:36 +00:00
RiotRobot
38cd6a0d0c v1.5.9 2020-02-17 13:40:07 +00:00
RiotRobot
9b5655c1fa Released js-sdk & react-sdk 2020-02-17 13:39:24 +00:00
J. Ryan Stinnett
e482d69034 Merge pull request #12374 from vector-im/jryans/release-tag-tweaks
Automate SDK dep upgrades for release
2020-02-17 12:34:54 +00:00
J. Ryan Stinnett
585d40f4c1 Reset SDK deps back to develop after a release
This automates the (frequently forgotten) step of resetting SDK deps back to the
develop branch after merging the release to develop.
2020-02-14 12:21:54 +00:00
J. Ryan Stinnett
a26bd6ef94 Add auto-upgrade support for SDK deps
This automates the SDK upgrade step of the release process.
2020-02-14 11:43:08 +00:00
J. Ryan Stinnett
aa95dcc0cb Check the next tag when looking for the latest version 2020-02-14 11:04:39 +00:00
RiotRobot
08c149ed66 v1.5.9-rc.1 2020-02-13 17:56:15 +00:00
RiotRobot
9dd89dff6a Prepare changelog for v1.5.9-rc.1 2020-02-13 17:56:14 +00:00
RiotRobot
49ece1cbf9 v1.5.9-rc.1 2020-02-13 17:53:36 +00:00
RiotRobot
35204416bf Upgrade JS SDK to 5.0.0-rc.1 and React SDK to 2.1.0-rc.2 2020-02-13 17:50:29 +00:00
J. Ryan Stinnett
036348cd60 Electron 8.0.0 crashes on macOS, reverting to 7.1.12 2020-02-13 15:24:59 +00:00
J. Ryan Stinnett
51f2afb7b7 Add allow-jit entitlement from electron-builder defaults 2020-02-13 15:02:22 +00:00
J. Ryan Stinnett
2c0968e40e Return to default deb after install script
Upstream electron-builder now contains the SUID sandbox change.

See also https://github.com/electron-userland/electron-builder/pull/4163
2020-02-13 14:52:44 +00:00
J. Ryan Stinnett
3eb5eb1d21 Upgrade electron-builder 2020-02-13 14:50:19 +00:00
J. Ryan Stinnett
4a1b9d8ea4 Upgrade to Electron 8.0.0 2020-02-13 14:45:42 +00:00
J. Ryan Stinnett
1a84836fd0 Merge pull request #12354 from RiotTranslateBot/weblate-riot-web-riot-web
Update from Weblate
2020-02-13 14:35:02 +00:00
Weblate
2e2d90f335 Merge branch 'origin/develop' into Weblate. 2020-02-10 19:18:54 +00:00
Michael Telatynski
b3fb496212 Merge pull request #12310 from MattWThomas/patch-1
Add top left menu shortcut
2020-02-10 19:18:48 +00:00
Matthew Thomas
a24959319d Add top left menu shortcut
Add <kbd>Ctrl</kbd>/<kbd>⌘</kbd>+<kbd>`</kbd>
2020-02-10 12:59:35 -06:00
MozillaKab
e923f935ea Added translation using Weblate (Kabyle) 2020-02-09 03:24:46 +00:00
Michael Telatynski
54f7347da5 Merge pull request #12272 from vector-im/t3chguy/m1
Remove modernizr rules for features on which we only soft depend
2020-02-06 21:22:40 +00:00
Michael Telatynski
95f749ccd9 Remove modernizr rules for features on which we only soft depend
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-02-06 18:01:53 +00:00
Michael Telatynski
eb62972aed Merge pull request #12258 from vector-im/t3chguy/csp
Embed CSP meta tag and stop using script-src unsafe-inline
2020-02-06 12:15:17 +00:00
Michael Telatynski
3a5a904afb Update src/vector/index.html
Co-Authored-By: J. Ryan Stinnett <jryans@gmail.com>
2020-02-06 11:54:05 +00:00
Michael Telatynski
7d68c2c465 re-add child-src as the common ancestor of worker-src and frame-src for backwards compat and split onto multiple lines for readability
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-02-06 11:52:21 +00:00
Michael Telatynski
074a3cfaaf fix font-src of CSP 2020-02-06 10:17:38 +00:00
Michael Telatynski
2b5e028cbe add comment 2020-02-05 16:37:19 +00:00
Michael Telatynski
ec20e1ece2 Embed CSP meta tag and stop using script-src unsafe-inline 2020-02-05 16:35:23 +00:00
Travis Ralston
b107da09fa Merge pull request #12251 from vector-im/jaywink/add-contribute-json
Add contribute.json
2020-02-05 15:21:07 +00:00
Jason Robinson
9534a25270 Fix contribute.json location as per spec
Signed-off-by: Jason Robinson <jasonr@matrix.org>
2020-02-05 16:28:44 +02:00
Michael Telatynski
f7e5613f30 Merge pull request #12232 from vector-im/t3chguy/modernizr
Improve Browser checks
2020-02-05 14:15:01 +00:00
Michael Telatynski
7d49078f22 Change them to Modernizr tests and add more rules 2020-02-05 14:05:46 +00:00
Jason Robinson
3abe61e13b Add contribute.json
This document is required for example for all Mozilla websites
and makes sense for Riot to also describe itself - see
https://www.contributejson.org/

Signed-off-by: Jason Robinson <jasonr@matrix.org>
2020-02-05 15:25:09 +02:00
Michael Telatynski
032efafe2e Rejig things around to catch Promises not being a thing at all 2020-02-04 13:35:05 +00:00
Michael Telatynski
087bcf0ae6 fix declaration order 2020-02-04 11:11:06 +00:00
Michael Telatynski
cdc1202bbe Add custom browser checks outside of Modernizr 2020-02-04 11:08:52 +00:00
Michael Telatynski
bceca49cdc Update vendored modernizr 2020-02-04 11:00:47 +00:00
Matthew Hodgson
c3e6a30789 Merge branch 'develop' of git+ssh://github.com/vector-im/riot-web into develop 2020-01-31 15:22:44 +00:00
Matthew Hodgson
87913e6c98 yarn electron nowadays does yarn build already 2020-01-31 15:22:16 +00:00
J. Ryan Stinnett
00fa5aad85 Enable padlock flag by default 2020-01-31 14:31:13 +00:00
J. Ryan Stinnett
2818de4d4a Merge pull request #12173 from vector-im/jryans/padlock-flag
Document padlock flag
2020-01-31 13:44:04 +00:00
J. Ryan Stinnett
e9f8700d6b Document padlock flag 2020-01-31 13:36:16 +00:00
Matthew Hodgson
d8b059452c fix rogue ` 2020-01-31 13:04:00 +00:00
J. Ryan Stinnett
98b8ba2650 Merge pull request #12126 from vector-im/t3chguy/develop_cs
Enable cross-signing on /develop
2020-01-29 16:37:52 +00:00
Michael Telatynski
37d924731d Enable cross-signing on /develop 2020-01-29 11:47:34 +00:00
Travis Ralston
4affaaf309 Merge pull request #12110 from vector-im/travis/legacy-decorators
Switch back to legacy decorators
2020-01-28 16:54:10 +00:00
Travis Ralston
d3d6e4ae77 Switch back to legacy decorators
For https://github.com/matrix-org/matrix-react-sdk/pull/3961
2020-01-28 16:46:02 +00:00
Travis Ralston
daf6aaaf30 Merge pull request #12102 from vector-im/travis/babel-skinning
Update babel targets
2020-01-28 14:50:25 +00:00
Travis Ralston
d50b52cdc5 Try to fix Jest 2020-01-28 14:31:09 +00:00
Travis Ralston
cff4ad9e82 Remove legacy and stop using deprecated things 2020-01-28 14:21:26 +00:00
Travis Ralston
e3e7a47aea Update babel targets 2020-01-28 12:48:27 +00:00
J. Ryan Stinnett
c30f901716 Merge pull request #12076 from vector-im/jryans/fetch-deps-lint
Install deps for linting
2020-01-27 16:13:10 +00:00
J. Ryan Stinnett
0ad0cbeb35 Install deps for linting 2020-01-27 16:05:41 +00:00
J. Ryan Stinnett
8ca6c2c433 Flip SDKs back to develop 2020-01-27 16:01:12 +00:00
RiotRobot
9782599c69 Merge branch 'master' into develop 2020-01-27 12:02:44 +00:00
RiotRobot
768cabe4bb v1.5.8 2020-01-27 11:57:49 +00:00
RiotRobot
5d01384af2 Prepare changelog for v1.5.8 2020-01-27 11:57:49 +00:00
RiotRobot
15a77e8826 v1.5.8 2020-01-27 11:52:56 +00:00
RiotRobot
dd26d43173 js-sdk 4.0.0 & react-sdk 2.0.0 2020-01-27 11:52:18 +00:00
David Baker
59d3bd2746 Merge pull request #12062 from RiotTranslateBot/weblate-riot-web-riot-web
Update from Weblate
2020-01-27 10:07:37 +00:00
Weblate
1bbb104600 Merge branch 'origin/develop' into Weblate. 2020-01-24 22:47:37 +00:00
J. Ryan Stinnett
9c258f9da9 Merge pull request #12049 from vector-im/jryans/webpack-minimal
Change to minimal Webpack output
2020-01-24 22:47:32 +00:00
J. Ryan Stinnett
4c4f885f25 Change to minimal Webpack output
This changes Webpack to only output errors, warnings, or new compilations.
This has the effect of hiding the massive list of modules. The giant list was
actually _hiding_ warnings because they appear first and scroll off the
terminal.
2020-01-24 22:34:15 +00:00
Weblate
fb32d41b3e Merge branch 'origin/develop' into Weblate. 2020-01-24 15:57:42 +00:00
Travis Ralston
2445f19431 Merge pull request #12015 from vector-im/travis/user-lists-labs
Remove docs for new invite dialog labs feature
2020-01-24 08:57:36 -07:00
Damir Jelić
7aff020d4d Merge branch 'poljar/seshat-ui' into develop 2020-01-24 14:40:54 +01:00
Weblate
192f2b8892 Merge branch 'origin/develop' into Weblate. 2020-01-24 13:40:37 +00:00
Weblate
3d804665da Merge branch 'origin/develop' into Weblate. 2020-01-24 13:39:07 +00:00
Damir Jelić
c0558f3527 Merge branch 'poljar/seshat-filepanel' into develop 2020-01-24 14:38:20 +01:00
Balázs Meskó
d6a5d701fe Translated using Weblate (Hungarian)
Currently translated at 100.0% (23 of 23 strings)

Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/hu/
2020-01-24 10:23:08 +00:00
Travis Ralston
a34507f6e1 Remove DMs flag from the config too 2020-01-23 17:15:53 -07:00
Travis Ralston
8b08ba05c2 Remove docs for new invite dialog labs feature
It's the default now: https://github.com/matrix-org/matrix-react-sdk/pull/3906
2020-01-22 21:16:18 -07:00
Travis Ralston
9ee7febd9b Merge pull request #12008 from vector-im/travis/more-legal
Fix the remainder of the cookie links
2020-01-22 20:29:41 -07:00
Travis Ralston
47d88d6b79 Fix the remainder of the cookie links
Fixes https://github.com/vector-im/riot-web/issues/10362

Per https://github.com/vector-im/riot-web/pull/11998#issuecomment-577329852
2020-01-22 11:55:09 -07:00
J. Ryan Stinnett
d7e47841e5 Merge pull request #12001 from vector-im/jryans/bash-docker
Use bash in Docker scripts
2020-01-22 17:48:57 +00:00
J. Ryan Stinnett
b6963d0e5c Use bash in Docker scripts
Our Docker scripts use Bash-style conditionals that aren't supported by the
default Debian shell.
2020-01-22 17:45:22 +00:00
Travis Ralston
1b8ea4b6d7 Merge pull request #11999 from vector-im/travis/develop-docker
Use debian to build the Docker image
2020-01-22 10:04:01 -07:00
Travis Ralston
51a97571a0 Use debian to build the Docker image
Fixes not having certain OS capabilities to build some packages.
2020-01-22 09:08:05 -07:00
Michael Telatynski
1d53fc41ea Merge pull request #11998 from vector-im/t3chguy/update_config
Update cookie policy urls on /app and /develop config.json
2020-01-22 15:58:13 +00:00
Michael Telatynski
0798945109 Update cookie policy urls on /app and /develop config.json 2020-01-22 15:49:00 +00:00
Michael Telatynski
8d769dafca Merge pull request #11996 from vector-im/t3chguy/buildkite
BuildKite: Only deploy to /develop if everything else passed
2020-01-22 15:25:15 +00:00
Michael Telatynski
5d95a3ef7e Only deploy to /develop if everything else passed 2020-01-22 15:04:31 +00:00
J. Ryan Stinnett
0f24950466 Merge pull request #11995 from vector-im/jryans/extra-report-content
Add docs for admin report content message
2020-01-22 14:25:52 +00:00
J. Ryan Stinnett
fe15d3b7c1 Add docs for admin report content message
Part of https://github.com/vector-im/riot-web/issues/11992
2020-01-22 14:18:29 +00:00
Travis Ralston
3036bab1c6 Merge pull request #11959 from vector-im/travis/fix-skinning
Load as little as possible in index.js for the skinner
2020-01-21 09:33:15 -07:00
Damir Jelić
e1e3bba290 ElectronPlatform: Replace the indexSize method with the getStats method. 2020-01-21 13:35:29 +01:00
Damir Jelić
e556bb242f ElectronPlatform: Add the indexSize method. 2020-01-21 13:35:29 +01:00
David Baker
18bdbe13b4 Merge pull request #11956 from vector-im/travis/steal-daves-webpack
Fix webpack config (by stealing Dave's config)
2020-01-21 10:23:15 +00:00
David Baker
6835f6054b path.resolve does joining too so path.join is redundant 2020-01-21 10:16:32 +00:00
Travis Ralston
99e1ff9477 Load as little as possible in index.js for the skinner
Imports are optimized to be concurrent/async by webpack, which means that when the old index.js referenced the Lifecycle from the react-sdk it caused the app to explode. This is because in another branch the Lifecycle references a class member of a skinnable component, leading to the skinner complaining that the skin hasn't been loaded.

To work around this, we've shoved all the app stuff to a new app.js file, leaving just the skinning and some early bootstrap work in the index.js
2020-01-20 19:52:11 -07:00
Travis Ralston
932c221548 Fix webpack config (by stealing Dave's config)
Without doing something like this it's hard to use `yarn link`ed resources.
2020-01-20 18:10:06 -07:00
Travis Ralston
3e324f6544 Merge pull request #11954 from vector-im/travis/fix/tests/jest-resolve
Force Jest to resolve the js-sdk and react-sdk to src directories
2020-01-20 14:38:16 -07:00
Travis Ralston
5b575d5627 Force Jest to resolve the js-sdk and react-sdk to src directories 2020-01-20 14:28:29 -07:00
David Baker
be64e86cc3 Merge pull request #11949 from vector-im/dbkr/fix_webpack_build_fix
Fix build to not babel modules inside js/react sdk
2020-01-20 18:31:06 +00:00
David Baker
42743c3ead Third try at fixing build 2020-01-20 18:20:41 +00:00
David Baker
5d8d5d70d0 Fix build to not babel modules inside js/react sdk
Adds 'src' to react-sdk & js-sdk babel test path so we don't run node
modules inside js & react sdk through babel
2020-01-20 18:00:38 +00:00
David Baker
4c699d8001 Merge pull request #11944 from vector-im/dbkr/fix_build_webpack
Fix webpack to babel js-sdk & react-sdk but no other deps
2020-01-20 17:19:59 +00:00
David Baker
922ed597d6 Fix webpack to babel js-sdk & react-sdk but no other deps
This was happening implicitly in our dev setups and the CI build
because of the comment on the last line.
2020-01-20 16:55:07 +00:00
Damir Jelić
a2e256b4c9 ElectronPlatform: Add the ability to load file events from the event index. 2020-01-17 10:11:57 +01:00
31 changed files with 1114 additions and 823 deletions

View File

@@ -1,6 +1,8 @@
steps:
- label: ":eslint: JS Lint"
command:
- "echo '--- Fetching Dependencies'"
- "./scripts/fetch-develop.deps.sh --depth 1"
- "yarn install"
- "yarn lint:js"
plugins:
@@ -52,19 +54,6 @@ steps:
- docker#v3.0.1:
image: "node:10"
- label: ":hammer: Package"
command:
- "echo '--- Fetching Dependencies'"
- "./scripts/fetch-develop.deps.sh --depth 1"
- "yarn install"
- "echo '+++ Packaging'"
- "./scripts/ci_package.sh"
branches: "develop"
artifact_paths: "dist/riot-*.tar.gz"
plugins:
- docker#v3.0.1:
image: "node:10"
- label: "🌐 i18n"
command:
- "echo '--- Fetching Dependencies'"
@@ -75,3 +64,19 @@ steps:
plugins:
- docker#v3.0.1:
image: "node:10"
- wait: ~ # this wait is to perform deploy to /develop only if all other steps passed
continue_on_failure: false
- label: ":hammer: Package"
command:
- "echo '--- Fetching Dependencies'"
- "./scripts/fetch-develop.deps.sh --depth 1"
- "yarn install"
- "echo '+++ Packaging'"
- "./scripts/ci_package.sh"
branches: "develop"
artifact_paths: "dist/riot-*.tar.gz"
plugins:
- docker#v3.0.1:
image: "node:10"

View File

@@ -10,7 +10,14 @@
"test/es5/specification",
"test/css/objectfit",
"test/storage/localstorage",
"test/workers/webworkers",
"test/indexeddb"
"test/es6/array",
"test/es6/collections",
"test/es6/promises",
"test/svg",
"test/svg/asimg",
"test/svg/filters",
"test/css/animations",
"test/css/filters",
"test/network/fetch"
]
}

View File

@@ -1,3 +1,76 @@
Changes in [1.5.9](https://github.com/vector-im/riot-web/releases/tag/v1.5.9) (2020-02-17)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.9-rc.1...v1.5.9)
* Automate SDK dep upgrades for release
[\#12374](https://github.com/vector-im/riot-web/pull/12374)
Changes in [1.5.9-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.5.9-rc.1) (2020-02-13)
====================================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.8...v1.5.9-rc.1)
* Upgrade JS SDK to 5.0.0-rc.1 and React SDK 2.1.0-rc.2
* Update from Weblate
[\#12354](https://github.com/vector-im/riot-web/pull/12354)
* Add top left menu shortcut
[\#12310](https://github.com/vector-im/riot-web/pull/12310)
* Remove modernizr rules for features on which we only soft depend
[\#12272](https://github.com/vector-im/riot-web/pull/12272)
* Embed CSP meta tag and stop using script-src unsafe-inline
[\#12258](https://github.com/vector-im/riot-web/pull/12258)
* Add contribute.json
[\#12251](https://github.com/vector-im/riot-web/pull/12251)
* Improve Browser checks
[\#12232](https://github.com/vector-im/riot-web/pull/12232)
* Document padlock flag
[\#12173](https://github.com/vector-im/riot-web/pull/12173)
* Enable cross-signing on /develop
[\#12126](https://github.com/vector-im/riot-web/pull/12126)
* Switch back to legacy decorators
[\#12110](https://github.com/vector-im/riot-web/pull/12110)
* Update babel targets
[\#12102](https://github.com/vector-im/riot-web/pull/12102)
* Install deps for linting
[\#12076](https://github.com/vector-im/riot-web/pull/12076)
* Update from Weblate
[\#12062](https://github.com/vector-im/riot-web/pull/12062)
* Change to minimal Webpack output
[\#12049](https://github.com/vector-im/riot-web/pull/12049)
* Remove docs for new invite dialog labs feature
[\#12015](https://github.com/vector-im/riot-web/pull/12015)
* ElectronPlatform: Add the indexSize method.
[\#11529](https://github.com/vector-im/riot-web/pull/11529)
* ElectronPlatform: Add the ability to load file events from the event index
[\#11907](https://github.com/vector-im/riot-web/pull/11907)
* Fix the remainder of the cookie links
[\#12008](https://github.com/vector-im/riot-web/pull/12008)
* Use bash in Docker scripts
[\#12001](https://github.com/vector-im/riot-web/pull/12001)
* Use debian to build the Docker image
[\#11999](https://github.com/vector-im/riot-web/pull/11999)
* Update cookie policy urls on /app and /develop config.json
[\#11998](https://github.com/vector-im/riot-web/pull/11998)
* BuildKite: Only deploy to /develop if everything else passed
[\#11996](https://github.com/vector-im/riot-web/pull/11996)
* Add docs for admin report content message
[\#11995](https://github.com/vector-im/riot-web/pull/11995)
* Load as little as possible in index.js for the skinner
[\#11959](https://github.com/vector-im/riot-web/pull/11959)
* Fix webpack config (by stealing Dave's config)
[\#11956](https://github.com/vector-im/riot-web/pull/11956)
* Force Jest to resolve the js-sdk and react-sdk to src directories
[\#11954](https://github.com/vector-im/riot-web/pull/11954)
* Fix build to not babel modules inside js/react sdk
[\#11949](https://github.com/vector-im/riot-web/pull/11949)
* Fix webpack to babel js-sdk & react-sdk but no other deps
[\#11944](https://github.com/vector-im/riot-web/pull/11944)
Changes in [1.5.8](https://github.com/vector-im/riot-web/releases/tag/v1.5.8) (2020-01-27)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.8-rc.2...v1.5.8)
* Fixes for alias display and copy / paste on composer
Changes in [1.5.8-rc.2](https://github.com/vector-im/riot-web/releases/tag/v1.5.8-rc.2) (2020-01-22)
====================================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.5.8-rc.1...v1.5.8-rc.2)

View File

@@ -1,5 +1,5 @@
# Builder
FROM node:10-alpine as builder
FROM node:10 as builder
# Support custom branches of the react-sdk and js-sdk. This also helps us build
# images of riot-web develop.
@@ -9,12 +9,12 @@ ARG REACT_SDK_BRANCH="master"
ARG JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git"
ARG JS_SDK_BRANCH="master"
RUN apk add --no-cache git dos2unix
RUN apt-get update && apt-get install -y git dos2unix
WORKDIR /src
COPY . /src
RUN dos2unix /src/scripts/docker-link-repos.sh && sh /src/scripts/docker-link-repos.sh
RUN dos2unix /src/scripts/docker-link-repos.sh && bash /src/scripts/docker-link-repos.sh
RUN yarn --network-timeout=100000 install
RUN yarn build
@@ -22,7 +22,7 @@ RUN yarn build
RUN cp /src/config.sample.json /src/webapp/config.json
# Ensure we populate the version file
RUN dos2unix /src/scripts/docker-write-version.sh && sh /src/scripts/docker-write-version.sh
RUN dos2unix /src/scripts/docker-write-version.sh && bash /src/scripts/docker-write-version.sh
# App

View File

@@ -1,25 +1,23 @@
module.exports = {
"sourceMaps": true,
"presets": [
["@babel/preset-env", {
"targets": {
"browsers": [
"last 2 versions"
]
}
}],
"@babel/preset-typescript",
"@babel/preset-flow",
"@babel/preset-react"
],
"plugins": [
["@babel/plugin-proposal-decorators", {"legacy": true}],
"@babel/plugin-proposal-export-default-from",
"@babel/plugin-proposal-numeric-separator",
"@babel/plugin-proposal-class-properties",
"@babel/plugin-proposal-object-rest-spread",
"@babel/plugin-transform-flow-comments",
"@babel/plugin-syntax-dynamic-import",
"@babel/plugin-transform-runtime"
]
"sourceMaps": true,
"presets": [
["@babel/preset-env", {
"targets": [
"last 2 Chrome versions", "last 2 Firefox versions", "last 2 Safari versions"
],
}],
"@babel/preset-typescript",
"@babel/preset-flow",
"@babel/preset-react"
],
"plugins": [
["@babel/plugin-proposal-decorators", {legacy: true}],
"@babel/plugin-proposal-export-default-from",
"@babel/plugin-proposal-numeric-separator",
"@babel/plugin-proposal-class-properties",
"@babel/plugin-proposal-object-rest-spread",
"@babel/plugin-transform-flow-comments",
"@babel/plugin-syntax-dynamic-import",
"@babel/plugin-transform-runtime"
]
};

17
contribute.json Normal file
View File

@@ -0,0 +1,17 @@
{
"name": "Riot",
"description": "A glossy Matrix collaboration client for the web.",
"repository": {
"url": "https://github.com/vector-im/riot-web",
"license": "Apache License 2.0"
},
"bugs": {
"list": "https://github.com/vector-im/riot-web/issues",
"report": "https://github.com/vector-im/riot-web/issues/new/choose"
},
"keywords": [
"chat",
"riot",
"matrix"
]
}

View File

@@ -37,6 +37,10 @@ For a good example, see https://riot.im/develop/config.json.
authentication flows
1. `authFooterLinks`: a list of links to show in the authentication page footer:
`[{"text": "Link text", "url": "https://link.target"}, {"text": "Other link", ...}]`
1. `reportEvent`: Configures the dialog for reporting content to the homeserver
admin.
1. `adminMessageMD`: An extra message to show on the reporting dialog to
mention homeserver-specific policies. Accepts Markdown.
1. `integrations_ui_url`: URL to the web interface for the integrations server. The integrations
server is not Riot and normally not your homeserver either. The integration server settings
may be left blank to disable integrations.

View File

@@ -82,12 +82,6 @@ that downloads, stores, and indexes room messages for E2E encrypted rooms.
The existing search will transparently work for encrypted rooms just like it
does for non-encrypted.
## New invite dialog (`feature_ftue_dms`)
An improved dialog for inviting users. This replaces both the DM creation dialog
and the 'invite user' dialog, using your recent DMs as a suggestion for who to chat
with.
## Bridge info tab (`feature_bridge_state`)
Adds a "Bridge Info" tab to the Room Settings dialog, if a compatible bridge is
@@ -99,3 +93,8 @@ tab as the single source of truth just yet.
This adds a presence indicator in the room list next to DM rooms where the other
person is online.
## Show padlocks on invite only rooms (`feature_invite_only_padlocks`)
This adds padlocks to room list tiles and room header for invite only rooms.
This feature flag (unlike most) is enabled by default.

View File

@@ -47,7 +47,7 @@ Again from the `electron_app/` directory:
Recompiling Seshat itself can be done like so:
yarn run electron-build-env -- --electron 6.1.1 -- neon build matrix-seshat --release`
yarn run electron-build-env -- --electron 6.1.1 -- neon build matrix-seshat --release
Please make sure to include all the `--` as well as the `--release` command line
switch at the end. Modify your electron version accordingly depending on the
@@ -56,6 +56,5 @@ version that is installed on your system.
After this is done the Electron version of Riot can be run from the main folder
as usual using:
yarn build
yarn electron

View File

@@ -11,3 +11,4 @@ The modifier is <kbd>Ctrl</kbd> on Windows & Linux and <kbd>⌘</kbd> on Mac.
- <kbd>Alt</kbd>+<kbd>↑</kbd>/<kbd>↓</kbd> - resend previous messages when the composer is in focus
- <kbd>PageUp</kbd>/<kbd>PageDown</kbd> - scroll timeline up/down
- <kbd>Ctrl</kbd>/<kbd>⌘</kbd>+<kbd>Home</kbd>/<kbd>End</kbd> - jump to timeline start/end
- <kbd>Ctrl</kbd>/<kbd>⌘</kbd>+<kbd>`</kbd> - toggle the top left menu

View File

@@ -9,6 +9,9 @@
Latest electron-builder does, but it appears to be causing issues:
(https://github.com/electron-userland/electron-builder/issues/4390)
-->
<!-- https://github.com/electron/electron-notarize#prerequisites -->
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<!-- https://github.com/electron-userland/electron-builder/issues/3940 -->

View File

@@ -1,14 +0,0 @@
#!/bin/bash
# Link to the binary
ln -sf '/opt/${productFilename}/${executable}' '/usr/bin/${executable}'
# SUID chrome-sandbox for Electron 5+
# Remove this entire file (after-install.tpl) and remove the reference in
# package.json once this change has been upstreamed so we go back to the copy
# from upstream.
# https://github.com/electron-userland/electron-builder/pull/4163
chmod 4755 '/opt/${productFilename}/chrome-sandbox' || true
update-mime-database /usr/share/mime || true
update-desktop-database /usr/share/applications || true

View File

@@ -2,7 +2,7 @@
"name": "riot-web",
"productName": "Riot",
"main": "src/electron-main.js",
"version": "1.5.8-rc.2",
"version": "1.5.9",
"description": "A feature-rich client for Matrix.org",
"author": "New Vector Ltd.",
"dependencies": {

View File

@@ -22,7 +22,7 @@
"piwik": {
"url": "https://piwik.riot.im/",
"siteId": 1,
"policyUrl": "https://matrix.org/docs/guides/riot_im_cookie_policy"
"policyUrl": "https://matrix.org/legal/riot-im-cookie-policy"
},
"phasedRollOut": {
"feature_lazyloading": {

View File

@@ -346,6 +346,18 @@ ipcMain.on('seshat', async function(ev, payload) {
}
break;
case 'getStats':
if (eventIndex === null) ret = 0;
else {
try {
ret = await eventIndex.getStats();
} catch (e) {
sendError(payload.id, e);
return;
}
}
break;
case 'removeCrawlerCheckpoint':
if (eventIndex === null) ret = false;
else {
@@ -370,6 +382,18 @@ ipcMain.on('seshat', async function(ev, payload) {
}
break;
case 'loadFileEvents':
if (eventIndex === null) ret = [];
else {
try {
ret = await eventIndex.loadFileEvents(args[0]);
} catch (e) {
sendError(payload.id, e);
return;
}
}
break;
case 'loadCheckpoints':
if (eventIndex === null) ret = [];
else {

View File

@@ -2,7 +2,7 @@
"name": "riot-web",
"productName": "Riot",
"main": "electron_app/src/electron-main.js",
"version": "1.5.8-rc.2",
"version": "1.5.9",
"description": "A feature-rich client for Matrix.org",
"author": "New Vector Ltd.",
"repository": {
@@ -24,7 +24,8 @@
"LICENSE",
"README.md",
"AUTHORS.rst",
"package.json"
"package.json",
"contribute.json"
],
"style": "bundle.css",
"scripts": {
@@ -65,9 +66,8 @@
"gemini-scrollbar": "github:matrix-org/gemini-scrollbar#91e1e566",
"gfm.css": "^1.1.2",
"highlight.js": "^9.13.1",
"matrix-js-sdk": "4.0.0-rc.1",
"matrix-react-sdk": "2.0.0-rc.2",
"modernizr": "^3.6.0",
"matrix-js-sdk": "5.0.0",
"matrix-react-sdk": "2.1.0",
"olm": "https://packages.matrix.org/npm/olm/olm-3.1.4.tgz",
"postcss-easings": "^2.0.0",
"prop-types": "^15.7.2",
@@ -106,8 +106,8 @@
"cpx": "^1.3.2",
"cross-env": "^6.0.3",
"css-loader": "^3.3.2",
"electron-builder": "^21.2.0",
"electron-builder-squirrel-windows": "^21.2.0",
"electron-builder": "^22.3.2",
"electron-builder-squirrel-windows": "^22.3.2",
"electron-devtools-installer": "^2.2.4",
"electron-notarize": "^0.2.0",
"eslint": "^5.8.0",
@@ -131,6 +131,7 @@
"mini-css-extract-plugin": "^0.8.0",
"minimist": "^1.2.0",
"mkdirp": "^0.5.1",
"modernizr": "^3.6.0",
"optimize-css-assets-webpack-plugin": "^5.0.3",
"postcss-extend": "^1.0.5",
"postcss-import": "^12.0.1",
@@ -152,7 +153,7 @@
},
"build": {
"appId": "im.riot.app",
"electronVersion": "7.1.9",
"electronVersion": "7.1.12",
"files": [
"node_modules/**",
"src/**"
@@ -172,9 +173,6 @@
"StartupWMClass": "riot"
}
},
"deb": {
"afterInstall": "electron_app/build/linux/after-install.tpl"
},
"mac": {
"category": "public.app-category.social-networking",
"darkModeSupport": true
@@ -193,6 +191,9 @@
"afterSign": "scripts/electron_afterSign.js"
},
"jest": {
"modulePathIgnorePatterns": [
"<rootDir>/electron_app"
],
"testEnvironment": "jest-environment-jsdom-fourteen",
"testMatch": [
"<rootDir>/test/**/*-test.js"
@@ -205,7 +206,9 @@
"\\$webapp/i18n/languages.json": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/languages.json",
"^browser-request$": "<rootDir>/node_modules/matrix-react-sdk/__mocks__/browser-request.js",
"^react$": "<rootDir>/node_modules/react",
"^react-dom$": "<rootDir>/node_modules/react-dom"
"^react-dom$": "<rootDir>/node_modules/react-dom",
"^matrix-js-sdk$": "<rootDir>/node_modules/matrix-js-sdk/src",
"^matrix-react-sdk$": "<rootDir>/node_modules/matrix-react-sdk/src"
},
"transformIgnorePatterns": [
"/node_modules/(?!matrix-js-sdk).+$",

View File

@@ -21,25 +21,40 @@ cd `dirname $0`
for i in matrix-js-sdk matrix-react-sdk
do
depver=`cat package.json | jq -r .dependencies[\"$i\"]`
latestver=`yarn info -s $i version`
latestver=`yarn info -s $i dist-tags.next`
if [ "$depver" != "$latestver" ]
then
echo "The latest version of $i is $latestver but package.json depends on $depver"
echo -n "Type 'Yes' to continue anyway: "
echo "The latest version of $i is $latestver but package.json depends on $depver."
echo -n "Type 'u' to auto-upgrade, 'c' to continue anyway, or 'a' to abort:"
read resp
if [ "$resp" != "Yes" ]
if [ "$resp" != "u" ] && [ "$resp" != "c" ]
then
echo "OK, never mind."
echo "Aborting."
exit 1
fi
if [ "$resp" == "u" ]
then
echo "Upgrading $i to $latestver..."
yarn add -E $i@$latestver
git add -u
# The `-e` flag opens the editor and gives you a chance to check
# the upgrade for correctness.
git commit -m "Upgrade $i to $latestver" -e
fi
fi
done
# bump Electron's package.json first
release="${1#v}"
tag="v${release}"
echo "electron yarn version"
prerelease=0
# We check if this build is a prerelease by looking to
# see if the version has a hyphen in it. Crude,
# but semver doesn't support postreleases so anything
# with a hyphen is a prerelease.
echo $release | grep -q '-' && prerelease=1
# bump Electron's package.json first
echo "electron yarn version"
cd electron_app
yarn version --no-git-tag-version --new-version "$release"
git commit package.json -m "$tag"
@@ -47,3 +62,16 @@ git commit package.json -m "$tag"
cd ..
exec ./node_modules/matrix-js-sdk/release.sh -u vector-im -z "$orig_args"
if [ $prerelease -eq 0 ]
then
# For a release, reset SDK deps back to the `develop` branch.
for i in matrix-js-sdk matrix-react-sdk
do
echo "Resetting $i to develop branch..."
yarn add github:matrix-org/$i#develop
git add -u
git commit -m "Reset $i back to develop branch"
done
git push origin develop
fi

View File

@@ -18,7 +18,7 @@
"piwik": {
"url": "https://piwik.riot.im/",
"siteId": 1,
"policyUrl": "https://matrix.org/docs/guides/riot_im_cookie_policy"
"policyUrl": "https://matrix.org/legal/riot-im-cookie-policy"
},
"roomDirectory": {
"servers": [
@@ -35,7 +35,7 @@
"text": "Privacy Policy"
},
{
"url": "https://matrix.org/docs/guides/riot_im_cookie_policy",
"url": "https://matrix.org/legal/riot-im-cookie-policy",
"text": "Cookie Policy"
}
]

View File

@@ -20,9 +20,9 @@
"feature_many_integration_managers": "labs",
"feature_mjolnir": "labs",
"feature_dm_verification": "labs",
"feature_cross_signing": "labs",
"feature_cross_signing": "enable",
"feature_invite_only_padlocks": "enable",
"feature_event_indexing": "disable",
"feature_ftue_dms": "labs",
"feature_bridge_state": "labs",
"feature_presence_in_room_list": "labs"
},
@@ -30,7 +30,7 @@
"piwik": {
"url": "https://piwik.riot.im/",
"siteId": 1,
"policyUrl": "https://matrix.org/docs/guides/riot_im_cookie_policy"
"policyUrl": "https://matrix.org/legal/riot-im-cookie-policy"
},
"roomDirectory": {
"servers": [
@@ -47,7 +47,7 @@
"text": "Privacy Policy"
},
{
"url": "https://matrix.org/docs/guides/riot_im_cookie_policy",
"url": "https://matrix.org/legal/riot-im-cookie-policy",
"text": "Cookie Policy"
}
]

View File

@@ -66,6 +66,7 @@ const COPY_LIST = [
["node_modules/matrix-react-sdk/res/media/**", "webapp/media"],
["node_modules/olm/olm_legacy.js", "webapp", { directwatch: 1 }],
["./config.json", "webapp", { directwatch: 1 }],
["contribute.json", "webapp"],
];
const parseArgs = require('minimist');

View File

@@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
set -ex

View File

@@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
set -ex

View File

@@ -14,7 +14,7 @@
"Create Account": "Fiók készítés",
"Need help?": "Segíthetünk?",
"Explore rooms": "Szobák felderítése",
"Room Directory": "Szoba lista",
"Room Directory": "Szobalista",
"Unexpected error preparing the app. See console for details.": "Váratlan hiba történt az alkalmazás előkészítésénél. A részletekért nézd meg a konzolt.",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Érvénytelen konfiguráció: csak egyet lehet megadni a default_server_config, default_server_name és default_hs_url közül.",
"Invalid configuration: no default server specified.": "Érvénytelen konfiguráció: nincs megadva alapértelmezett szerver.",

View File

@@ -0,0 +1 @@
{}

486
src/vector/app.js Normal file
View File

@@ -0,0 +1,486 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
Copyright 2017 Vector Creations Ltd
Copyright 2018, 2019 New Vector Ltd
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
Copyright 2020 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import olmWasmPath from 'olm/olm.wasm';
import React from 'react';
// add React and ReactPerf to the global namespace, to make them easier to
// access via the console
global.React = React;
import ReactDOM from 'react-dom';
import * as sdk from 'matrix-react-sdk';
import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg';
import * as VectorConferenceHandler from 'matrix-react-sdk/src/VectorConferenceHandler';
import * as languageHandler from 'matrix-react-sdk/src/languageHandler';
import {_t, _td, newTranslatableError} from 'matrix-react-sdk/src/languageHandler';
import AutoDiscoveryUtils from 'matrix-react-sdk/src/utils/AutoDiscoveryUtils';
import {AutoDiscovery} from "matrix-js-sdk/src/autodiscovery";
import * as Lifecycle from "matrix-react-sdk/src/Lifecycle";
import url from 'url';
import {parseQs, parseQsFromFragment} from './url_utils';
import ElectronPlatform from './platform/ElectronPlatform';
import WebPlatform from './platform/WebPlatform';
import {MatrixClientPeg} from 'matrix-react-sdk/src/MatrixClientPeg';
import SettingsStore from "matrix-react-sdk/src/settings/SettingsStore";
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
import {setTheme} from "matrix-react-sdk/src/theme";
import Olm from 'olm';
import CallHandler from 'matrix-react-sdk/src/CallHandler';
let lastLocationHashSet = null;
function checkBrowserFeatures() {
if (!window.Modernizr) {
console.error("Cannot check features - Modernizr global is missing.");
return false;
}
// custom checks atop Modernizr because it doesn't have ES2018/ES2019 checks in it for some features we depend on,
// Modernizr requires rules to be lowercase with no punctuation:
// ES2018: http://www.ecma-international.org/ecma-262/9.0/#sec-promise.prototype.finally
window.Modernizr.addTest("promiseprototypefinally", () =>
window.Promise && window.Promise.prototype && typeof window.Promise.prototype.finally === "function");
// ES2019: http://www.ecma-international.org/ecma-262/10.0/#sec-object.fromentries
window.Modernizr.addTest("objectfromentries", () =>
window.Object && typeof window.Object.fromEntries === "function");
const featureList = Object.keys(window.Modernizr);
let featureComplete = true;
for (let i = 0; i < featureList.length; i++) {
if (window.Modernizr[featureList[i]] === undefined) {
console.error(
"Looked for feature '%s' but Modernizr has no results for this. " +
"Has it been configured correctly?", featureList[i],
);
return false;
}
if (window.Modernizr[featureList[i]] === false) {
console.error("Browser missing feature: '%s'", featureList[i]);
// toggle flag rather than return early so we log all missing features rather than just the first.
featureComplete = false;
}
}
return featureComplete;
}
// Parse the given window.location and return parameters that can be used when calling
// MatrixChat.showScreen(screen, params)
function getScreenFromLocation(location) {
const fragparts = parseQsFromFragment(location);
return {
screen: fragparts.location.substring(1),
params: fragparts.params,
};
}
// Here, we do some crude URL analysis to allow
// deep-linking.
function routeUrl(location) {
if (!window.matrixChat) return;
console.log("Routing URL ", location.href);
const s = getScreenFromLocation(location);
window.matrixChat.showScreen(s.screen, s.params);
}
function onHashChange(ev) {
if (decodeURIComponent(window.location.hash) === lastLocationHashSet) {
// we just set this: no need to route it!
return;
}
routeUrl(window.location);
}
// This will be called whenever the SDK changes screens,
// so a web page can update the URL bar appropriately.
function onNewScreen(screen) {
console.log("newscreen "+screen);
const hash = '#/' + screen;
lastLocationHashSet = hash;
window.location.hash = hash;
}
// We use this to work out what URL the SDK should
// pass through when registering to allow the user to
// click back to the client having registered.
// It's up to us to recognise if we're loaded with
// this URL and tell MatrixClient to resume registration.
//
// If we're in electron, we should never pass through a file:// URL otherwise
// the identity server will try to 302 the browser to it, which breaks horribly.
// so in that instance, hardcode to use riot.im/app for now instead.
function makeRegistrationUrl(params) {
let url;
if (window.location.protocol === "vector:") {
url = 'https://riot.im/app/#/register';
} else {
url = (
window.location.protocol + '//' +
window.location.host +
window.location.pathname +
'#/register'
);
}
const keys = Object.keys(params);
for (let i = 0; i < keys.length; ++i) {
if (i === 0) {
url += '?';
} else {
url += '&';
}
const k = keys[i];
url += k + '=' + encodeURIComponent(params[k]);
}
return url;
}
function onTokenLoginCompleted() {
// if we did a token login, we're now left with the token, hs and is
// url as query params in the url; a little nasty but let's redirect to
// clear them.
const parsedUrl = url.parse(window.location.href);
parsedUrl.search = "";
const formatted = url.format(parsedUrl);
console.log("Redirecting to " + formatted + " to drop loginToken " +
"from queryparams");
window.location.href = formatted;
}
export async function loadApp() {
// XXX: the way we pass the path to the worker script from webpack via html in body's dataset is a hack
// but alternatives seem to require changing the interface to passing Workers to js-sdk
const vectorIndexeddbWorkerScript = document.body.dataset.vectorIndexeddbWorkerScript;
if (!vectorIndexeddbWorkerScript) {
// If this is missing, something has probably gone wrong with
// the bundling. The js-sdk will just fall back to accessing
// indexeddb directly with no worker script, but we want to
// make sure the indexeddb script is present, so fail hard.
throw new Error("Missing indexeddb worker script!");
}
MatrixClientPeg.setIndexedDbWorkerScript(vectorIndexeddbWorkerScript);
CallHandler.setConferenceHandler(VectorConferenceHandler);
window.addEventListener('hashchange', onHashChange);
await loadOlm();
// set the platform for react sdk
if (window.ipcRenderer) {
console.log("Using Electron platform");
const plaf = new ElectronPlatform();
PlatformPeg.set(plaf);
} else {
console.log("Using Web platform");
PlatformPeg.set(new WebPlatform());
}
const platform = PlatformPeg.get();
let configJson;
let configError;
let configSyntaxError = false;
try {
configJson = await platform.getConfig();
} catch (e) {
configError = e;
if (e && e.err && e.err instanceof SyntaxError) {
console.error("SyntaxError loading config:", e);
configSyntaxError = true;
configJson = {}; // to prevent errors between here and loading CSS for the error box
}
}
// XXX: We call this twice, once here and once in MatrixChat as a prop. We call it here to ensure
// granular settings are loaded correctly and to avoid duplicating the override logic for the theme.
SdkConfig.put(configJson);
// Load language after loading config.json so that settingsDefaults.language can be applied
await loadLanguage();
const fragparts = parseQsFromFragment(window.location);
const params = parseQs(window.location);
// don't try to redirect to the native apps if we're
// verifying a 3pid (but after we've loaded the config)
// or if the user is following a deep link
// (https://github.com/vector-im/riot-web/issues/7378)
const preventRedirect = fragparts.params.client_secret || fragparts.location.length > 0;
if (!preventRedirect) {
const isIos = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
const isAndroid = /Android/.test(navigator.userAgent);
if (isIos || isAndroid) {
if (document.cookie.indexOf("riot_mobile_redirect_to_guide=false") === -1) {
window.location = "mobile_guide/";
return;
}
}
}
// as quickly as we possibly can, set a default theme...
await setTheme();
// Now that we've loaded the theme (CSS), display the config syntax error if needed.
if (configSyntaxError) {
const errorMessage = (
<div>
<p>
{_t(
"Your Riot configuration contains invalid JSON. Please correct the problem " +
"and reload the page.",
)}
</p>
<p>
{_t(
"The message from the parser is: %(message)s",
{message: configError.err.message || _t("Invalid JSON")},
)}
</p>
</div>
);
const GenericErrorPage = sdk.getComponent("structures.GenericErrorPage");
window.matrixChat = ReactDOM.render(
<GenericErrorPage message={errorMessage} title={_t("Your Riot is misconfigured")} />,
document.getElementById('matrixchat'),
);
return;
}
const validBrowser = checkBrowserFeatures();
const acceptInvalidBrowser = window.localStorage && window.localStorage.getItem('mx_accepts_unsupported_browser');
const urlWithoutQuery = window.location.protocol + '//' + window.location.host + window.location.pathname;
console.log("Vector starting at " + urlWithoutQuery);
if (configError) {
window.matrixChat = ReactDOM.render(<div className="error">
Unable to load config file: please refresh the page to try again.
</div>, document.getElementById('matrixchat'));
} else if (validBrowser || acceptInvalidBrowser) {
platform.startUpdater();
// Don't bother loading the app until the config is verified
verifyServerConfig().then((newConfig) => {
const MatrixChat = sdk.getComponent('structures.MatrixChat');
window.matrixChat = ReactDOM.render(
<MatrixChat
onNewScreen={onNewScreen}
makeRegistrationUrl={makeRegistrationUrl}
ConferenceHandler={VectorConferenceHandler}
config={newConfig}
realQueryParams={params}
startingFragmentQueryParams={fragparts.params}
enableGuest={!configJson.disable_guests}
onTokenLoginCompleted={onTokenLoginCompleted}
initialScreenAfterLogin={getScreenFromLocation(window.location)}
defaultDeviceDisplayName={platform.getDefaultDeviceDisplayName()}
/>,
document.getElementById('matrixchat'),
);
}).catch(err => {
console.error(err);
let errorMessage = err.translatedMessage
|| _t("Unexpected error preparing the app. See console for details.");
errorMessage = <span>{errorMessage}</span>;
// Like the compatibility page, AWOOOOOGA at the user
const GenericErrorPage = sdk.getComponent("structures.GenericErrorPage");
window.matrixChat = ReactDOM.render(
<GenericErrorPage message={errorMessage} title={_t("Your Riot is misconfigured")} />,
document.getElementById('matrixchat'),
);
});
} else {
console.error("Browser is missing required features.");
// take to a different landing page to AWOOOOOGA at the user
const CompatibilityPage = sdk.getComponent("structures.CompatibilityPage");
window.matrixChat = ReactDOM.render(
<CompatibilityPage onAccept={function() {
if (window.localStorage) window.localStorage.setItem('mx_accepts_unsupported_browser', true);
console.log("User accepts the compatibility risks.");
loadApp();
}} />,
document.getElementById('matrixchat'),
);
}
}
function loadOlm() {
/* Load Olm. We try the WebAssembly version first, and then the legacy,
* asm.js version if that fails. For this reason we need to wait for this
* to finish before continuing to load the rest of the app. In future
* we could somehow pass a promise down to react-sdk and have it wait on
* that so olm can be loading in parallel with the rest of the app.
*
* We also need to tell the Olm js to look for its wasm file at the same
* level as index.html. It really should be in the same place as the js,
* ie. in the bundle directory, but as far as I can tell this is
* completely impossible with webpack. We do, however, use a hashed
* filename to avoid caching issues.
*/
return Olm.init({
locateFile: () => olmWasmPath,
}).then(() => {
console.log("Using WebAssembly Olm");
}).catch((e) => {
console.log("Failed to load Olm: trying legacy version", e);
return new Promise((resolve, reject) => {
const s = document.createElement('script');
s.src = 'olm_legacy.js'; // XXX: This should be cache-busted too
s.onload = resolve;
s.onerror = reject;
document.body.appendChild(s);
}).then(() => {
// Init window.Olm, ie. the one just loaded by the script tag,
// not 'Olm' which is still the failed wasm version.
return window.Olm.init();
}).then(() => {
console.log("Using legacy Olm");
}).catch((e) => {
console.log("Both WebAssembly and asm.js Olm failed!", e);
});
});
}
async function loadLanguage() {
const prefLang = SettingsStore.getValue("language", null, /*excludeDefault=*/true);
let langs = [];
if (!prefLang) {
languageHandler.getLanguagesFromBrowser().forEach((l) => {
langs.push(...languageHandler.getNormalizedLanguageKeys(l));
});
} else {
langs = [prefLang];
}
try {
await languageHandler.setLanguage(langs);
document.documentElement.setAttribute("lang", languageHandler.getCurrentLanguage());
} catch (e) {
console.error("Unable to set language", e);
}
}
async function verifyServerConfig() {
let validatedConfig;
try {
console.log("Verifying homeserver configuration");
// Note: the query string may include is_url and hs_url - we only respect these in the
// context of email validation. Because we don't respect them otherwise, we do not need
// to parse or consider them here.
// Note: Although we throw all 3 possible configuration options through a .well-known-style
// verification, we do not care if the servers are online at this point. We do moderately
// care if they are syntactically correct though, so we shove them through the .well-known
// validators for that purpose.
const config = SdkConfig.get();
let wkConfig = config['default_server_config']; // overwritten later under some conditions
const serverName = config['default_server_name'];
const hsUrl = config['default_hs_url'];
const isUrl = config['default_is_url'];
const incompatibleOptions = [wkConfig, serverName, hsUrl].filter(i => !!i);
if (incompatibleOptions.length > 1) {
// noinspection ExceptionCaughtLocallyJS
throw newTranslatableError(_td(
"Invalid configuration: can only specify one of default_server_config, default_server_name, " +
"or default_hs_url.",
));
}
if (incompatibleOptions.length < 1) {
// noinspection ExceptionCaughtLocallyJS
throw newTranslatableError(_td("Invalid configuration: no default server specified."));
}
if (hsUrl) {
console.log("Config uses a default_hs_url - constructing a default_server_config using this information");
console.warn(
"DEPRECATED CONFIG OPTION: In the future, default_hs_url will not be accepted. Please use " +
"default_server_config instead.",
);
wkConfig = {
"m.homeserver": {
"base_url": hsUrl,
},
};
if (isUrl) {
wkConfig["m.identity_server"] = {
"base_url": isUrl,
};
}
}
let discoveryResult = null;
if (wkConfig) {
console.log("Config uses a default_server_config - validating object");
discoveryResult = await AutoDiscovery.fromDiscoveryConfig(wkConfig);
}
if (serverName) {
console.log("Config uses a default_server_name - doing .well-known lookup");
console.warn(
"DEPRECATED CONFIG OPTION: In the future, default_server_name will not be accepted. Please " +
"use default_server_config instead.",
);
discoveryResult = await AutoDiscovery.findClientConfig(serverName);
}
validatedConfig = AutoDiscoveryUtils.buildValidatedConfigFromDiscovery(serverName, discoveryResult, true);
} catch (e) {
const {hsUrl, isUrl, userId} = Lifecycle.getLocalStorageSessionVars();
if (hsUrl && userId) {
console.error(e);
console.warn("A session was found - suppressing config error and using the session's homeserver");
console.log("Using pre-existing hsUrl and isUrl: ", {hsUrl, isUrl});
validatedConfig = await AutoDiscoveryUtils.validateServerConfigWithStaticUrls(hsUrl, isUrl, true);
} else {
// the user is not logged in, so scream
throw e;
}
}
validatedConfig.isDefault = true;
// Just in case we ever have to debug this
console.log("Using homeserver config:", validatedConfig);
// Add the newly built config to the actual config for use by the app
console.log("Updating SdkConfig with validated discovery information");
SdkConfig.add({"validated_server_config": validatedConfig});
return SdkConfig.get();
}

View File

@@ -22,6 +22,21 @@
<meta name="msapplication-config" content="<%= require('../../res/vector-icons/browserconfig.xml') %>">
<meta name="theme-color" content="#ffffff">
<meta property="og:image" content="<%= htmlWebpackPlugin.options.vars.og_image_url %>" />
<meta http-equiv="Content-Security-Policy" content="
default-src 'none';
style-src 'self' 'unsafe-inline';
script-src 'self' 'unsafe-eval' https://www.recaptcha.net https://www.gstatic.com;
img-src * blob: data:;
connect-src *;
font-src 'self' data:;
media-src * blob: data:;
child-src * blob: data:;
worker-src 'self';
frame-src * blob: data:;
form-action 'self';
object-src 'self';
manifest-src 'self';
">
<% for (var i=0; i < htmlWebpackPlugin.files.css.length; i++) {
var file = htmlWebpackPlugin.files.css[i];
var match = file.match(/^bundles\/.*?\/theme-(.*)\.css$/);
@@ -34,18 +49,10 @@
<% }
} %>
</head>
<body style="height: 100%;">
<body style="height: 100%;" data-vector-indexeddb-worker-script="<%= htmlWebpackPlugin.files.chunks['indexeddb-worker'].entry %>">
<section id="matrixchat" style="height: 100%; overflow: auto;"></section>
<noscript>Sorry, Riot requires JavaScript to be enabled.</noscript> <!-- TODO: Translate this? -->
<script>
window.vector_indexeddb_worker_script = '<%= htmlWebpackPlugin.files.chunks['indexeddb-worker'].entry %>';
</script>
<script src="<%= htmlWebpackPlugin.files.chunks['bundle'].entry %>"></script>
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('sw.js');
}
</script>
<img src="<%= require('matrix-react-sdk/res/img/warning.svg') %>" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/e2e/warning.svg') %>" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/feather-customised/warning-triangle.svg') %>" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>

View File

@@ -3,6 +3,7 @@ Copyright 2015, 2016 OpenMarket Ltd
Copyright 2017 Vector Creations Ltd
Copyright 2018, 2019 New Vector Ltd
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
Copyright 2020 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -24,464 +25,24 @@ require('gemini-scrollbar/gemini-scrollbar.css');
require('gfm.css/gfm.css');
require('highlight.js/styles/github.css');
import olmWasmPath from 'olm/olm.wasm';
// These are things that can run before the skin loads - be careful not to reference the react-sdk though.
import './rageshakesetup';
import React from 'react';
// add React and ReactPerf to the global namespace, to make them easier to
// access via the console
global.React = React;
import './modernizr';
import ReactDOM from 'react-dom';
// load service worker if available on this platform
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('sw.js');
}
// Ensure the skin is the very first thing to load for the react-sdk. We don't even want to reference
// the SDK until we have to in imports.
console.log("Loading skin...");
import * as sdk from 'matrix-react-sdk';
import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg';
sdk.loadSkin(require('../component-index'));
import * as VectorConferenceHandler from 'matrix-react-sdk/src/VectorConferenceHandler';
import * as languageHandler from 'matrix-react-sdk/src/languageHandler';
import {_t, _td, newTranslatableError} from 'matrix-react-sdk/src/languageHandler';
import AutoDiscoveryUtils from 'matrix-react-sdk/src/utils/AutoDiscoveryUtils';
import {AutoDiscovery} from "matrix-js-sdk/src/autodiscovery";
import * as Lifecycle from "matrix-react-sdk/src/Lifecycle";
import * as skin from "../component-index";
sdk.loadSkin(skin);
console.log("Skin loaded!");
import url from 'url';
import {parseQs, parseQsFromFragment} from './url_utils';
import ElectronPlatform from './platform/ElectronPlatform';
import WebPlatform from './platform/WebPlatform';
import {MatrixClientPeg} from 'matrix-react-sdk/src/MatrixClientPeg';
import SettingsStore from "matrix-react-sdk/src/settings/SettingsStore";
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
import {setTheme} from "matrix-react-sdk/src/theme";
import Olm from 'olm';
import CallHandler from 'matrix-react-sdk/src/CallHandler';
let lastLocationHashSet = null;
function checkBrowserFeatures(featureList) {
if (!window.Modernizr) {
console.error("Cannot check features - Modernizr global is missing.");
return false;
}
let featureComplete = true;
for (let i = 0; i < featureList.length; i++) {
if (window.Modernizr[featureList[i]] === undefined) {
console.error(
"Looked for feature '%s' but Modernizr has no results for this. " +
"Has it been configured correctly?", featureList[i],
);
return false;
}
if (window.Modernizr[featureList[i]] === false) {
console.error("Browser missing feature: '%s'", featureList[i]);
// toggle flag rather than return early so we log all missing features
// rather than just the first.
featureComplete = false;
}
}
return featureComplete;
}
// Parse the given window.location and return parameters that can be used when calling
// MatrixChat.showScreen(screen, params)
function getScreenFromLocation(location) {
const fragparts = parseQsFromFragment(location);
return {
screen: fragparts.location.substring(1),
params: fragparts.params,
};
}
// Here, we do some crude URL analysis to allow
// deep-linking.
function routeUrl(location) {
if (!window.matrixChat) return;
console.log("Routing URL ", location.href);
const s = getScreenFromLocation(location);
window.matrixChat.showScreen(s.screen, s.params);
}
function onHashChange(ev) {
if (decodeURIComponent(window.location.hash) === lastLocationHashSet) {
// we just set this: no need to route it!
return;
}
routeUrl(window.location);
}
// This will be called whenever the SDK changes screens,
// so a web page can update the URL bar appropriately.
function onNewScreen(screen) {
console.log("newscreen "+screen);
const hash = '#/' + screen;
lastLocationHashSet = hash;
window.location.hash = hash;
}
// We use this to work out what URL the SDK should
// pass through when registering to allow the user to
// click back to the client having registered.
// It's up to us to recognise if we're loaded with
// this URL and tell MatrixClient to resume registration.
//
// If we're in electron, we should never pass through a file:// URL otherwise
// the identity server will try to 302 the browser to it, which breaks horribly.
// so in that instance, hardcode to use riot.im/app for now instead.
function makeRegistrationUrl(params) {
let url;
if (window.location.protocol === "vector:") {
url = 'https://riot.im/app/#/register';
} else {
url = (
window.location.protocol + '//' +
window.location.host +
window.location.pathname +
'#/register'
);
}
const keys = Object.keys(params);
for (let i = 0; i < keys.length; ++i) {
if (i === 0) {
url += '?';
} else {
url += '&';
}
const k = keys[i];
url += k + '=' + encodeURIComponent(params[k]);
}
return url;
}
function onTokenLoginCompleted() {
// if we did a token login, we're now left with the token, hs and is
// url as query params in the url; a little nasty but let's redirect to
// clear them.
const parsedUrl = url.parse(window.location.href);
parsedUrl.search = "";
const formatted = url.format(parsedUrl);
console.log("Redirecting to " + formatted + " to drop loginToken " +
"from queryparams");
window.location.href = formatted;
}
async function loadApp() {
if (window.vector_indexeddb_worker_script === undefined) {
// If this is missing, something has probably gone wrong with
// the bundling. The js-sdk will just fall back to accessing
// indexeddb directly with no worker script, but we want to
// make sure the indexeddb script is present, so fail hard.
throw new Error("Missing indexeddb worker script!");
}
MatrixClientPeg.setIndexedDbWorkerScript(window.vector_indexeddb_worker_script);
CallHandler.setConferenceHandler(VectorConferenceHandler);
window.addEventListener('hashchange', onHashChange);
await loadOlm();
// set the platform for react sdk
if (window.ipcRenderer) {
console.log("Using Electron platform");
const plaf = new ElectronPlatform();
PlatformPeg.set(plaf);
} else {
console.log("Using Web platform");
PlatformPeg.set(new WebPlatform());
}
const platform = PlatformPeg.get();
let configJson;
let configError;
let configSyntaxError = false;
try {
configJson = await platform.getConfig();
} catch (e) {
configError = e;
if (e && e.err && e.err instanceof SyntaxError) {
console.error("SyntaxError loading config:", e);
configSyntaxError = true;
configJson = {}; // to prevent errors between here and loading CSS for the error box
}
}
// XXX: We call this twice, once here and once in MatrixChat as a prop. We call it here to ensure
// granular settings are loaded correctly and to avoid duplicating the override logic for the theme.
SdkConfig.put(configJson);
// Load language after loading config.json so that settingsDefaults.language can be applied
await loadLanguage();
const fragparts = parseQsFromFragment(window.location);
const params = parseQs(window.location);
// don't try to redirect to the native apps if we're
// verifying a 3pid (but after we've loaded the config)
// or if the user is following a deep link
// (https://github.com/vector-im/riot-web/issues/7378)
const preventRedirect = fragparts.params.client_secret || fragparts.location.length > 0;
if (!preventRedirect) {
const isIos = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
const isAndroid = /Android/.test(navigator.userAgent);
if (isIos || isAndroid) {
if (document.cookie.indexOf("riot_mobile_redirect_to_guide=false") === -1) {
window.location = "mobile_guide/";
return;
}
}
}
// as quickly as we possibly can, set a default theme...
await setTheme();
// Now that we've loaded the theme (CSS), display the config syntax error if needed.
if (configSyntaxError) {
const errorMessage = (
<div>
<p>
{_t(
"Your Riot configuration contains invalid JSON. Please correct the problem " +
"and reload the page.",
)}
</p>
<p>
{_t(
"The message from the parser is: %(message)s",
{message: configError.err.message || _t("Invalid JSON")},
)}
</p>
</div>
);
const GenericErrorPage = sdk.getComponent("structures.GenericErrorPage");
window.matrixChat = ReactDOM.render(
<GenericErrorPage message={errorMessage} title={_t("Your Riot is misconfigured")} />,
document.getElementById('matrixchat'),
);
return;
}
const validBrowser = checkBrowserFeatures([
"displaytable", "flexbox", "es5object", "es5function", "localstorage",
"objectfit", "indexeddb", "webworkers",
]);
const acceptInvalidBrowser = window.localStorage && window.localStorage.getItem('mx_accepts_unsupported_browser');
const urlWithoutQuery = window.location.protocol + '//' + window.location.host + window.location.pathname;
console.log("Vector starting at " + urlWithoutQuery);
if (configError) {
window.matrixChat = ReactDOM.render(<div className="error">
Unable to load config file: please refresh the page to try again.
</div>, document.getElementById('matrixchat'));
} else if (validBrowser || acceptInvalidBrowser) {
platform.startUpdater();
// Don't bother loading the app until the config is verified
verifyServerConfig().then((newConfig) => {
const MatrixChat = sdk.getComponent('structures.MatrixChat');
window.matrixChat = ReactDOM.render(
<MatrixChat
onNewScreen={onNewScreen}
makeRegistrationUrl={makeRegistrationUrl}
ConferenceHandler={VectorConferenceHandler}
config={newConfig}
realQueryParams={params}
startingFragmentQueryParams={fragparts.params}
enableGuest={!configJson.disable_guests}
onTokenLoginCompleted={onTokenLoginCompleted}
initialScreenAfterLogin={getScreenFromLocation(window.location)}
defaultDeviceDisplayName={platform.getDefaultDeviceDisplayName()}
/>,
document.getElementById('matrixchat'),
);
}).catch(err => {
console.error(err);
let errorMessage = err.translatedMessage
|| _t("Unexpected error preparing the app. See console for details.");
errorMessage = <span>{errorMessage}</span>;
// Like the compatibility page, AWOOOOOGA at the user
const GenericErrorPage = sdk.getComponent("structures.GenericErrorPage");
window.matrixChat = ReactDOM.render(
<GenericErrorPage message={errorMessage} title={_t("Your Riot is misconfigured")} />,
document.getElementById('matrixchat'),
);
});
} else {
console.error("Browser is missing required features.");
// take to a different landing page to AWOOOOOGA at the user
const CompatibilityPage = sdk.getComponent("structures.CompatibilityPage");
window.matrixChat = ReactDOM.render(
<CompatibilityPage onAccept={function() {
if (window.localStorage) window.localStorage.setItem('mx_accepts_unsupported_browser', true);
console.log("User accepts the compatibility risks.");
loadApp();
}} />,
document.getElementById('matrixchat'),
);
}
}
function loadOlm() {
/* Load Olm. We try the WebAssembly version first, and then the legacy,
* asm.js version if that fails. For this reason we need to wait for this
* to finish before continuing to load the rest of the app. In future
* we could somehow pass a promise down to react-sdk and have it wait on
* that so olm can be loading in parallel with the rest of the app.
*
* We also need to tell the Olm js to look for its wasm file at the same
* level as index.html. It really should be in the same place as the js,
* ie. in the bundle directory, but as far as I can tell this is
* completely impossible with webpack. We do, however, use a hashed
* filename to avoid caching issues.
*/
return Olm.init({
locateFile: () => olmWasmPath,
}).then(() => {
console.log("Using WebAssembly Olm");
}).catch((e) => {
console.log("Failed to load Olm: trying legacy version", e);
return new Promise((resolve, reject) => {
const s = document.createElement('script');
s.src = 'olm_legacy.js'; // XXX: This should be cache-busted too
s.onload = resolve;
s.onerror = reject;
document.body.appendChild(s);
}).then(() => {
// Init window.Olm, ie. the one just loaded by the script tag,
// not 'Olm' which is still the failed wasm version.
return window.Olm.init();
}).then(() => {
console.log("Using legacy Olm");
}).catch((e) => {
console.log("Both WebAssembly and asm.js Olm failed!", e);
});
});
}
async function loadLanguage() {
const prefLang = SettingsStore.getValue("language", null, /*excludeDefault=*/true);
let langs = [];
if (!prefLang) {
languageHandler.getLanguagesFromBrowser().forEach((l) => {
langs.push(...languageHandler.getNormalizedLanguageKeys(l));
});
} else {
langs = [prefLang];
}
try {
await languageHandler.setLanguage(langs);
document.documentElement.setAttribute("lang", languageHandler.getCurrentLanguage());
} catch (e) {
console.error("Unable to set language", e);
}
}
async function verifyServerConfig() {
let validatedConfig;
try {
console.log("Verifying homeserver configuration");
// Note: the query string may include is_url and hs_url - we only respect these in the
// context of email validation. Because we don't respect them otherwise, we do not need
// to parse or consider them here.
// Note: Although we throw all 3 possible configuration options through a .well-known-style
// verification, we do not care if the servers are online at this point. We do moderately
// care if they are syntactically correct though, so we shove them through the .well-known
// validators for that purpose.
const config = SdkConfig.get();
let wkConfig = config['default_server_config']; // overwritten later under some conditions
const serverName = config['default_server_name'];
const hsUrl = config['default_hs_url'];
const isUrl = config['default_is_url'];
const incompatibleOptions = [wkConfig, serverName, hsUrl].filter(i => !!i);
if (incompatibleOptions.length > 1) {
// noinspection ExceptionCaughtLocallyJS
throw newTranslatableError(_td(
"Invalid configuration: can only specify one of default_server_config, default_server_name, " +
"or default_hs_url.",
));
}
if (incompatibleOptions.length < 1) {
// noinspection ExceptionCaughtLocallyJS
throw newTranslatableError(_td("Invalid configuration: no default server specified."));
}
if (hsUrl) {
console.log("Config uses a default_hs_url - constructing a default_server_config using this information");
console.warn(
"DEPRECATED CONFIG OPTION: In the future, default_hs_url will not be accepted. Please use " +
"default_server_config instead.",
);
wkConfig = {
"m.homeserver": {
"base_url": hsUrl,
},
};
if (isUrl) {
wkConfig["m.identity_server"] = {
"base_url": isUrl,
};
}
}
let discoveryResult = null;
if (wkConfig) {
console.log("Config uses a default_server_config - validating object");
discoveryResult = await AutoDiscovery.fromDiscoveryConfig(wkConfig);
}
if (serverName) {
console.log("Config uses a default_server_name - doing .well-known lookup");
console.warn(
"DEPRECATED CONFIG OPTION: In the future, default_server_name will not be accepted. Please " +
"use default_server_config instead.",
);
discoveryResult = await AutoDiscovery.findClientConfig(serverName);
}
validatedConfig = AutoDiscoveryUtils.buildValidatedConfigFromDiscovery(serverName, discoveryResult, true);
} catch (e) {
const {hsUrl, isUrl, userId} = Lifecycle.getLocalStorageSessionVars();
if (hsUrl && userId) {
console.error(e);
console.warn("A session was found - suppressing config error and using the session's homeserver");
console.log("Using pre-existing hsUrl and isUrl: ", {hsUrl, isUrl});
validatedConfig = await AutoDiscoveryUtils.validateServerConfigWithStaticUrls(hsUrl, isUrl, true);
} else {
// the user is not logged in, so scream
throw e;
}
}
validatedConfig.isDefault = true;
// Just in case we ever have to debug this
console.log("Using homeserver config:", validatedConfig);
// Add the newly built config to the actual config for use by the app
console.log("Updating SdkConfig with validated discovery information");
SdkConfig.add({"validated_server_config": validatedConfig});
return SdkConfig.get();
}
loadApp();
// Finally, load the app. All of the other react-sdk imports are in this file which causes the skinner to
// run on the components. We use `require` here to make sure webpack doesn't optimize this into an async
// import and thus running before the skin can load.
require("./app").loadApp();

File diff suppressed because one or more lines are too long

View File

@@ -144,6 +144,10 @@ class SeshatIndexManager extends BaseEventIndexManager {
return this._ipcCall('removeCrawlerCheckpoint', checkpoint);
}
async loadFileEvents(args): Promise<[EventAndProfile]> {
return this._ipcCall('loadFileEvents', args);
}
async loadCheckpoints(): Promise<[CrawlerCheckpoint]> {
return this._ipcCall('loadCheckpoints');
}
@@ -152,6 +156,10 @@ class SeshatIndexManager extends BaseEventIndexManager {
return this._ipcCall('closeEventIndex');
}
async getStats(): Promise<> {
return this._ipcCall('getStats');
}
async deleteEventIndex(): Promise<> {
return this._ipcCall('deleteEventIndex');
}

View File

@@ -337,10 +337,9 @@ module.exports = (env, argv) => {
// serve unwebpacked assets from webapp.
contentBase: './webapp',
stats: {
// don't fill the console up with a mahoosive list of modules
chunks: false,
},
// 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

593
yarn.lock

File diff suppressed because it is too large Load Diff