* fix rainbow breaks compound emojis
* use lodash split method for text splitting and add a unit test to test the behaviour
* Update _RichText.scss
* Update colour-test.ts
* Adds a test to demonstrate the issue with emoji autocomplete reported in https://github.com/vector-im/element-web/issues/19302.
Signed-off-by: Ryan Browne <code@commonlawfeature.com>
* Trim trailing `:` when checking for autocompletes for emoji.
Closes https://github.com/vector-im/element-web/issues/19302
Signed-off-by: Ryan Browne <code@commonlawfeature.com>
* Move all references to the emoji delimiter character to reference a constant.
Signed-off-by: Ryan Browne <code@commonlawfeature.com>
* Revert "Move all references to the emoji delimiter character to reference a constant."
This reverts commit ac09e71e4c6151e35d21f612c9b329ead2a381f1.
Signed-off-by: Ryan Browne <code@commonlawfeature.com>
* Rename variable.
Signed-off-by: Ryan Browne <code@commonlawfeature.com>
* Make the test file a .js file.
Signed-off-by: Ryan Browne <code@commonlawfeature.com>
* Update quotes to match style and make a valid stubbed room.
Signed-off-by: Ryan Browne <code@commonlawfeature.com>
* Fix variable name and test reporting.
Signed-off-by: Ryan Browne <code@commonlawfeature.com>
* Use str.replace with a regex.
Signed-off-by: Ryan Browne <code@commonlawfeature.com>
* Use an improved regex that does not have have to iterate through the entire string, and can just backtrack at most the last 2 characters.
Signed-off-by: Ryan Browne <code@commonlawfeature.com>
* Revert "Use an improved regex that does not have have to iterate through the
entire string, and can just backtrack at most the last 2 characters."
This regex is very efficient, but requires a specific form of the emoji
shortcode that it is not clear is within our control. This is a restriction
that is not required by the technicalities of solving the bug this PR is
attempting to fix. (It requires that an emoji shortcode end with a colon.)
This reverts commit 220cb0efb8de247158c11daf9170464a57cc3af2.
Signed-off-by: Ryan Browne <code@commonlawfeature.com>
Co-authored-by: Ryan Browne <code@commonlawfeature.com>
* open a dialog with map centered around first beacon
Signed-off-by: Kerry Archibald <kerrya@element.io>
* add room member markers
Signed-off-by: Kerry Archibald <kerrya@element.io>
* fix unmount issue in smart marker
Signed-off-by: Kerry Archibald <kerrya@element.io>
* dont throw on no more live locations
Signed-off-by: Kerry Archibald <kerrya@element.io>
* cursor on beacon maps
Signed-off-by: Kerry Archibald <kerrya@element.io>
* fussy import ordering
Signed-off-by: Kerry Archibald <kerrya@element.io>
* test dialog opening from beacon body
Signed-off-by: Kerry Archibald <kerrya@element.io>
* test beaconmarker
Signed-off-by: Kerry Archibald <kerrya@element.io>
* test BeaconViewDialog
Signed-off-by: Kerry Archibald <kerrya@element.io>
* comment
Signed-off-by: Kerry Archibald <kerrya@element.io>
* use unstable prefix for wk tile_Server
Signed-off-by: Kerry Archibald <kerrya@element.io>
* unstable prefix for new m.tile_server use in test
Signed-off-by: Kerry Archibald <kerrya@element.io>
* A first, maybe working cypress test
Plus cypress plugins to manage synapses in docker containers
* Fix yaml
* This file is important
* try & find where it's put the artifact
* Download artifact to a directory
* pics or it didn't happen
* Add conditional, otherwise no artifacts on failure...
* Try increasing timeout
also actually give the test a name
* Try in chrome
* Get docker logs to see why it's failing
also document the chrome setting
* Try changing mode on homeserver.yaml
* debug
* More debugging
* more file permissions debugging
* ARGH
* more debug
* sigh
* Eugh, that's not how arguments work
* Add the option to really allow open registration
and remove debug logging / comment fixes
* failure to yaml
* Upload docker logs as artifacts
and temporarily remove contional to test
* Put the conditional back
* Upgrade types in end to end tests
to be compatible with fs-extra types
* Try reducing timeout a bit
also make password more... sensible
* Hex is not octal
* Remove file mode
Seems to be unnecessary since the signing key is perfectly fine
* Give the log files extensions
* Rename workflow file now it also does tests
* Add cypress scripts
* copyright headers
* Use ? operator
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Use develop synapse image
* Tidy up any remaining synapses after each spec run
Also:
* Move the synapseStart / synapseStop functions out to the top level
so they can be reused
* Add a tsconfig file
* Give the containers names
* Don't upload video on test pass
We don't upload it anyway so tell cypress not to so it can not
bother encoding them
* Enable linting on cypress files
and fix existing lint errors
* Type check cypress files
and make it pass the type checks, specifically:
* Upgrade sinon fake timers to a version that has the right types
* Set module resolution
* Type check cypress files separately
* Rename workflow file again
Probably better to just call it an element web build
* Don't plus + characters in container name
* Fix yaml
* Stream logs to file
* Add note to end to end tester to sya what's been ported
* Put docker rm in finally block
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Fix MatrixClientPeg.userRegisteredWithinLastHours so that it works
* Try fixing end-to-end test + add case for New search beta
* Remove end-to-end test case for Search beta toast as it only shows up after 5 minutes
* Revert to localStorage based solution + non-inverted logic + test including time advancement
* Remove radio component
* "Voice room" → "video room"
* Remove interactivity from video room tiles
* Update connection state when joining via widget
* Simplify room header buttons for video rooms
* Split out video room creation into a separate menu option
* Simplify room options for video rooms
* Update video room tile layout
* Tell the Jitsi widget whether it's a video channel
* Update tests
* "Voice" → "video" in more places
* Fix tests
* Re-add frame to immersive Jitsi widgets
* Comment ack
* Make updateDevices more readable
* Type FacePile
* expose wire errors in more useful way
* add wire error state to room live share warning bar
Signed-off-by: Kerry Archibald <kerrya@element.io>
* stylelint
Signed-off-by: Kerry Archibald <kerrya@element.io>
* add types to getLabel helper
Signed-off-by: Kerry Archibald <kerrya@element.io>
* display live share warning only when geolocation is happening
Signed-off-by: Kerry Archibald <kerrya@element.io>
* kill beacons when geolocation is unavailable or permissions denied
Signed-off-by: Kerry Archibald <kerrya@element.io>
* polish and comments
Signed-off-by: Kerry Archibald <kerrya@element.io>
* Add utility for getting connected voice participants
* Allow voice room members to send connected device state
* Update connected devices when connecting/disconnecting voice
* Show voice room participants in room tile when not connected
* Update voice room tests
* Add null types and guards
* Ensure a useful logfile gets recorded for synapse startup failures
* Update synapse config to stop complaining about key servers
* Add flag to turn on registrations again
From https://github.com/matrix-org/synapse/pull/12091
* Remove deprecated feature_communities_v2_prototypes
* Update _components
* i18n
* delint
* Cut out a bit more dead code
* Carve into legacy components
* Carve into mostly the room list code
* Carve into instances of "groupId"
* Carve out more of what comes up with "groups"
* Carve out some settings
* ignore related groups state
* Remove instances of spacesEnabled
* Fix some obvious issues
* Remove now-unused css
* Fix variable naming for legacy components
* Update i18n
* Misc cleanup from manual review
* Update snapshot for changed flag
* Appease linters
* rethemedex
* Remove now-unused AddressPickerDialog
* Make ConfirmUserActionDialog's member a required prop
* Remove useless override from RightPanelStore
* Remove extraneous CSS
* Update i18n
* Demo: "Communities are now Spaces" landing page
* Restore linkify for group IDs
* Demo: Dialog on click for communities->spaces notice
* i18n for demos
* i18n post-merge
* Update copy
* Appease the linter
* Post-merge cleanup
* Re-add spaces_learn_more_url to the new SdkConfig place
* Round 1 of post-merge fixes
* i18n
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Revert "Revert "Use styled mxids in member list (#6328)" (#8107)"
This reverts commit 709e6e78d2.
* Fix disambiguated profile for bubbles
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
* Add voice room labs flag
Signed-off-by: Robin Townsend <robin@robin.town>
* Add more widget actions for interacting with Jitsi
Signed-off-by: Robin Townsend <robin@robin.town>
* Factor out a more generic Jitsi creation utility
Signed-off-by: Robin Townsend <robin@robin.town>
* Add utilities for managing voice channels
Signed-off-by: Robin Townsend <robin@robin.town>
* Enable creation of voice rooms
Signed-off-by: Robin Townsend <robin@robin.town>
* Force a maximized view of voice channel widgets
Signed-off-by: Robin Townsend <robin@robin.town>
* Add voice channel store
Signed-off-by: Robin Townsend <robin@robin.town>
* Factor out a more generic FacePile
Signed-off-by: Robin Townsend <robin@robin.town>
* Implement room tile changes for voice rooms
Signed-off-by: Robin Townsend <robin@robin.town>
* Add interactive radio component to the left panel
Signed-off-by: Robin Townsend <robin@robin.town>
* Test voice rooms
Signed-off-by: Robin Townsend <robin@robin.town>
* Update name of call room type
Signed-off-by: Robin Townsend <robin@robin.town>
* Clarify that voice rooms are under development
Signed-off-by: Robin Townsend <robin@robin.town>
* Use readonly
Signed-off-by: Robin Townsend <robin@robin.town>
* Move acks to the end of handlers
Signed-off-by: Robin Townsend <robin@robin.town>
* Add comment about avatar URLs coming from Jitsi
Signed-off-by: Robin Townsend <robin@robin.town>
* Don't use unicode ellipses
for translation reasons?
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix tests
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix tests, again
Signed-off-by: Robin Townsend <robin@robin.town>
* Remove unnecessary export
Signed-off-by: Robin Townsend <robin@robin.town>
* Ack Jitsi events when we wait for them
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix emoting with emoji or pills
* Fix some slash command errors not being shown
* Re-enable mistakenly skipped SendMessageComposer tests
* Test emoting with non-text parts
* stop e2e tests exploding if a circular datastructure is logged
it's valid for the webapp to log datastructures to the console which happen to be circular
but the e2e test running explodes badly with a runtime exception and bombs out before
logging anything or providing a sensible stacktrace. you can trap the exception though and
get a sensible error however.
* don't barf on circular refs in return vals either
and log timestamps
* log timestamps
* speed up roomDir & E2EE tests by 3x
use timeouts correctly, so the first set
of scenarios take 42s to run rather than 2m21s
* speed up space test by 20s
* Document and support the established naming convention for config opts
This change:
* Rename `ConfigOptions` to `IConfigOptions` to match code convention/style, plus move it to a dedicated file
* Update comments and surrounding documentation
* Define every single documented option (from element-web's config.md)
* Enable a linter to enforce the convention
* Invent a translation layer for a different change to use
* No attempt to fix build errors from doing this (at this stage)
* Add demo of lint rule in action
* Fix all obvious instances of SdkConfig case conflicts
* Fix tests to use SdkConfig directly
* Add docs to make unset() calling safer
* Appease the linter
* Update documentation to match snake_case_config
* Fix more instances of square brackets off SdkConfig
* Don't assume that widget IDs are unique
Signed-off-by: Robin Townsend <robin@robin.town>
* Don't remove live tiles that don't exist
Signed-off-by: Robin Townsend <robin@robin.town>
* Add unit test for AppTile's live tile tracking
Signed-off-by: Robin Townsend <robin@robin.town>
* Paginate responses to pinned polls
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that pinned polls display paginated responses
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix a variety of issues with HTML → Markdown conversion
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix lint
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix @room pill formatting not being applied to link text
Signed-off-by: Robin Townsend <robin@robin.town>
* Test basic pinned message functionality
Signed-off-by: Robin Townsend <robin@robin.town>
* Test pinned polls
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix test
Signed-off-by: Robin Townsend <robin@robin.town>
* Add unexposed account setting for hiding poll creation
This is to match the sticker picker setting we already have, but not exposed in the user settings until we decide if we actually want it to be there.
This is primarily intended to be used in environments that disable it at the config level, though given there's multiple people in the wild who have asked for this, it seems reasonable to expose it as a hidden setting instead. Note that as of writing it's not clear if any of those requests made it as far as an issue tracker.
Typically for the usecase presented we'd add a new UIFeature flag, however this *feels* wrong for the case at hand.
* Move visibility check way higher
* Fix i18n post-merge
* Hide unpinnable pinned messages in more cases
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix typo
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that unpinnable pinned messages get hidden
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix cli.relations error in test
Signed-off-by: Robin Townsend <robin@robin.town>
* Use event: true shortcut when calling mkEvent
Signed-off-by: Robin Townsend <robin@robin.town>
* Use mockResolvedValue instead of mockReturnValue for async mock
Signed-off-by: Robin Townsend <robin@robin.town>
* Actually mock redacted messages correctly
Signed-off-by: Robin Townsend <robin@robin.town>
* Ensure that panel is updated before assertions are made
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that pinned messages reflect edits correctly
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix warning about missing date
Signed-off-by: Robin Townsend <robin@robin.town>
* Move calls to update out of act
They don't need to be there.
Signed-off-by: Robin Townsend <robin@robin.town>
* Move calls to update out of act
They don't need to be there.
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix lint
Signed-off-by: Robin Townsend <robin@robin.town>
* Hide unpinnable pinned messages in more cases
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix typo
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that unpinnable pinned messages get hidden
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix cli.relations error in test
Signed-off-by: Robin Townsend <robin@robin.town>
* Use event: true shortcut when calling mkEvent
Signed-off-by: Robin Townsend <robin@robin.town>
* Use mockResolvedValue instead of mockReturnValue for async mock
Signed-off-by: Robin Townsend <robin@robin.town>
* Actually mock redacted messages correctly
Signed-off-by: Robin Townsend <robin@robin.town>
* Ensure that panel is updated before assertions are made
Signed-off-by: Robin Townsend <robin@robin.town>
* Move calls to update out of act
They don't need to be there.
Signed-off-by: Robin Townsend <robin@robin.town>
Fix https://github.com/vector-im/element-web/issues/21262
Optimizations:
1. Don't update the `style` (positioning) of hidden tooltips
1. Don't add DOM elements to the page for hidden tooltips
> ## Performance problems broken down
>
>
> ### Hidden tooltips rendering on `scroll`
>
> You can see that the Tooltip render is attached to the `scroll` event at [`src/components/views/elements/Tooltip.tsx#L78-L81`](31f0a37ca2/src/components/views/elements/Tooltip.tsx (L78-L81))
>
> The rendering calls [`src/components/views/elements/Tooltip.tsx#L101` -> `updatePosition`](36adba101c/src/components/views/elements/Tooltip.tsx (L101)) which ends up as an expensive "Recalculate Style" because it uses [`Element.getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect). This happens many many times within a single `scroll` event. Probably once for each tooltip within the room list **even though no tooltips are event visible as I scroll**. I can see that we're just updating the `style` attribute for a bunch of `.mx_Tooltip_invisible` elements at the end of the document.
>
> Each one of the purple spans below the `scroll` span ends up as a call to `updatePosition`. And a `scroll` event takes 35ms to 60ms to complete which is way over the 16.6ms 60 FPS budget (on a powerful desktop PC), granted these times are with the performance profiling running. This is without the Passbolt extension explained below.
>
> And the room list contains about 141 rooms (`document.querySelectorAll('.mx_RoomTile').length`):
>
> ![](https://user-images.githubusercontent.com/558581/156273551-e744d3d6-93c6-4b07-bb12-6aad361f96a2.png)
>
>
>
> ### Passbolt Chrome browser extension exacerbates the problem
>
> In order to login to Passbolt, it requires a browser extension which defaults to mucking up all pages:
>
> <img src="https://user-images.githubusercontent.com/558581/156275644-bc26b1f5-5d99-4eae-b74b-c2028f2f1baf.png" width="300">
>
>
> The extension source seems to be available: https://github.com/passbolt/passbolt_browser_extension
>
> The Passbolt Chrome extension has a `MutationObserver` listening to all attribute and element changes to the whole `<body>` of the `document` so it can `findAndSetAuthenticationFields` (find form elements and autofill).
>
>
> [`passbolt/passbolt_styleguide` -> `src/react-web-integration/lib/InForm/InFormManager.js#L143`](1c5eddc910/src/react-web-integration/lib/InForm/InFormManager.js (L143))
> ```js
> this.mutationObserver.observe(document.body, { attributes: true, childList: true, subtree: true });
> ```
>
> This causes a bunch of `Forced reflow` because the Tooltip `updatePosition` is mutating the element `style` attribute and Passbolt `MutationObserver` callbacks are querying the whole DOM looking for form elements all in the same frame.
>
> Under the `scroll` event, all of the little spans are the `MutationObserver` -> `findAndSetAuthenticationFields`. With the Passbolt extension, scrolling is verrrrry crunchy and bad.
>
> ![](https://user-images.githubusercontent.com/558581/156144998-8cf7686f-3c7b-42f8-8d81-ff780bae0ab5.png)
>
>
> #### Workaround
>
> Instead of running Passbolt on all sites, we can enable the extension to only run on the domain for Passbolt instance itself. I'm guessing the Passbolt extension also does autofill stuff on sites but I always login manually to the Passbolt instance so this solution works for me �
>
> **Extensions** -> **Passbolt** -> **Details** -> Change **Site access** to `On specific sites` -> Enter in your Passbolt instance `https://passbolt.example.com/`
>
> ![](https://user-images.githubusercontent.com/558581/156275630-a53ef6a1-c058-4ac9-aa08-ae50b90e72c9.png)
>
> *-- https://github.com/vector-im/element-web/issues/21262*
* Add support for overriding strings in the app
This is to support a case where certain details of the app need to be slightly different and don't necessarily warrant a complete fork.
Intended for language-controlled deployments, operators can specify a JSON file with their custom translations that override the in-app/community-supplied ones.
* Fix import grouping
* Add a language handler test
* Appease the linter
* Add comment for why a weird class exists
* Add support for redirecting to external pages after logout
This is primarily useful for deployments where the account is managed and needs to be logged out in other places too, like an SSO system.
See docs for more information.
* Add e2e test and fix Windows instructions
* Fix performance gathering stats
* use logger
* Fix another freeze on room switch
This switches permalinks to use the batch state update event and
removes the incremental updates, as commented. We now spend, on my
profiling, about 450ms in setOutOfBandMembers itself and another
120ms in permalinks.
Fixes https://github.com/vector-im/element-web/issues/21127
* Just bind to the currentstate state updates
* Fix edge case in context menu chevron positioning
Signed-off-by: Robin Townsend <robin@robin.town>
* Expand context menu positioning regression tests
Signed-off-by: Robin Townsend <robin@robin.town>
* Try harder to keep context menus inside the window
Signed-off-by: Robin Townsend <robin@robin.town>
* Use UIStore for window dimensions
Signed-off-by: Robin Townsend <robin@robin.town>
* Test ContextMenu positioning
Signed-off-by: Robin Townsend <robin@robin.town>
* Fix freeze on room switch
updateServerCandidates was called on every room member event and
not throttled.
Fixes https://github.com/vector-im/element-web/issues/21127
* Move import
* Disable throttling in tests
* Types
Co-authored-by: Travis Ralston <travisr@matrix.org>
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Don't pillify code blocks
Signed-off-by: Robin Townsend <robin@robin.town>
* Test that pills do not appear in code blocks
Signed-off-by: Robin Townsend <robin@robin.town>
* Use snapshot instead for test
Signed-off-by: Robin Townsend <robin@robin.town>
* react-focus-lock to 2.5.1
Signed-off-by: Kerry Archibald <kerrya@element.io>
* use enzyme in ASSD test so focus lock finds active element
Signed-off-by: Kerry Archibald <kerrya@element.io>
* findById and flushPromises to test utils
Signed-off-by: Kerry Archibald <kerrya@element.io>
* Fix virtual / native room mapping on call transfers
By just sending them through the same code path as regular calls.
Also re-do the tests & add a test for transfer specifically.
* Optional arg
* Types
* Add an end-to-end test for stickers
* More logs on login
* Wait for spinners to go away
* Factor out spinner waiting as it seems useful
* Move stickers to the end
* More waiting
* When all else fails... add sleeps
* Waiting for the server picker to appear seems to work..?
* Typos
Co-authored-by: J. Ryan Stinnett <jryans@gmail.com>
* remove commented code from registration usecase
Co-authored-by: J. Ryan Stinnett <jryans@gmail.com>
* Use the shared secret registration API directly
rather than invoking the synapse module to do it. It's probably
a bit simpler, if anything, and allows for synapse to be run in
a separate container (or rather, avoids the javascript having to have
a copy of synapse source & server config).
* Make registration secret required
Update commander (8 major versions!) to get requiredOption
* Wrong options object :/
* unit test main paths in UserInfo component
Signed-off-by: Kerry Archibald <kerrya@element.io>
* one more test case
Signed-off-by: Kerry Archibald <kerrya@element.io>
* remove BasicUserInfo export
Signed-off-by: Kerry Archibald <kerrya@element.io>