Compare commits

..

49 Commits

Author SHA1 Message Date
Andy Balaam
878978a191 Attempt 2 to fix lint errors 2022-01-06 11:07:26 +00:00
Andy Balaam
444d6dd5a9 Attempt to fix lint errors 2022-01-06 11:02:20 +00:00
Andy Balaam
65efe55677 Create a screenshots page that will allow us to do screenshot testing 2022-01-06 10:49:51 +00:00
Michael Telatynski
211f480027 Abstract electron download path behind an opaque ID (#20271) 2021-12-21 15:34:57 +00:00
Kerry
30cb0ae96d add docs for UIFeature.TimelineEnableRelativeDates (#20251)
Signed-off-by: Kerry Archibald <kerrya@element.io>
2021-12-21 10:08:35 +01:00
RiotRobot
dafdc1d642 Reset matrix-react-sdk back to develop branch 2021-12-20 14:41:09 +00:00
RiotRobot
10729e307e Reset matrix-js-sdk back to develop branch 2021-12-20 14:40:56 +00:00
RiotRobot
7fc0bab410 Merge branch 'master' into develop 2021-12-20 14:40:41 +00:00
RiotRobot
0f15ba34cd v1.9.8 2021-12-20 14:35:26 +00:00
RiotRobot
9b87566477 Prepare changelog for v1.9.8 2021-12-20 14:35:26 +00:00
RiotRobot
bce599a1fb Upgrade matrix-react-sdk to 3.37.0 2021-12-20 14:33:21 +00:00
RiotRobot
111b3b9de7 Upgrade matrix-js-sdk to 15.3.0 2021-12-20 14:32:22 +00:00
James Salter
9e1f393224 Ensure group audio-only calls don't switch on the webcam on join (#20234)
Pass isAudioOnly flag to jitsi SDK
2021-12-17 19:54:57 +11:00
Ankur
b7f48479f3 Added a workflow to triage Labs issues better. (#20228)
Signed-off-by: ankur12-1610 <anknerd.12@gmail.com>
2021-12-16 19:25:13 +00:00
Germain
23b21c940c Open thread on native notification click (#20176) 2021-12-15 08:34:54 +00:00
RiotRobot
33d6899345 v1.9.8-rc.1 2021-12-14 14:49:25 +00:00
RiotRobot
a58a74b39d Prepare changelog for v1.9.8-rc.1 2021-12-14 14:49:24 +00:00
RiotRobot
7b1a6f0146 Upgrade matrix-react-sdk to 3.37.0-rc.1 2021-12-14 14:47:52 +00:00
RiotRobot
3305fdb08b Upgrade matrix-js-sdk to 15.3.0-rc.1 2021-12-14 14:46:14 +00:00
Element Translate Bot
705366ab8c Translations update from Weblate (#20183)
* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Vietnamese)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/vi/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/tr/

* Translated using Weblate (Frisian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/fy/

* Translated using Weblate (Polish)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/pl/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nl/

* Translated using Weblate (Slovak)

Currently translated at 97.0% (33 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sk/

* Translated using Weblate (Hebrew)

Currently translated at 97.0% (33 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Hebrew)

Currently translated at 97.0% (33 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Hebrew)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/he/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/nl/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/sk/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (34 of 34 strings)

Translation: Element Web/element-web
Translate-URL: https://translate.element.io/projects/element-web/element-web/id/

* Added translation using Weblate (Uzbek)

Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Weblate <translate@riot.im>
Co-authored-by: Dinh Quang Tuyen <tuyen.dinh@aarenet.com>
Co-authored-by: Ege <alikemal@riseup.net>
Co-authored-by: Fjoerfoks <fryskefirefox@gmail.com>
Co-authored-by: Adrian Środoń <adrian.srodon@gmail.com>
Co-authored-by: jelv <post@jelv.nl>
Co-authored-by: Marek Ľach <graweeld@googlemail.com>
Co-authored-by: a5r0n <h98aaron@gmail.com>
Co-authored-by: Vulcan <element@zbug.anonaddy.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Yorqinbek <yyoriqulov@mail.ru>
2021-12-14 13:10:55 +00:00
Ben Parsons
a90cbe9476 Include Vietnamese language (#20029)
* Include Vietnamese language

https://translate.element.io/languages/vi/element-web/ has been professionally translated by an Element customer

* Vietnamese -> "Tiếng Việt" ("Vietnamese Language")
2021-12-14 10:16:24 +00:00
Michael Telatynski
2aff06f56e Update typescript-eslint plugin & parser (#20163) 2021-12-14 00:56:21 +00:00
RiotRobot
e747380057 Merge branch 'master' into develop 2021-12-13 15:44:04 +00:00
Kat Gerasimova
46bcd13e05 Update trigger for PR workflow (#20159)
pull_request doesn't pass permissions correctly for the action to work.
2021-12-13 15:36:10 +00:00
Michael Telatynski
1e386f7786 Update Typescript to 4.5 (#20157) 2021-12-13 13:38:56 +00:00
Andy Balaam
0744c86ac9 Update yarn.lock (#20131) 2021-12-10 11:22:55 +00:00
Michael Telatynski
1d7c4d5d92 Document feature_spotlight (#19699) 2021-12-10 09:18:22 +00:00
Travis Ralston
ebc2bb7c56 Update eslint 2021-12-09 16:02:28 -07:00
Aaron R
df84c48d73 Fix imports to work with new lint rules (#19532)
* Add eslint-plugin-import

Signed-off-by: Aaron Raimist <aaron@raim.ist>

* Autofix + move comments manually

Signed-off-by: Aaron Raimist <aaron@raim.ist>

* Manual fix

Signed-off-by: Aaron Raimist <aaron@raim.ist>
2021-12-09 15:57:46 -07:00
Kat Gerasimova
9417470e93 Fix graphql warning for wrong types in workflows (#20120) 2021-12-09 15:55:22 -07:00
Kat Gerasimova
5a6e981cb4 Fix indentation in workflow 2021-12-09 21:11:18 +00:00
daniellekirkwood
0a5adedbc1 Add automation to move message bubbles issues to message bubbles board (#20117) 2021-12-09 15:24:20 +00:00
Kerry
b155d19934 add aria-hidden and alt for preload svg images (#20113)
Signed-off-by: Kerry Archibald <kerrya@element.io>
2021-12-09 14:23:03 +01:00
Kat Gerasimova
dc75590916 Update issue automation for the Delight team (#20112)
- Remove automation for v1 board as v2 board is now in use
- Update naming for the workflow because there's only one board now
- Add Z-IA issues to Delight workboard
2021-12-09 11:24:51 +00:00
Germain
de9f427364 Update outdated unit test info in README.md (#20096) 2021-12-08 12:34:34 +00:00
James Salter
b0abbfacd4 Fix Docker build versioning (#20077)
* Centralise version scripts and fix Docker version
* Refactor generation of a git-hash-based version into get-version-from-git
* Refactor normalization of versions (stripping leading v) into normalize-version.sh
* Call get-version-from-git from ci_package.sh, call normalize-version from package.sh
* Refactor docker-write-version.sh into docker-package.sh, which both writes the
  version file and invokes yarn build passing VERSION
* Normalize the version received from the server
2021-12-07 15:11:01 +11:00
Michael Telatynski
b3c5bb899b Add map_style_url to develop.element.io (#20068) 2021-12-06 17:09:04 +00:00
J. Ryan Stinnett
83f0f1de72 Update lockfile for widget API via matrix-react-sdk 2021-12-06 16:40:24 +00:00
RiotRobot
9ddab82979 Merge branch 'master' into develop 2021-12-06 16:02:41 +00:00
James Salter
60788da1a3 Normalize the local app version (#20061)
We need to strip the leading v from the local app version in pollForUpdate to ensure it compares correctly the version from the /version request indicating what the latest available version is. Previously, we only stripped the leading in getAppVersion which is used in some other places but not to decide whether an update is available.
2021-12-06 23:12:29 +11:00
Matthew Hodgson
9b780e0e60 Simple static location sharing (#19754)
Adds static location share a la [MSC3488](https://github.com/matrix-org/matrix-doc/pull/3488) behind a labs flag, supporting legacy `m.location` `msgtype` too.  Powered by https://github.com/matrix-org/matrix-react-sdk/pull/7135.  Adds maplibre as a dependency.

To make this work, you have to add a valid `map_style_url` to your config.json.
2021-12-06 10:11:06 +00:00
James Salter
95a2b8eb2f Remove feature_pseudonymous_analytics_opt_in (#19900)
Depends on https://github.com/matrix-org/matrix-react-sdk/pull/6936/
2021-12-06 00:49:08 +00:00
James Salter
317430b6b1 Add analyticsOwner (#19401) 2021-12-06 11:42:19 +11:00
Linerly
1a403a37f9 Add support for the Indonesian language (#20032)
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2021-12-03 12:40:56 +00:00
Michael Telatynski
883d8cecaa Improve platform types (#20027) 2021-12-03 11:03:01 +00:00
Travis Ralston
459f2f2334 Fix widget-api dependency with a react-sdk upgrade (#20023)
This appears to have wanted to update all the dependencies of the react-sdk as well, but at least it avoids two widget apis running in release builds.
2021-12-02 18:11:05 -07:00
Kat Gerasimova
7753fee9e1 Issue workflow improvements (#19976)
- Fix filtering for Design issues
- Split out spaces jobs for new and old boards, so they don't
  depend on each other
- Remove voice message job for the old board
- Rename Priority bugs workflow to be shorter
- Improve naming for jobs so they're easier to read in the GitHub
  Actions page
2021-12-02 16:44:02 +01:00
J. Ryan Stinnett
0e69caee7c Upgrade matrix-widget-api to 0.1.0-beta.18 2021-12-02 12:46:00 +00:00
Michael Telatynski
2039f1fcae Document feature_breadcrumbs_v2 (#19700) 2021-12-01 10:50:08 +00:00
37 changed files with 2211 additions and 4415 deletions

View File

@@ -5,8 +5,34 @@ on:
types: [labeled]
jobs:
apply_Z-Labs_label:
name: Add Z-Labs label for features behind labs flags
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Maths') ||
contains(github.event.issue.labels.*.name, 'A-Message-Pinning') ||
contains(github.event.issue.labels.*.name, 'A-Threads') ||
contains(github.event.issue.labels.*.name, 'A-Polls') ||
contains(github.event.issue.labels.*.name, 'A-Location-Sharing') ||
contains(github.event.issue.labels.*.name, 'A-Message-Bubbles') ||
contains(github.event.issue.labels.*.name, 'Z-Maximised-Widgets') ||
contains(github.event.issue.labels.*.name, 'Z-IA') ||
contains(github.event.issue.labels.*.name, 'A-Themes-Custom') ||
contains(github.event.issue.labels.*.name, 'A-E2EE-Dehydration') ||
contains(github.event.issue.labels.*.name, 'A-Tags')
steps:
- uses: actions/github-script@v5
with:
script: |
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['Z-Labs']
})
move_needs_info_issues:
name: Move X-Needs-Info issues to Need info on triage board
name: X-Needs-Info issues to Need info column on triage board
runs-on: ubuntu-latest
steps:
- uses: konradpabjan/move-labeled-or-milestoned-issue@219d384e03fa4b6460cd24f9f37d19eb033a4338
@@ -17,24 +43,24 @@ jobs:
label-name: "X-Needs-Info"
add_priority_design_issues_to_project:
name: Move priority X-Needs-Design issues to Design project board
name: P1 X-Needs-Design to Design project board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'X-Needs-Design') &&
contains(github.event.issue.labels.*.name, 'S-Critical') &&
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
contains(github.event.issue.labels.*.name, 'S-Major') &&
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'A11y') &&
contains(github.event.issue.labels.*.name, 'O-Frequent')
(contains(github.event.issue.labels.*.name, 'S-Critical') &&
(contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'O-Occasional')) ||
contains(github.event.issue.labels.*.name, 'S-Major') &&
contains(github.event.issue.labels.*.name, 'O-Frequent') ||
contains(github.event.issue.labels.*.name, 'A11y') &&
contains(github.event.issue.labels.*.name, 'O-Frequent'))
steps:
- uses: octokit/graphql-action@v2.x
id: add_to_project
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:String!,$contentid:String!) {
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
@@ -47,26 +73,20 @@ jobs:
PROJECT_ID: "PN_kwDOAM0swc0sUA"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_spaces_issues:
name: Move Spaces issues to Delight project board
Delight_issues_to_board:
name: Delight issues to project board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Spaces') ||
contains(github.event.issue.labels.*.name, 'A-Space-Settings') ||
contains(github.event.issue.labels.*.name, 'A-Subspaces')
contains(github.event.issue.labels.*.name, 'A-Subspaces') ||
contains(github.event.issue.labels.*.name, 'Z-IA')
steps:
- uses: konradpabjan/move-labeled-or-milestoned-issue@219d384e03fa4b6460cd24f9f37d19eb033a4338
with:
action-token: "${{ secrets.ELEMENT_BOT_TOKEN }}"
project-url: "https://github.com/orgs/vector-im/projects/6"
column-name: "📥 Inbox"
label-name: "A-Spaces"
- uses: octokit/graphql-action@v2.x
id: add_to_delight2
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:String!,$contentid:String!) {
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
@@ -80,23 +100,16 @@ jobs:
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_voice-message_issues:
name: Move A-Voice Messages to Voice message board
name: A-Voice Messages to voice message board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Voice Messages')
steps:
- uses: konradpabjan/move-labeled-or-milestoned-issue@219d384e03fa4b6460cd24f9f37d19eb033a4338
with:
action-token: "${{ secrets.ELEMENT_BOT_TOKEN }}"
project-url: "https://github.com/vector-im/element-web/projects/28"
column-name: "📥 Inbox"
label-name: "A-Voice Messages"
- uses: octokit/graphql-action@v2.x
id: add_to_voice
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:String!,$contentid:String!) {
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
@@ -110,7 +123,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_threads_issues:
name: Move A-Threads to Thread board
name: A-Threads to Thread board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Threads')
@@ -119,7 +132,7 @@ jobs:
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:String!,$contentid:String!) {
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
@@ -131,3 +144,26 @@ jobs:
env:
PROJECT_ID: "PN_kwDOAM0swc0rRA"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
move_message_bubbles_issues:
name: A-Message-Bubbles to Message bubbles board
runs-on: ubuntu-latest
if: >
contains(github.event.issue.labels.*.name, 'A-Message-Bubbles')
steps:
- uses: octokit/graphql-action@v2.x
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:ID!,$contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id
}
}
}
projectid: ${{ env.PROJECT_ID }}
contentid: ${{ github.event.issue.node_id }}
env:
PROJECT_ID: "PN_kwDOAM0swc3m-g"
GITHUB_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}

View File

@@ -1,7 +1,8 @@
name: Move pull requests asking for review to the relevant project
on:
pull_request:
pull_request_target:
types: [review_requested]
jobs:
add_design_pr_to_project:
name: Move PRs asking for design review to the design board
@@ -46,7 +47,7 @@ jobs:
with:
headers: '{"GraphQL-Features": "projects_next_graphql"}'
query: |
mutation add_to_project($projectid:String!, $contentid:String!) {
mutation add_to_project($projectid:ID!, $contentid:ID!) {
addProjectNextItem(input:{projectId:$projectid contentId:$contentid}) {
projectNextItem {
id

View File

@@ -3,7 +3,7 @@ name: Move unlabelled from needs info columns to triaged
on:
issues:
types: [unlabeled]
jobs:
Move_Unabeled_Issue_On_Project_Board:
name: Move no longer X-Needs-Info issues to Triaged

View File

@@ -1,4 +1,4 @@
name: Move labelled issues into the Priority bugs column for the Web App Team
name: Move P1 bugs to boards
on:
issues:

View File

@@ -1,30 +0,0 @@
stages:
- build
variables:
USE_CUSTOM_SDKS: "true"
JS_SDK_BRANCH: "release-v9.8.0"
JS_SDK_REPO: "https://github.com/matrix-org/matrix-js-sdk.git"
REACT_SDK_REPO: "https://gitlab-ci-token:$GL_BAYERN_REACT_SDK_TOKEN@gitlab.matrix.org/new-vector/dataport/bayern-react-sdk"
REACT_SDK_BRANCH: "master"
docker-build:
tags: ['shell']
stage: build
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- "[ -d './js-sdk' ] && rm -rf ./js-sdk"
- "[[ $JS_SDK_BRANCH != 'master' ]] && git clone --depth 1 --branch $JS_SDK_BRANCH $JS_SDK_REPO js-sdk && cd js-sdk && export JS_SDK_SHA=$(git rev-parse --short=12 HEAD) && cd ../ && rm -rf js-sdk"
- "[[ $JS_SDK_BRANCH == 'master' ]] && export JS_SDK_SHA=master"
- "[ -d './react-sdk' ] && rm -rf ./react-sdk"
- "[[ $REACT_SDK_BRANCH != 'master' ]] && git clone --depth 1 --branch $REACT_SDK_BRANCH $REACT_SDK_REPO react-sdk && cd react-sdk && export REACT_SDK_SHA=$(git rev-parse --short=12 HEAD) && cd ../ && rm -rf react-sdk"
- "[[ $REACT_SDK_BRANCH == 'master' ]] && export REACT_SDK_SHA=master"
- "[[ $CI_COMMIT_BRANCH != 'master' ]] && export ELEMENT_WEB_SHA=$(git rev-parse --short=12 HEAD)"
- "[[ $CI_COMMIT_BRANCH == 'master' ]] && export ELEMENT_WEB_SHA=master"
- "[[ -v CI_COMMIT_TAG ]] && export SPECIAL_DOCKER_TAG=$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"
- "([[ $CI_COMMIT_BRANCH == 'master' ]] && [[ $REACT_SDK_BRANCH == 'master' ]] && [[ $JS_SDK_BRANCH == 'master' ]]) && export SPECIAL_DOCKER_TAG=$CI_REGISTRY_IMAGE:latest"
- '[[ -z $SPECIAL_DOCKER_TAG ]] && export DOCKER_TAG="$CI_REGISTRY_IMAGE:$ELEMENT_WEB_SHA-react-$REACT_SDK_SHA-js-$JS_SDK_SHA" || export DOCKER_TAG="$SPECIAL_DOCKER_TAG"'
script:
- echo "Docker tag will be $DOCKER_TAG"
- docker build --pull -t "$DOCKER_TAG" --build-arg "USE_CUSTOM_SDKS=$USE_CUSTOM_SDKS" --build-arg "JS_SDK_BRANCH=$JS_SDK_BRANCH" --build-arg "JS_SDK_REPO=$JS_SDK_REPO" --build-arg "REACT_SDK_REPO=$REACT_SDK_REPO" --build-arg "REACT_SDK_BRANCH=$REACT_SDK_BRANCH" .
- docker push "$DOCKER_TAG"

View File

@@ -1,3 +1,164 @@
Changes in [1.9.8](https://github.com/vector-im/element-web/releases/tag/v1.9.8) (2021-12-20)
=============================================================================================
## ✨ Features
* Include Vietnamese language ([\#20029](https://github.com/vector-im/element-web/pull/20029)).
* Simple static location sharing ([\#19754](https://github.com/vector-im/element-web/pull/19754)).
* Add support for the Indonesian language ([\#20032](https://github.com/vector-im/element-web/pull/20032)). Fixes #20030. Contributed by @Linerly.
* Always unhide widgets on layout change (pinning a widget) ([\#7299](https://github.com/matrix-org/matrix-react-sdk/pull/7299)).
* Update status message in the member list and user info panel when it is changed ([\#7338](https://github.com/matrix-org/matrix-react-sdk/pull/7338)). Fixes #20127. Contributed by @SimonBrandner.
* Iterate space panel toggle collapse interaction ([\#7335](https://github.com/matrix-org/matrix-react-sdk/pull/7335)). Fixes #20079.
* Spotlight search labs ([\#7116](https://github.com/matrix-org/matrix-react-sdk/pull/7116)). Fixes #19530.
* Put room settings form elements in fieldsets ([\#7311](https://github.com/matrix-org/matrix-react-sdk/pull/7311)).
* Add descriptions to ambiguous links for screen readers ([\#7310](https://github.com/matrix-org/matrix-react-sdk/pull/7310)).
* Make tooltips keyboard accessible ([\#7281](https://github.com/matrix-org/matrix-react-sdk/pull/7281)).
* Iterate room context menus for DMs ([\#7308](https://github.com/matrix-org/matrix-react-sdk/pull/7308)). Fixes #19527.
* Update space panel expand mechanism ([\#7230](https://github.com/matrix-org/matrix-react-sdk/pull/7230)). Fixes #17993.
* Add CSS variable to make the UI gaps consistent and fix the resize handle position ([\#7234](https://github.com/matrix-org/matrix-react-sdk/pull/7234)). Fixes #19904 and #19938.
* Custom location sharing. ([\#7185](https://github.com/matrix-org/matrix-react-sdk/pull/7185)).
* Simple static location sharing ([\#7135](https://github.com/matrix-org/matrix-react-sdk/pull/7135)).
* Finish sending pending messages before leaving room ([\#7276](https://github.com/matrix-org/matrix-react-sdk/pull/7276)). Fixes #4702.
* Dropdown follow wai-aria practices for expanding on arrow keys ([\#7277](https://github.com/matrix-org/matrix-react-sdk/pull/7277)). Fixes #3687.
* Expose PL control for pinned events when lab enabled ([\#7278](https://github.com/matrix-org/matrix-react-sdk/pull/7278)). Fixes #5396.
* In People & Favourites metaspaces always show all rooms ([\#7288](https://github.com/matrix-org/matrix-react-sdk/pull/7288)). Fixes #20048.
* Don't allow calls when the connection the server has been lost ([\#7287](https://github.com/matrix-org/matrix-react-sdk/pull/7287)). Fixes #2096. Contributed by @SimonBrandner.
* Analytics opt in for posthog ([\#6936](https://github.com/matrix-org/matrix-react-sdk/pull/6936)).
* Don't inhibit current room notifications if user has Modal open ([\#7274](https://github.com/matrix-org/matrix-react-sdk/pull/7274)). Fixes #1118.
* Remove the `Screen sharing is here!` dialog ([\#7266](https://github.com/matrix-org/matrix-react-sdk/pull/7266)). Fixes #18824. Contributed by @SimonBrandner.
* Make composer buttons react to settings without having to change room ([\#7264](https://github.com/matrix-org/matrix-react-sdk/pull/7264)). Fixes #20011.
* Decorate view keyboard shortcuts link as a link ([\#7260](https://github.com/matrix-org/matrix-react-sdk/pull/7260)). Fixes #20007.
* Improve ease of focusing on Room list Search ([\#7255](https://github.com/matrix-org/matrix-react-sdk/pull/7255)). Fixes matrix-org/element-web-rageshakes#7017.
* Autofocus device panel entry when renaming device ([\#7249](https://github.com/matrix-org/matrix-react-sdk/pull/7249)). Fixes #19984.
* Update Space Panel scrollable region ([\#7245](https://github.com/matrix-org/matrix-react-sdk/pull/7245)). Fixes #19978.
* Replace breadcrumbs with recently viewed menu ([\#7073](https://github.com/matrix-org/matrix-react-sdk/pull/7073)). Fixes #19528.
* Tweaks to informational architecture 1.1 ([\#7052](https://github.com/matrix-org/matrix-react-sdk/pull/7052)). Fixes #19526, #19379, #17792, #16450, #19881, #19892, #19300, #19324, #17307, #17468 #19932 and #19956.
## 🐛 Bug Fixes
* [Release] Fix inline code block nowrap issue ([\#7407](https://github.com/matrix-org/matrix-react-sdk/pull/7407)).
* don't collapse spaces in inline code blocks (https ([\#7328](https://github.com/matrix-org/matrix-react-sdk/pull/7328)). Fixes #6051. Contributed by @HarHarLinks.
* Fix accessibility regressions ([\#7336](https://github.com/matrix-org/matrix-react-sdk/pull/7336)).
* Debounce User Info start dm "Message" button ([\#7357](https://github.com/matrix-org/matrix-react-sdk/pull/7357)). Fixes #7763.
* Fix thread filter being cut-off on narrow screens ([\#7354](https://github.com/matrix-org/matrix-react-sdk/pull/7354)). Fixes #20146.
* Fix upgraded rooms wrongly showing up in spotlight ([\#7341](https://github.com/matrix-org/matrix-react-sdk/pull/7341)). Fixes #20141.
* Show votes in replied-to polls (pass in getRelationsForEvent) ([\#7345](https://github.com/matrix-org/matrix-react-sdk/pull/7345)). Fixes #20153.
* Keep all previously approved widget capabilities when requesting new capabilities ([\#7340](https://github.com/matrix-org/matrix-react-sdk/pull/7340)). Contributed by @dhenneke.
* Only show poll previews when the polls feature is enabled ([\#7331](https://github.com/matrix-org/matrix-react-sdk/pull/7331)).
* No-op action:join if the user is already invited for scalar ([\#7334](https://github.com/matrix-org/matrix-react-sdk/pull/7334)). Fixes #20134.
* Don't show polls in timeline if polls are disabled ([\#7332](https://github.com/matrix-org/matrix-react-sdk/pull/7332)). Fixes #20130.
* Don't send a poll response event if you are voting for your current c… ([\#7326](https://github.com/matrix-org/matrix-react-sdk/pull/7326)). Fixes #20129.
* Don't show options button when the user can't modify widgets ([\#7324](https://github.com/matrix-org/matrix-react-sdk/pull/7324)). Fixes #20114. Contributed by @SimonBrandner.
* Add vertical spacing between buttons when they go over multiple lines ([\#7314](https://github.com/matrix-org/matrix-react-sdk/pull/7314)). Contributed by @twigleingrid.
* Improve accessibility of opening space create menu ([\#7316](https://github.com/matrix-org/matrix-react-sdk/pull/7316)).
* Correct tab order in room preview dialog ([\#7302](https://github.com/matrix-org/matrix-react-sdk/pull/7302)).
* Fix favourites and people metaspaces not rendering their content ([\#7315](https://github.com/matrix-org/matrix-react-sdk/pull/7315)). Fixes #20070.
* Make clear button images visible in high contrast theme ([\#7306](https://github.com/matrix-org/matrix-react-sdk/pull/7306)). Fixes #19931.
* Fix html exporting and improve output size ([\#7312](https://github.com/matrix-org/matrix-react-sdk/pull/7312)). Fixes #19436 #20107 and #19441.
* Fix textual message stripping new line ([\#7239](https://github.com/matrix-org/matrix-react-sdk/pull/7239)). Fixes #15320. Contributed by @renancleyson-dev.
* Fix issue with room list resizer getting clipped in firefox ([\#7303](https://github.com/matrix-org/matrix-react-sdk/pull/7303)). Fixes #20076.
* Fix wrong indentation with nested ordered list unnesting list on edit ([\#7300](https://github.com/matrix-org/matrix-react-sdk/pull/7300)). Contributed by @renancleyson-dev.
* Fix input field behaviour inside context menus ([\#7293](https://github.com/matrix-org/matrix-react-sdk/pull/7293)). Fixes #19881.
* Corrected the alignment of the Edit button on LoginPage. ([\#7292](https://github.com/matrix-org/matrix-react-sdk/pull/7292)). Contributed by @ankur12-1610.
* Allow sharing manual location without giving location permission ([\#7295](https://github.com/matrix-org/matrix-react-sdk/pull/7295)). Fixes #20065. Contributed by @tulir.
* Make emoji picker search placeholder localizable ([\#7294](https://github.com/matrix-org/matrix-react-sdk/pull/7294)).
* Fix jump to bottom on message send ([\#7280](https://github.com/matrix-org/matrix-react-sdk/pull/7280)). Fixes #19859. Contributed by @SimonBrandner.
* Fix: Warning: Unsupported style property pointer-events. Did you mean pointerEvents? ([\#7291](https://github.com/matrix-org/matrix-react-sdk/pull/7291)).
* Add edits and replies to the right panel timeline & prepare the timelineCard to share code with threads ([\#7262](https://github.com/matrix-org/matrix-react-sdk/pull/7262)). Fixes #20012 and #19928.
* Fix labs exploding when lab group is empty ([\#7290](https://github.com/matrix-org/matrix-react-sdk/pull/7290)). Fixes #20051.
* Update URL when room aliases are modified ([\#7289](https://github.com/matrix-org/matrix-react-sdk/pull/7289)). Fixes #1616 and #1925.
* Render mini user menu for when space panel is disabled ([\#7258](https://github.com/matrix-org/matrix-react-sdk/pull/7258)). Fixes #19998.
* When accepting DM from People metaspace don't switch to Home ([\#7272](https://github.com/matrix-org/matrix-react-sdk/pull/7272)). Fixes #19995.
* Fix CallPreview `room is null` ([\#7265](https://github.com/matrix-org/matrix-react-sdk/pull/7265)). Fixes #19990, #19972, matrix-org/element-web-rageshakes#7004 matrix-org/element-web-rageshakes#6991 and matrix-org/element-web-rageshakes#6964.
* Fixes more instances of double-translation ([\#7259](https://github.com/matrix-org/matrix-react-sdk/pull/7259)). Fixes #20010.
* Fix video calls ([\#7256](https://github.com/matrix-org/matrix-react-sdk/pull/7256)). Fixes #20008. Contributed by @SimonBrandner.
* Fix broken i18n in Forgot & Change password ([\#7252](https://github.com/matrix-org/matrix-react-sdk/pull/7252)). Fixes #19989.
* Fix setBotPower to not use `.content` ([\#7179](https://github.com/matrix-org/matrix-react-sdk/pull/7179)). Fixes #19845.
* Break long words in pinned messages to prevent overflow ([\#7251](https://github.com/matrix-org/matrix-react-sdk/pull/7251)). Fixes #19985.
* Disallow sending empty feedbacks ([\#7240](https://github.com/matrix-org/matrix-react-sdk/pull/7240)).
* Fix wrongly sized default sub-space icons in space panel ([\#7243](https://github.com/matrix-org/matrix-react-sdk/pull/7243)). Fixes #19973.
* Hide clear cache and reload button if crash is before client init ([\#7242](https://github.com/matrix-org/matrix-react-sdk/pull/7242)). Fixes matrix-org/element-web-rageshakes#6996.
* Fix automatic space switching wrongly going via Home for room aliases ([\#7247](https://github.com/matrix-org/matrix-react-sdk/pull/7247)). Fixes #19974.
* Fix links being parsed as markdown links improperly ([\#7200](https://github.com/matrix-org/matrix-react-sdk/pull/7200)). Contributed by @Palid.
Changes in [1.9.8-rc.1](https://github.com/vector-im/element-web/releases/tag/v1.9.8-rc.1) (2021-12-14)
=======================================================================================================
## ✨ Features
* Include Vietnamese language ([\#20029](https://github.com/vector-im/element-web/pull/20029)).
* Simple static location sharing ([\#19754](https://github.com/vector-im/element-web/pull/19754)).
* Add support for the Indonesian language ([\#20032](https://github.com/vector-im/element-web/pull/20032)). Fixes #20030. Contributed by @Linerly.
* Always unhide widgets on layout change (pinning a widget) ([\#7299](https://github.com/matrix-org/matrix-react-sdk/pull/7299)).
* Update status message in the member list and user info panel when it is changed ([\#7338](https://github.com/matrix-org/matrix-react-sdk/pull/7338)). Fixes #20127. Contributed by @SimonBrandner.
* Iterate space panel toggle collapse interaction ([\#7335](https://github.com/matrix-org/matrix-react-sdk/pull/7335)). Fixes #20079.
* Spotlight search labs ([\#7116](https://github.com/matrix-org/matrix-react-sdk/pull/7116)). Fixes #19530.
* Put room settings form elements in fieldsets ([\#7311](https://github.com/matrix-org/matrix-react-sdk/pull/7311)).
* Add descriptions to ambiguous links for screen readers ([\#7310](https://github.com/matrix-org/matrix-react-sdk/pull/7310)).
* Make tooltips keyboard accessible ([\#7281](https://github.com/matrix-org/matrix-react-sdk/pull/7281)).
* Iterate room context menus for DMs ([\#7308](https://github.com/matrix-org/matrix-react-sdk/pull/7308)). Fixes #19527.
* Update space panel expand mechanism ([\#7230](https://github.com/matrix-org/matrix-react-sdk/pull/7230)). Fixes #17993.
* Add CSS variable to make the UI gaps consistent and fix the resize handle position ([\#7234](https://github.com/matrix-org/matrix-react-sdk/pull/7234)). Fixes #19904 and #19938.
* Custom location sharing. ([\#7185](https://github.com/matrix-org/matrix-react-sdk/pull/7185)).
* Simple static location sharing ([\#7135](https://github.com/matrix-org/matrix-react-sdk/pull/7135)).
* Finish sending pending messages before leaving room ([\#7276](https://github.com/matrix-org/matrix-react-sdk/pull/7276)). Fixes #4702.
* Dropdown follow wai-aria practices for expanding on arrow keys ([\#7277](https://github.com/matrix-org/matrix-react-sdk/pull/7277)). Fixes #3687.
* Expose PL control for pinned events when lab enabled ([\#7278](https://github.com/matrix-org/matrix-react-sdk/pull/7278)). Fixes #5396.
* In People & Favourites metaspaces always show all rooms ([\#7288](https://github.com/matrix-org/matrix-react-sdk/pull/7288)). Fixes #20048.
* Don't allow calls when the connection the server has been lost ([\#7287](https://github.com/matrix-org/matrix-react-sdk/pull/7287)). Fixes #2096. Contributed by @SimonBrandner.
* Analytics opt in for posthog ([\#6936](https://github.com/matrix-org/matrix-react-sdk/pull/6936)).
* Don't inhibit current room notifications if user has Modal open ([\#7274](https://github.com/matrix-org/matrix-react-sdk/pull/7274)). Fixes #1118.
* Remove the `Screen sharing is here!` dialog ([\#7266](https://github.com/matrix-org/matrix-react-sdk/pull/7266)). Fixes #18824. Contributed by @SimonBrandner.
* Make composer buttons react to settings without having to change room ([\#7264](https://github.com/matrix-org/matrix-react-sdk/pull/7264)). Fixes #20011.
* Decorate view keyboard shortcuts link as a link ([\#7260](https://github.com/matrix-org/matrix-react-sdk/pull/7260)). Fixes #20007.
* Improve ease of focusing on Room list Search ([\#7255](https://github.com/matrix-org/matrix-react-sdk/pull/7255)). Fixes matrix-org/element-web-rageshakes#7017.
* Autofocus device panel entry when renaming device ([\#7249](https://github.com/matrix-org/matrix-react-sdk/pull/7249)). Fixes #19984.
* Update Space Panel scrollable region ([\#7245](https://github.com/matrix-org/matrix-react-sdk/pull/7245)). Fixes #19978.
* Replace breadcrumbs with recently viewed menu ([\#7073](https://github.com/matrix-org/matrix-react-sdk/pull/7073)). Fixes #19528.
* Tweaks to informational architecture 1.1 ([\#7052](https://github.com/matrix-org/matrix-react-sdk/pull/7052)). Fixes #19526, #19379, #17792, #16450, #19881, #19892, #19300, #19324, #17307, #17468 #19932 and #19956.
## 🐛 Bug Fixes
* Fix accessibility regressions ([\#7336](https://github.com/matrix-org/matrix-react-sdk/pull/7336)).
* Debounce User Info start dm "Message" button ([\#7357](https://github.com/matrix-org/matrix-react-sdk/pull/7357)). Fixes #7763.
* Fix thread filter being cut-off on narrow screens ([\#7354](https://github.com/matrix-org/matrix-react-sdk/pull/7354)). Fixes #20146.
* Fix upgraded rooms wrongly showing up in spotlight ([\#7341](https://github.com/matrix-org/matrix-react-sdk/pull/7341)). Fixes #20141.
* Show votes in replied-to polls (pass in getRelationsForEvent) ([\#7345](https://github.com/matrix-org/matrix-react-sdk/pull/7345)). Fixes #20153.
* Keep all previously approved widget capabilities when requesting new capabilities ([\#7340](https://github.com/matrix-org/matrix-react-sdk/pull/7340)). Contributed by @dhenneke.
* Only show poll previews when the polls feature is enabled ([\#7331](https://github.com/matrix-org/matrix-react-sdk/pull/7331)).
* don't collapse spaces in inline code blocks (https ([\#7328](https://github.com/matrix-org/matrix-react-sdk/pull/7328)). Fixes #6051. Contributed by @HarHarLinks.
* No-op action:join if the user is already invited for scalar ([\#7334](https://github.com/matrix-org/matrix-react-sdk/pull/7334)). Fixes #20134.
* Don't show polls in timeline if polls are disabled ([\#7332](https://github.com/matrix-org/matrix-react-sdk/pull/7332)). Fixes #20130.
* Don't send a poll response event if you are voting for your current c… ([\#7326](https://github.com/matrix-org/matrix-react-sdk/pull/7326)). Fixes #20129.
* Don't show options button when the user can't modify widgets ([\#7324](https://github.com/matrix-org/matrix-react-sdk/pull/7324)). Fixes #20114. Contributed by @SimonBrandner.
* Add vertical spacing between buttons when they go over multiple lines ([\#7314](https://github.com/matrix-org/matrix-react-sdk/pull/7314)). Contributed by @twigleingrid.
* Improve accessibility of opening space create menu ([\#7316](https://github.com/matrix-org/matrix-react-sdk/pull/7316)).
* Correct tab order in room preview dialog ([\#7302](https://github.com/matrix-org/matrix-react-sdk/pull/7302)).
* Fix favourites and people metaspaces not rendering their content ([\#7315](https://github.com/matrix-org/matrix-react-sdk/pull/7315)). Fixes #20070.
* Make clear button images visible in high contrast theme ([\#7306](https://github.com/matrix-org/matrix-react-sdk/pull/7306)). Fixes #19931.
* Fix html exporting and improve output size ([\#7312](https://github.com/matrix-org/matrix-react-sdk/pull/7312)). Fixes #19436 #20107 and #19441.
* Fix textual message stripping new line ([\#7239](https://github.com/matrix-org/matrix-react-sdk/pull/7239)). Fixes #15320. Contributed by @renancleyson-dev.
* Fix issue with room list resizer getting clipped in firefox ([\#7303](https://github.com/matrix-org/matrix-react-sdk/pull/7303)). Fixes #20076.
* Fix wrong indentation with nested ordered list unnesting list on edit ([\#7300](https://github.com/matrix-org/matrix-react-sdk/pull/7300)). Contributed by @renancleyson-dev.
* Fix input field behaviour inside context menus ([\#7293](https://github.com/matrix-org/matrix-react-sdk/pull/7293)). Fixes #19881.
* Corrected the alignment of the Edit button on LoginPage. ([\#7292](https://github.com/matrix-org/matrix-react-sdk/pull/7292)). Contributed by @ankur12-1610.
* Allow sharing manual location without giving location permission ([\#7295](https://github.com/matrix-org/matrix-react-sdk/pull/7295)). Fixes #20065. Contributed by @tulir.
* Make emoji picker search placeholder localizable ([\#7294](https://github.com/matrix-org/matrix-react-sdk/pull/7294)).
* Fix jump to bottom on message send ([\#7280](https://github.com/matrix-org/matrix-react-sdk/pull/7280)). Fixes #19859. Contributed by @SimonBrandner.
* Fix: Warning: Unsupported style property pointer-events. Did you mean pointerEvents? ([\#7291](https://github.com/matrix-org/matrix-react-sdk/pull/7291)).
* Add edits and replies to the right panel timeline & prepare the timelineCard to share code with threads ([\#7262](https://github.com/matrix-org/matrix-react-sdk/pull/7262)). Fixes #20012 and #19928.
* Fix labs exploding when lab group is empty ([\#7290](https://github.com/matrix-org/matrix-react-sdk/pull/7290)). Fixes #20051.
* Update URL when room aliases are modified ([\#7289](https://github.com/matrix-org/matrix-react-sdk/pull/7289)). Fixes #1616 and #1925.
* Render mini user menu for when space panel is disabled ([\#7258](https://github.com/matrix-org/matrix-react-sdk/pull/7258)). Fixes #19998.
* When accepting DM from People metaspace don't switch to Home ([\#7272](https://github.com/matrix-org/matrix-react-sdk/pull/7272)). Fixes #19995.
* Fix CallPreview `room is null` ([\#7265](https://github.com/matrix-org/matrix-react-sdk/pull/7265)). Fixes #19990, #19972, matrix-org/element-web-rageshakes#7004 matrix-org/element-web-rageshakes#6991 and matrix-org/element-web-rageshakes#6964.
* Fixes more instances of double-translation ([\#7259](https://github.com/matrix-org/matrix-react-sdk/pull/7259)). Fixes #20010.
* Fix video calls ([\#7256](https://github.com/matrix-org/matrix-react-sdk/pull/7256)). Fixes #20008. Contributed by @SimonBrandner.
* Fix broken i18n in Forgot & Change password ([\#7252](https://github.com/matrix-org/matrix-react-sdk/pull/7252)). Fixes #19989.
* Fix setBotPower to not use `.content` ([\#7179](https://github.com/matrix-org/matrix-react-sdk/pull/7179)). Fixes #19845.
* Break long words in pinned messages to prevent overflow ([\#7251](https://github.com/matrix-org/matrix-react-sdk/pull/7251)). Fixes #19985.
* Disallow sending empty feedbacks ([\#7240](https://github.com/matrix-org/matrix-react-sdk/pull/7240)).
* Fix wrongly sized default sub-space icons in space panel ([\#7243](https://github.com/matrix-org/matrix-react-sdk/pull/7243)). Fixes #19973.
* Hide clear cache and reload button if crash is before client init ([\#7242](https://github.com/matrix-org/matrix-react-sdk/pull/7242)). Fixes matrix-org/element-web-rageshakes#6996.
* Fix automatic space switching wrongly going via Home for room aliases ([\#7247](https://github.com/matrix-org/matrix-react-sdk/pull/7247)). Fixes #19974.
* Fix links being parsed as markdown links improperly ([\#7200](https://github.com/matrix-org/matrix-react-sdk/pull/7200)). Contributed by @Palid.
Changes in [1.9.7](https://github.com/vector-im/element-web/releases/tag/v1.9.7) (2021-12-13)
=============================================================================================

View File

@@ -375,20 +375,11 @@ Running the tests
-----------------
There are a number of application-level tests in the `tests` directory; these
are designed to run in a browser instance under the control of
[karma](https://karma-runner.github.io). To run them:
are designed to run with Jest and JSDOM. To run them
* Make sure you have Chrome installed (a recent version, like 59)
* Make sure you have `matrix-js-sdk` and `matrix-react-sdk` installed and
built, as above
* `yarn test`
The above will run the tests under Chrome in a `headless` mode.
You can also tell karma to run the tests in a loop (every time the source
changes), in an instance of Chrome on your desktop, with `yarn
test-multi`. This also gives you the option of running the tests in 'debug'
mode, which is useful for stepping through the tests in the developer tools.
```
yarn test
```
### End-to-End tests

View File

@@ -152,6 +152,10 @@ For a good example, see https://develop.element.io/config.json.
1. `sentry`: [Sentry](https://sentry.io/) configuration for rageshake data being sent to sentry.
1. `dsn`: the Sentry [DSN](https://docs.sentry.io/product/sentry-basics/dsn-explainer/)
2. `environment`: (optional) The [Environment](https://docs.sentry.io/product/sentry-basics/environments/) to pass to sentry
1. `map_style_url`: Maptile server URL for location sharing. e.g.
'https://api.maptiler.com/maps/basic/style.json?key=YOUR_KEY_GOES_HERE'
1. `analyticsOwner`: The entity that analytics data is being sent to. Used in copy
when explaining to the user where data is being sent. If not set, defaults to `brand`.
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
@@ -236,3 +240,4 @@ Currently, the following UI feature flags are supported:
user.
* `UIFeature.roomHistorySettings` - Whether or not the room history settings are shown to the user.
This should only be used if the room history visibility options are managed by the server.
* `UIFeature.TimelineEnableRelativeDates` - Display relative date separators (eg: 'Today', 'Yesterday') in the timeline for recent messages. When false day dates will be used.

View File

@@ -130,10 +130,6 @@ Enables sending hidden read receipts as per [MSC2285](https://github.com/matrix-
Adds a "Message layout" section under `Settings -> Appearance`, where the user can select their preferred message layout (e.g. IRC or Modern). Additionally, adds a new "Message bubbles" layout.
## Pseudonymous Analytics opt-in (`feature_pseudonymous_analytics_opt_in`)
Opts in to collection of pseudonymous analytics data via Posthog. See https://github.com/matrix-org/matrix-react-sdk/pull/6495
## Polls (`feature_polls`) [In Development]
Polls are a way to gauge interest from your community about a certain topic with a simple voting mechanic
@@ -154,3 +150,25 @@ entirely incomplete and may not work at all - it is not recommended for general
Metaspaces are automatically populated spaces you can enable in your Space panel.
By default, you'll have Home or All rooms, but you can opt in to a People, Favourites, and Other Rooms metaspace too.
## Location sharing (`feature_location_share`) [In Development]
Allows users to send and display location data using [maplibre](https://maplibre.org).
The current implementation is a quick in-progress development spike to
demonstrate viability and prove [MSC3488](https://github.com/matrix-org/matrix-doc/pull/3488)
and [MSC3489](https://github.com/matrix-org/matrix-doc/pull/3489) - **the UI has not yet
been designed, and it will not exit labs until it has**.
For this to work, you must specify a valid maptiler.com API key in
`"map_style_url": "https://api.maptiler.com/maps/basic/style.json?key=YOUR_KEY_GOES_HERE"`
in your config.json, or find an alternative map tile server.
## Breadcrumbs v2 (`feature_breadcrumbs_v2`)
Instead of showing the horizontal list of breadcrumbs under the filter field, the new UX is an interactive context menu
triggered by the button to the right of the filter field.
## Spotlight search (`feature_spotlight`) [In Development]
Switches to a new room search experience.

View File

@@ -59,5 +59,6 @@
},
"features": {
"feature_spaces_metaspaces": true
}
},
"map_style_url": "https://api.maptiler.com/maps/basic/style.json?key=JCdnMQY3oGklTYYLIvtI"
}

View File

@@ -1,6 +1,6 @@
{
"name": "element-web",
"version": "1.9.7",
"version": "1.9.8",
"description": "A feature-rich client for Matrix.org",
"author": "New Vector Ltd.",
"repository": {
@@ -57,12 +57,13 @@
"dependencies": {
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz",
"browser-request": "^0.3.3",
"eslint-plugin-import": "^2.25.2",
"gfm.css": "^1.1.2",
"jsrsasign": "^10.2.0",
"katex": "^0.12.0",
"matrix-js-sdk": "15.2.1",
"matrix-react-sdk": "3.36.1",
"matrix-widget-api": "^0.1.0-beta.17",
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
"matrix-react-sdk": "github:matrix-org/matrix-react-sdk#develop",
"matrix-widget-api": "^0.1.0-beta.18",
"prop-types": "^15.7.2",
"react": "17.0.2",
"react-dom": "17.0.2",
@@ -97,8 +98,8 @@
"@types/react": "17.0.14",
"@types/react-dom": "17.0.9",
"@types/sanitize-html": "^2.3.1",
"@typescript-eslint/eslint-plugin": "^4.17.0",
"@typescript-eslint/parser": "^4.17.0",
"@typescript-eslint/eslint-plugin": "^5.6.0",
"@typescript-eslint/parser": "^5.6.0",
"allchange": "^1.0.6",
"autoprefixer": "^9.8.6",
"babel-jest": "^26.6.3",
@@ -110,7 +111,7 @@
"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#2306b3d4da4eba908b256014b979f1d3d43d2945",
"eslint-plugin-matrix-org": "github:matrix-org/eslint-plugin-matrix-org#48ec1e6af2cfb8310b9a6e23edf2dc7a26ddd580",
"eslint-plugin-react": "^7.22.0",
"eslint-plugin-react-hooks": "^4.2.0",
"extract-text-webpack-plugin": "^4.0.0-beta.0",
@@ -154,7 +155,7 @@
"stylelint-config-standard": "^20.0.0",
"stylelint-scss": "^3.18.0",
"terser-webpack-plugin": "^2.3.8",
"typescript": "4.3.5",
"typescript": "^4.5.3",
"webpack": "^4.46.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.2",

View File

@@ -29,6 +29,7 @@ const INCLUDE_LANGS = [
{'value': 'he', 'label': 'עברית'},
{'value': 'hi', 'label': 'हिन्दी'},
{'value': 'hu', 'label': 'Magyar'},
{'value': 'id', 'label': 'Bahasa Indonesia'},
{'value': 'is', 'label': 'íslenska'},
{'value': 'it', 'label': 'Italiano'},
{'value': 'ja', 'label': '日本語'},
@@ -52,6 +53,7 @@ const INCLUDE_LANGS = [
{'value': 'th', 'label': 'ไทย'},
{'value': 'tr', 'label': 'Türkçe'},
{'value': 'uk', 'label': 'українська мова'},
{'value': 'vi', 'label': 'Tiếng Việt'},
{'value': 'vls', 'label': 'West-Vlaams'},
{'value': 'zh_Hans', 'label': '简体中文'}, // simplified chinese
{'value': 'zh_Hant', 'label': '繁體中文'}, // traditional chinese

View File

@@ -32,7 +32,7 @@ type ElectronChannel =
"setBadgeCount" |
"update-downloaded" |
"userDownloadCompleted" |
"userDownloadOpen";
"userDownloadAction";
declare global {
interface Window {

File diff suppressed because it is too large Load Diff

View File

@@ -12,7 +12,7 @@
"Go to your browser to complete Sign In": "עבור לדפדפן להמשך ההתחברות",
"Explore rooms": "גלה חדרים",
"Create Account": "יצירת חשבון",
"Sign In": "כניסה",
"Sign In": "התחברות",
"Previous/next recently visited room or community": "הבא\\קודם חדרים וקהילות שביקרתם לאחרונה",
"Open": "פתח",
"Download Completed": "ההורדה הושלמה",
@@ -33,5 +33,6 @@
"%(brand)s Desktop (%(platformName)s)": "%(brand)s שולחן עבודה %(platformName)s",
"The message from the parser is: %(message)s": "ההודעה מהמנתח היא: %(message)s",
"Missing indexeddb worker script!": "סקריפט indexeddb worker חסר!",
"Switch to space by number": "עבור אל 'Space' על פי מספרו"
"Switch to space by number": "עבור 'למרחב' על פי המספר שלו",
"Use %(brand)s on mobile": "השתמש ב%(brand)s במכשיר הנייד"
}

View File

@@ -4,7 +4,7 @@
"Unknown device": "Perangkat tidak dikenal",
"You need to be using HTTPS to place a screen-sharing call.": "Anda perlu menggunakan HTTPS untuk melakukan panggilan berbagi layar.",
"Welcome to Element": "Selamat datang di Element",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Obrolan &amp; kolaborasi terenkripsi dan terdesentralisasi diberdayakan oleh [matrix]",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Obrolan &amp; kolaborasi terdecentralisasi dan terenkripsi, diberdayakan oleh [matrix]",
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfigurasi Element Anda berisi JSON yang tidak valid. Mohon perbaiki masalahnya dan muat ulang halamannya.",
"Invalid configuration: no default server specified.": "Konfigurasi tidak valid: server bawaan belum ditentukan.",
"Missing indexeddb worker script!": "Tidak ada script worker indexeddb!",

View File

@@ -4,10 +4,10 @@
"Unknown device": "Onbekend apparaat",
"You need to be using HTTPS to place a screen-sharing call.": "Oproepen met schermdelen vergen HTTPS.",
"Welcome to Element": "Welkom bij Element",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Gedecentraliseerd en versleuteld chatten &amp; samenwerken dankzij [matrix]",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Decentrale en versleutelde chat &amp; samenwerken dankzij [matrix]",
"Sign In": "Inloggen",
"Create Account": "Registreren",
"Explore rooms": "Kamers ontdekken",
"Explore rooms": "Ontdek kamers",
"Unexpected error preparing the app. See console for details.": "Er is een onverwachte fout opgetreden bij het voorbereiden van de app. Zie de console voor details.",
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Configuratiefout: kan slechts één van default_server_config, default_server_name, of default_hs_url opgeven.",
"Invalid configuration: no default server specified.": "Configuratie ongeldig: geen standaardserver opgegeven.",

View File

@@ -32,5 +32,7 @@
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Vaša konfigurácia Elementu obsahuje nesprávny údaj JSON. Prosím, opravte chybu a obnovte stránku.",
"Your browser can't run %(brand)s": "Váš prehliadač nerozbehne %(brand)s",
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s používa pokročilé funkcie prehliadača, ktoré nie sú podporované vaším aktuálnym prehliadačom.",
"Powered by Matrix": "používa protokol Matrix"
"Powered by Matrix": "používa protokol Matrix",
"Use %(brand)s on mobile": "Používať %(brand)s pri mobilných zariadeniach",
"Switch to space by number": "Prepnúť do priestoru podľa čísla"
}

1
src/i18n/strings/uz.json Normal file
View File

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

View File

@@ -19,23 +19,23 @@ limitations under the License.
*/
import React from 'react';
// add React and ReactPerf to the global namespace, to make them easier to access via the console
// this incidentally means we can forget our React imports in JSX files without penalty.
window.React = React;
import * as sdk from 'matrix-react-sdk';
import PlatformPeg from 'matrix-react-sdk/src/PlatformPeg';
import { _td, newTranslatableError } from 'matrix-react-sdk/src/languageHandler';
import AutoDiscoveryUtils from 'matrix-react-sdk/src/utils/AutoDiscoveryUtils';
import { AutoDiscovery } from "matrix-js-sdk/src/autodiscovery";
import * as Lifecycle from "matrix-react-sdk/src/Lifecycle";
import type MatrixChatType from "matrix-react-sdk/src/components/structures/MatrixChat";
import SdkConfig, { parseSsoRedirectOptions } from "matrix-react-sdk/src/SdkConfig";
import { logger } from "matrix-js-sdk/src/logger";
import { createClient } from "matrix-js-sdk/src/matrix";
import type MatrixChatType from "matrix-react-sdk/src/components/structures/MatrixChat";
import { parseQs, parseQsFromFragment } from './url_utils';
import VectorBasePlatform from "./platform/VectorBasePlatform";
import { createClient } from "matrix-js-sdk/src/matrix";
// add React and ReactPerf to the global namespace, to make them easier to access via the console
// this incidentally means we can forget our React imports in JSX files without penalty.
window.React = React;
let lastLocationHashSet: string = null;

View File

@@ -32,7 +32,7 @@
font-src 'self' data:;
media-src * blob: data:;
child-src * blob: data:;
worker-src 'self';
worker-src 'self' blob:;
frame-src * blob: data:;
form-action 'self';
manifest-src 'self';
@@ -64,14 +64,14 @@
<script src="<%= htmlWebpackPlugin.files.js.find(entry => entry.includes("bundle.js")) %>"></script>
<!-- Legacy supporting Prefetch images -->
<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;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/bold.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/code.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/italics.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/quote.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/strikethrough.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/warning.svg') %>" aria-hidden alt="" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/e2e/warning.svg') %>" aria-hidden alt="" 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') %>" aria-hidden alt="" width="24" height="23" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/bold.svg') %>" aria-hidden alt="" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/code.svg') %>" aria-hidden alt="" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/italics.svg') %>" aria-hidden alt="" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/quote.svg') %>" aria-hidden alt="" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/strikethrough.svg') %>" aria-hidden alt="" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<audio id="messageAudio">
<source src="media/message.ogg" type="audio/ogg" />

View File

@@ -18,6 +18,12 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { logger } from "matrix-js-sdk/src/logger";
// 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';
// Require common CSS here; this will make webpack process it into bundle.css.
// Our own CSS (which is themed) is imported via separate webpack entry points
// in webpack.config.js
@@ -33,11 +39,6 @@ require('katex/dist/katex.css');
*/
require('./devcss');
require('./localstorage-fix');
// 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';
import { logger } from "matrix-js-sdk/src/logger";
async function settled(...promises: Array<Promise<any>>) {
for (const prom of promises) {

View File

@@ -23,20 +23,18 @@ import olmWasmPath from "@matrix-org/olm/olm.wasm";
import Olm from '@matrix-org/olm';
import * as ReactDOM from "react-dom";
import * as React from "react";
import * as languageHandler from "matrix-react-sdk/src/languageHandler";
import SettingsStore from "matrix-react-sdk/src/settings/SettingsStore";
import ElectronPlatform from "./platform/ElectronPlatform";
import PWAPlatform from "./platform/PWAPlatform";
import WebPlatform from "./platform/WebPlatform";
import PlatformPeg from "matrix-react-sdk/src/PlatformPeg";
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
import { setTheme } from "matrix-react-sdk/src/theme";
import { initRageshake, initRageshakeStore } from "./rageshakesetup";
import { logger } from "matrix-js-sdk/src/logger";
import ElectronPlatform from "./platform/ElectronPlatform";
import PWAPlatform from "./platform/PWAPlatform";
import WebPlatform from "./platform/WebPlatform";
import { initRageshake, initRageshakeStore } from "./rageshakesetup";
export const rageshakePromise = initRageshake();
export function preparePlatform() {

View File

@@ -11,9 +11,9 @@
<div class="joinConferencePrompt">
<span class="icon"><!-- managed by CSS --></span>
<!-- TODO: i18n -->
<h2>Videokonferenz</h2>
<h2>Jitsi Video Conference</h2>
<div id="widgetActionContainer">
<button type="button" id="joinButton">Videokonferenz beitreten</button>
<button type="button" id="joinButton">Join Conference</button>
</div>
</div>
</div>

View File

@@ -14,9 +14,6 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
// We have to trick webpack into loading our CSS for us.
require("./index.scss");
import { KJUR } from 'jsrsasign';
import {
IOpenIDCredentials,
@@ -25,9 +22,11 @@ import {
WidgetApi,
} from "matrix-widget-api";
import { ElementWidgetActions } from "matrix-react-sdk/src/stores/widgets/ElementWidgetActions";
import { logger } from "matrix-js-sdk/src/logger";
// We have to trick webpack into loading our CSS for us.
require("./index.scss");
const JITSI_OPENIDTOKEN_JWT_AUTH = 'openidtoken-jwt';
// Dev note: we use raw JS without many dependencies to reduce bundle size.
@@ -47,6 +46,7 @@ let jitsiAuth: string;
let roomId: string;
let openIdToken: IOpenIDCredentials;
let roomName: string;
let startAudioOnly: boolean;
let widgetApi: WidgetApi;
let meetApi: any; // JitsiMeetExternalAPI
@@ -108,6 +108,7 @@ let meetApi: any; // JitsiMeetExternalAPI
jitsiAuth = qsParam('auth', true);
roomId = qsParam('roomId', true);
roomName = qsParam('roomName', true);
startAudioOnly = qsParam('isAudioOnly', true) === "true";
if (widgetApi) {
await readyPromise;
@@ -239,6 +240,9 @@ function joinConference() { // event handler bound in HTML
MAIN_TOOLBAR_BUTTONS: [],
VIDEO_LAYOUT_FIT: "height",
},
configOverwrite: {
startAudioOnly,
},
jwt: jwt,
};

View File

@@ -1,7 +1,7 @@
import { getVectorConfig } from '../getconfig';
import { logger } from "matrix-js-sdk/src/logger";
import { getVectorConfig } from '../getconfig';
function onBackToElementClick(): void {
// Cookie should expire in 4 hours
document.cookie = 'element_mobile_redirect_to_guide=false;path=/;max-age=14400';

View File

@@ -52,11 +52,11 @@ import ToastStore from "matrix-react-sdk/src/stores/ToastStore";
import GenericExpiringToast from "matrix-react-sdk/src/components/views/toasts/GenericExpiringToast";
import SettingsStore from 'matrix-react-sdk/src/settings/SettingsStore';
import { IMatrixProfile, IEventWithRoomId as IMatrixEvent, IResultRoomEvents } from "matrix-js-sdk/src/@types/search";
import { logger } from "matrix-js-sdk/src/logger";
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
import VectorBasePlatform from './VectorBasePlatform';
import { logger } from "matrix-js-sdk/src/logger";
const electron = window.electron;
const isMac = navigator.platform.toUpperCase().includes('MAC');
@@ -258,14 +258,18 @@ export default class ElectronPlatform extends VectorBasePlatform {
dis.fire(Action.ViewUserSettings);
});
electron.on('userDownloadCompleted', (ev, { path, name }) => {
const key = `DOWNLOAD_TOAST_${path}`;
electron.on('userDownloadCompleted', (ev, { id, name }) => {
const key = `DOWNLOAD_TOAST_${id}`;
const onAccept = () => {
electron.send('userDownloadOpen', { path });
electron.send('userDownloadAction', { id, open: true });
ToastStore.sharedInstance().dismissToast(key);
};
const onDismiss = () => {
electron.send('userDownloadAction', { id });
};
ToastStore.sharedInstance().addOrReplaceToast({
key,
title: _t("Download Completed"),
@@ -274,6 +278,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
acceptLabel: _t("Open"),
onAccept,
dismissLabel: _t("Dismiss"),
onDismiss,
numSeconds: 10,
},
component: GenericExpiringToast,
@@ -368,7 +373,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
return true;
}
displayNotification(title: string, msg: string, avatarUrl: string, room: Room): Notification {
displayNotification(title: string, msg: string, avatarUrl: string, room: Room, ev?: MatrixEvent): Notification {
// GNOME notification spec parses HTML tags for styling...
// Electron Docs state all supported linux notification systems follow this markup spec
// https://github.com/electron/electron/blob/master/docs/tutorial/desktop-environment-integration.md#linux
@@ -379,27 +384,24 @@ export default class ElectronPlatform extends VectorBasePlatform {
msg = msg.replace(/</g, '&lt;').replace(/>/g, '&gt;');
}
// Notifications in Electron use the HTML5 notification API
const notifBody = {
body: msg,
silent: true, // we play our own sounds
};
if (avatarUrl) notifBody['icon'] = avatarUrl;
const notification = new window.Notification(title, notifBody);
const notification = super.displayNotification(
title,
msg,
avatarUrl,
room,
ev,
);
const handler = notification.onclick as Function;
notification.onclick = () => {
dis.dispatch({
action: 'view_room',
room_id: room.roomId,
});
window.focus();
handler?.();
this.ipcCall('focusWindow');
};
return notification;
}
loudNotification(ev: Event, room: Object) {
loudNotification(ev: MatrixEvent, room: Room) {
electron.send('loudNotification');
}

View File

@@ -14,10 +14,10 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import WebPlatform from "./WebPlatform";
import { logger } from "matrix-js-sdk/src/logger";
import WebPlatform from "./WebPlatform";
export default class PWAPlatform extends WebPlatform {
setNotificationCount(count: number) {
if (!navigator.setAppBadge) return super.setNotificationCount(count);

View File

@@ -19,8 +19,8 @@ limitations under the License.
import BasePlatform from 'matrix-react-sdk/src/BasePlatform';
import { _t } from 'matrix-react-sdk/src/languageHandler';
import { getVectorConfig } from "../getconfig";
import { getVectorConfig } from "../getconfig";
import Favicon from "../../favicon";
/**

View File

@@ -16,20 +16,18 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import VectorBasePlatform from './VectorBasePlatform';
import { UpdateCheckStatus } from "matrix-react-sdk/src/BasePlatform";
import request from 'browser-request';
import dis from 'matrix-react-sdk/src/dispatcher/dispatcher';
import { _t } from 'matrix-react-sdk/src/languageHandler';
import { Room } from "matrix-js-sdk/src/models/room";
import { hideToast as hideUpdateToast, showToast as showUpdateToast } from "matrix-react-sdk/src/toasts/UpdateToast";
import { Action } from "matrix-react-sdk/src/dispatcher/actions";
import { CheckUpdatesPayload } from 'matrix-react-sdk/src/dispatcher/payloads/CheckUpdatesPayload';
import UAParser from 'ua-parser-js';
import { logger } from "matrix-js-sdk/src/logger";
import VectorBasePlatform from './VectorBasePlatform';
const POKE_RATE_MS = 10 * 60 * 1000; // 10 min
export default class WebPlatform extends VectorBasePlatform {
@@ -79,27 +77,6 @@ export default class WebPlatform extends VectorBasePlatform {
});
}
displayNotification(title: string, msg: string, avatarUrl: string, room: Room) {
const notifBody = {
body: msg,
tag: "vector",
silent: true, // we play our own sounds
};
if (avatarUrl) notifBody['icon'] = avatarUrl;
const notification = new window.Notification(title, notifBody);
notification.onclick = function() {
dis.dispatch({
action: 'view_room',
room_id: room.roomId,
});
window.focus();
notification.close();
};
return notification;
}
private getMostRecentVersion(): Promise<string> {
// We add a cachebuster to the request to make sure that we know about
// the most recent version on the origin server. That might not

View File

@@ -29,7 +29,6 @@ limitations under the License.
import * as rageshake from "matrix-react-sdk/src/rageshake/rageshake";
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
import sendBugReport from "matrix-react-sdk/src/rageshake/submit-rageshake";
import { logger } from "matrix-js-sdk/src/logger";
export function initRageshake() {

106
src/vector/screenshots.html Normal file
View File

@@ -0,0 +1,106 @@
<!doctype html>
<html lang="en" style="height: 100%;">
<!--
A page to render components of element-web that may be used for
screenshot testing.
See src/vector/screenshots.tsx for more information.
-->
<head>
<meta charset="utf-8">
<title>Element Screenshots</title>
<link rel="apple-touch-icon" sizes="57x57" href="<%= require('../../res/vector-icons/apple-touch-icon-57.png') %>">
<link rel="apple-touch-icon" sizes="60x60" href="<%= require('../../res/vector-icons/apple-touch-icon-60.png') %>">
<link rel="apple-touch-icon" sizes="72x72" href="<%= require('../../res/vector-icons/apple-touch-icon-72.png') %>">
<link rel="apple-touch-icon" sizes="76x76" href="<%= require('../../res/vector-icons/apple-touch-icon-76.png') %>">
<link rel="apple-touch-icon" sizes="114x114" href="<%= require('../../res/vector-icons/apple-touch-icon-114.png') %>">
<link rel="apple-touch-icon" sizes="120x120" href="<%= require('../../res/vector-icons/apple-touch-icon-120.png') %>">
<link rel="apple-touch-icon" sizes="144x144" href="<%= require('../../res/vector-icons/apple-touch-icon-144.png') %>">
<link rel="apple-touch-icon" sizes="152x152" href="<%= require('../../res/vector-icons/apple-touch-icon-152.png') %>">
<link rel="apple-touch-icon" sizes="180x180" href="<%= require('../../res/vector-icons/apple-touch-icon-180.png') %>">
<link rel="manifest" href="manifest.json">
<meta name="referrer" content="no-referrer">
<link rel="shortcut icon" href="<%= require('../../res/vector-icons/favicon.ico') %>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-title" content="Element">
<meta name="application-name" content="Element">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-TileImage" content="<%= require('../../res/vector-icons/mstile-150.png') %>">
<meta name="msapplication-config" content="<%= require('../../res/vector-icons/browserconfig.xml') %>">
<meta name="theme-color" content="#ffffff">
<meta property="og:image" content="<%= 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';
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$/);
if (match) {
var title = match[1].charAt(0).toUpperCase() + match[1].slice(1);
%>
<link rel="stylesheet" disabled="disabled" data-mx-theme="<%= title %>" title="<%= title %>" href="<%= file %>">
<% } else { %>
<link rel="stylesheet" href="<%= file %>">
<% }
} %>
<% for (var i=0; i < htmlWebpackPlugin.tags.headTags.length; i++) {
var tag = htmlWebpackPlugin.tags.headTags[i];
var path = tag.attributes && tag.attributes.href;
if (path.indexOf("Inter") !== -1) { %>
<link rel="preload" as="font" href="<%= path %>" crossorigin="anonymous"/>
<% }
} %>
</head>
<body style="height: 100%; margin: 0;">
<noscript>Sorry, Element requires JavaScript to be enabled.</noscript> <!-- TODO: Translate this? -->
<section id="matrixchat" style="height: 100%;" class="notranslate"></section>
<script src="<%= htmlWebpackPlugin.files.js.find(entry => entry.includes("screenshots.js")) %>"></script>
<!-- Legacy supporting Prefetch images -->
<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;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/bold.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/code.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/italics.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/quote.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<img src="<%= require('matrix-react-sdk/res/img/format/strikethrough.svg') %>" width="25" height="22" style="visibility: hidden; position: absolute; top: 0px; left: 0px;"/>
<audio id="messageAudio">
<source src="media/message.ogg" type="audio/ogg" />
<source src="media/message.mp3" type="audio/mpeg" />
</audio>
<audio id="ringAudio" loop>
<source src="media/ring.ogg" type="audio/ogg" />
<source src="media/ring.mp3" type="audio/mpeg" />
</audio>
<audio id="ringbackAudio" loop>
<source src="media/ringback.ogg" type="audio/ogg" />
<source src="media/ringback.mp3" type="audio/mpeg" />
</audio>
<audio id="callendAudio">
<source src="media/callend.ogg" type="audio/ogg" />
<source src="media/callend.mp3" type="audio/mpeg" />
</audio>
<audio id="busyAudio">
<source src="media/busy.ogg" type="audio/ogg" />
<source src="media/busy.mp3" type="audio/mpeg" />
</audio>
<audio id="remoteAudio"></audio>
<!-- let CSS themes pass constants to the app -->
<div id="mx_theme_accentColor"></div><div id="mx_theme_secondaryAccentColor"></div><div id="mx_theme_tertiaryAccentColor"></div>
</body>
</html>

141
src/vector/screenshots.tsx Normal file
View File

@@ -0,0 +1,141 @@
/*
Copyright 2022 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// This file is a cut-down copy of index.ts. It goes together with
// screenshots.html to create a page allowing you to choose a component,
// Which is rendered with example data, allowing us to take screenshots
// (using code in matrix-react-sdk/tests/end-to-end-tests/screenshots.js)
// and compare for any changes against previous versions.
import './modernizr';
import * as ReactDOM from "react-dom";
import React, { ChangeEvent, ReactElement } from 'react';
import { MatrixClientPeg } from "matrix-react-sdk/src/MatrixClientPeg";
import { screenshotNotificationUserSettingsTab } from './screenshots/notification_user_settings_tab';
let widthInput: HTMLInputElement;
let heightInput: HTMLInputElement;
let classInput: HTMLInputElement;
async function settled(...promises: Array<Promise<any>>) {
for (const prom of promises) {
try {
await prom;
} catch (e) {
console.error(e);
}
}
}
async function start() {
const {
preparePlatform,
loadSkin,
loadLanguage,
loadTheme,
} = await import(
/* webpackChunkName: "init" */
/* webpackPreload: true */
"./init");
try {
preparePlatform();
const loadLanguagePromise = loadLanguage();
const loadThemePromise = loadTheme();
const loadSkinPromise = loadSkin();
await settled(loadSkinPromise, loadThemePromise, loadLanguagePromise);
await loadSkinPromise;
await loadThemePromise;
await loadLanguagePromise;
await myLoadApp();
} catch (err) {
console.error(err);
}
}
async function myLoadApp() {
// We know that MatrixClientPeg is a MatrixClientPegClass
await (MatrixClientPeg as any).createClient({});
window.matrixChat = ReactDOM.render(
<div>
<input type="hidden" id="screenshot_width" value="" />
<input type="hidden" id="screenshot_height" value="" />
<input type="hidden" id="screenshot_class" value="" />
<select id="select_screenshot" defaultValue="" onChange={selectChange}>
<option value="">-- Choose component to screenshot --</option>
{
screenshots.map((screenshot) =>
<option
value={screenshot.name}
key={screenshot.name}
>{ screenshot.name }</option>,
)
}
</select>
<div id="screenshot" />
</div>,
document.getElementById('matrixchat'),
);
widthInput = document.getElementById("screenshot_width") as HTMLInputElement;
heightInput = document.getElementById("screenshot_height") as HTMLInputElement;
classInput = document.getElementById("screenshot_class") as HTMLInputElement;
}
function selectChange(event: ChangeEvent<HTMLSelectElement>) {
const screenshot = screenshots.find((scr) => scr.name === event.target.value);
if (screenshot) {
widthInput["value"] = screenshot.width.toString();
heightInput["value"] = screenshot.height.toString();
classInput["value"] = screenshot.cssClass;
ReactDOM.render(
screenshot.fn() as ReactElement,
document.getElementById('screenshot'),
);
}
}
/**
* To add more screenshots, add a row to this table.
*
* Note: width, height and cssClass act as hints to the screenshotting code in
* matrix-react-sdk about how to render the screenshot - they do not affect the
* size or appearance if you visit the page in your browser.
*/
const screenshots = [
{
name: "NotificationUserSettingsTab_wide",
fn: screenshotNotificationUserSettingsTab,
width: 800,
height: 800,
cssClass: "mx_NotificationUserSettingsTab",
},
{
name: "NotificationUserSettingsTab_narrow",
fn: screenshotNotificationUserSettingsTab,
width: 400,
height: 800,
cssClass: "mx_NotificationUserSettingsTab",
},
];
start().catch(err => {
console.error(err);
});

View File

@@ -0,0 +1,244 @@
/*
Copyright 2022 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import { IPushRules } from "matrix-js-sdk/src/@types/PushRules";
import { MatrixClientPeg } from "matrix-react-sdk/src/MatrixClientPeg";
import { PushProcessor } from 'matrix-js-sdk/src/pushprocessor';
import React, { ReactElement } from 'react';
import * as sdk from 'matrix-react-sdk';
export function screenshotNotificationUserSettingsTab(): ReactElement {
MatrixClientPeg.get().getPushRules = async () => {
return PushProcessor.rewriteDefaultRules(pushRulesJson() as IPushRules);
};
MatrixClientPeg.get().getPushers = async () => {
return { pushers: [] };
};
MatrixClientPeg.get().getThreePids = async () => {
return { threepids: [] };
};
const NotificationUserSettingsTab= sdk.getComponent(
'views.settings.tabs.user.NotificationUserSettingsTab');
return <NotificationUserSettingsTab />;
}
function pushRulesJson() {
// This is a lightly-modified paste of the JSON returned from a GET
// to /pushrules/
/* eslint-disable */
return {
"global": {
"underride": [
{
"conditions": [
{ "kind": "event_match", "key": "type", "pattern": "m.call.invite" },
],
"actions": [
"notify",
{ "set_tweak": "sound", "value": "ring" },
{ "set_tweak": "highlight", "value": false },
],
"rule_id": ".m.rule.call",
"default": true,
"enabled": true,
},
{
"conditions": [
{ "kind": "room_member_count", "is": "2" },
{ "kind": "event_match", "key": "type", "pattern": "m.room.message" },
],
"actions": [
"notify",
{ "set_tweak": "sound", "value": "default" },
{ "set_tweak": "highlight", "value": false },
],
"rule_id": ".m.rule.room_one_to_one",
"default": true,
"enabled": true,
},
{
"conditions": [
{ "kind": "room_member_count", "is": "2" },
{ "kind": "event_match", "key": "type", "pattern": "m.room.encrypted" },
],
"actions": [
"notify",
{ "set_tweak": "sound", "value": "default" },
{ "set_tweak": "highlight", "value": false },
],
"rule_id": ".m.rule.encrypted_room_one_to_one",
"default": true,
"enabled": true,
},
{
"conditions": [
{ "kind": "event_match", "key": "type", "pattern": "m.room.message" },
],
"actions": [
"dont_notify",
],
"rule_id": ".m.rule.message",
"default": true,
"enabled": true,
},
{
"conditions": [
{ "kind": "event_match", "key": "type", "pattern": "m.room.encrypted" },
],
"actions": [
"dont_notify",
],
"rule_id": ".m.rule.encrypted",
"default": true,
"enabled": true,
},
{
"conditions": [
{ "kind": "event_match", "key": "type", "pattern": "im.vector.modular.widgets" },
{ "kind": "event_match", "key": "content.type", "pattern": "jitsi" },
{ "kind": "event_match", "key": "state_key", "pattern": "*" },
],
"actions": [
"notify",
{ "set_tweak": "highlight", "value": false },
],
"rule_id": ".im.vector.jitsi",
"default": true,
"enabled": true,
},
],
"sender": [],
"room": [],
"content": [
{
"actions": [
"notify",
{ "set_tweak": "sound", "value": "default" },
{ "set_tweak": "highlight" },
],
"pattern": "username",
"rule_id": ".m.rule.contains_user_name",
"default": true,
"enabled": true,
},
],
"override": [
{
"conditions": [],
"actions": [
"dont_notify"
],
"rule_id": ".m.rule.master",
"default": true,
"enabled": false,
},
{
"conditions": [
{ "kind": "event_match", "key": "content.msgtype", "pattern": "m.notice" }
],
"actions": [
"dont_notify",
],
"rule_id": ".m.rule.suppress_notices",
"default": true,
"enabled": true,
},
{
"conditions": [
{ "kind": "event_match", "key": "type", "pattern": "m.room.member" },
{ "kind": "event_match", "key": "content.membership", "pattern": "invite" },
{ "kind": "event_match", "key": "state_key", "pattern": "@username:example.com" }
],
"actions": [
"notify",
{ "set_tweak": "sound", "value": "default" },
{ "set_tweak": "highlight", "value": false }
],
"rule_id": ".m.rule.invite_for_me",
"default": true,
"enabled": true,
},
{
"conditions": [
{ "kind": "event_match", "key": "type", "pattern": "m.room.member" }
],
"actions": [
"dont_notify",
],
"rule_id": ".m.rule.member_event",
"default": true,
"enabled": true,
},
{
"conditions": [
{ "kind": "contains_display_name" }
],
"actions": [
"notify",
{ "set_tweak": "sound", "value": "default" },
{ "set_tweak": "highlight" }
],
"rule_id": ".m.rule.contains_display_name",
"default": true,
"enabled": true,
},
{
"conditions": [
{ "kind": "event_match", "key": "content.body", "pattern": "@room" },
{ "kind": "sender_notification_permission", "key": "room" }
],
"actions": [
"notify",
{ "set_tweak": "highlight", "value": true }
],
"rule_id": ".m.rule.roomnotif",
"default": true,
"enabled": true,
},
{
"conditions": [
{ "kind": "event_match", "key": "type", "pattern": "m.room.tombstone" },
{ "kind": "event_match", "key": "state_key", "pattern": "" }
],
"actions": [
"notify",
{ "set_tweak": "highlight", "value": true }
],
"rule_id": ".m.rule.tombstone",
"default": true,
"enabled": true,
},
{
"conditions": [
{ "kind": "event_match", "key": "type", "pattern": "m.reaction" }
],
"actions": [
"dont_notify",
],
"rule_id": ".m.rule.reaction",
"default": true,
"enabled": true,
}
],
},
"device": {},
};
/* eslint-enable */
}

View File

@@ -12,3 +12,6 @@ Object.defineProperty(window, 'matchMedia', {
dispatchEvent: jest.fn(),
})),
});
// maplibre requires a createObjectURL mock
global.URL.createObjectURL = jest.fn();

View File

@@ -39,17 +39,6 @@ function getActiveThemes() {
return themes;
}
const additionalPlugins = [
new webpack.NormalModuleReplacementPlugin(
/src[\/\\]customisations[\/\\]WidgetVariables\.ts/,
path.resolve(require.resolve("matrix-react-sdk/package.json"), '..', 'src', 'customisations', 'bayern', 'BayernWidgetVariableCustomisations.ts'),
),
new webpack.NormalModuleReplacementPlugin(
/src[\/\\]customisations[\/\\]ComponentVisibility\.ts/,
path.resolve(require.resolve("matrix-react-sdk/package.json"), '..', 'src', 'customisations', 'bayern', 'BayernComponentVisibilityCustomisations.ts'),
),
];
module.exports = (env, argv) => {
// Establish settings based on the environment and args.
//
@@ -110,6 +99,7 @@ module.exports = (env, argv) => {
entry: {
"bundle": "./src/vector/index.ts",
"screenshots": "./src/vector/screenshots.tsx",
"mobileguide": "./src/vector/mobile_guide/index.ts",
"jitsi": "./src/vector/jitsi/index.ts",
"usercontent": "./node_modules/matrix-react-sdk/src/usercontent/index.ts",
@@ -507,6 +497,22 @@ module.exports = (env, argv) => {
},
}),
// This is our screenshots page for testing
new HtmlWebpackPlugin({
template: './src/vector/screenshots.html',
filename: 'screenshots.html',
// we inject the links ourselves via the template, because
// HtmlWebpackPlugin will screw up our formatting like the names
// of the themes and which chunks we actually care about.
inject: false,
excludeChunks: ['mobileguide', 'usercontent', 'jitsi'],
minify: false,
templateParameters: {
og_image_url: ogImageUrl,
},
}),
// This is the jitsi widget wrapper (embedded, so isolated stack)
new HtmlWebpackPlugin({
template: './src/vector/jitsi/index.html',
@@ -557,7 +563,6 @@ module.exports = (env, argv) => {
include: "./webapp/bundles",
}),
new webpack.EnvironmentPlugin(['VERSION']),
...additionalPlugins,
].filter(Boolean),
output: {

2395
yarn.lock

File diff suppressed because it is too large Load Diff