mirror of
https://github.com/SchildiChat/element-web.git
synced 2024-10-01 01:26:12 -04:00
* Enable URL tooltips on hover for Element Desktop ([\#22286](https://github.com/vector-im/element-web/pull/22286)). Fixes undefined/element-web#6532.
* Hide screenshare button in video rooms on Desktop ([\#9045](https://github.com/matrix-org/matrix-react-sdk/pull/9045)). * Add a developer command to reset Megolm and Olm sessions ([\#9044](https://github.com/matrix-org/matrix-react-sdk/pull/9044)). * add spaces to TileErrorBoundary ([\#9012](https://github.com/matrix-org/matrix-react-sdk/pull/9012)). Contributed by @HarHarLinks. * Location sharing - add localised strings to map ([\#9025](https://github.com/matrix-org/matrix-react-sdk/pull/9025)). Fixes #21443. Contributed by @kerryarchibald. * Added trim to ignore whitespaces in email check ([\#9027](https://github.com/matrix-org/matrix-react-sdk/pull/9027)). Contributed by @ankur12-1610. * Improve _GenericEventListSummary.scss ([\#9005](https://github.com/matrix-org/matrix-react-sdk/pull/9005)). Contributed by @luixxiul. * Live location share - tiles without tile server (PSG-591) ([\#8962](https://github.com/matrix-org/matrix-react-sdk/pull/8962)). Contributed by @kerryarchibald. * Add option to display tooltip on link hover ([\#8394](https://github.com/matrix-org/matrix-react-sdk/pull/8394)). Fixes #21907. * Support a module API surface for custom functionality ([\#8246](https://github.com/matrix-org/matrix-react-sdk/pull/8246)). * Adjust encryption copy when creating a video room ([\#8989](https://github.com/matrix-org/matrix-react-sdk/pull/8989)). Fixes #22737. * Add bidirectonal isolation for pills ([\#8985](https://github.com/matrix-org/matrix-react-sdk/pull/8985)). Contributed by @sha-265. * Delabs `Show current avatar and name for users in message history` ([\#8764](https://github.com/matrix-org/matrix-react-sdk/pull/8764)). Fixes #22336. * Live location share - open latest location in map site ([\#8981](https://github.com/matrix-org/matrix-react-sdk/pull/8981)). Contributed by @kerryarchibald. * Improve LinkPreviewWidget ([\#8881](https://github.com/matrix-org/matrix-react-sdk/pull/8881)). Fixes #22634. Contributed by @luixxiul. * Render HTML topics in rooms on space home ([\#8939](https://github.com/matrix-org/matrix-react-sdk/pull/8939)). * Hide timestamp on event tiles being edited on every layout ([\#8956](https://github.com/matrix-org/matrix-react-sdk/pull/8956)). Contributed by @luixxiul. * Introduce new copy icon ([\#8942](https://github.com/matrix-org/matrix-react-sdk/pull/8942)). * Allow finding group DMs by members in spotlight ([\#8922](https://github.com/matrix-org/matrix-react-sdk/pull/8922)). Fixes #22564. Contributed by @justjanne. * Live location share - explicitly stop beacons replaced beacons ([\#8933](https://github.com/matrix-org/matrix-react-sdk/pull/8933)). Contributed by @kerryarchibald. * Remove unpin from widget kebab menu ([\#8924](https://github.com/matrix-org/matrix-react-sdk/pull/8924)). * Live location share - redact related locations on beacon redaction ([\#8926](https://github.com/matrix-org/matrix-react-sdk/pull/8926)). Contributed by @kerryarchibald. * Live location share - disallow message pinning ([\#8928](https://github.com/matrix-org/matrix-react-sdk/pull/8928)). Contributed by @kerryarchibald. * Remove the ability to hide yourself in video rooms ([\#22806](https://github.com/vector-im/element-web/pull/22806)). Fixes #22805. * Unbreak in-app permalink tooltips ([\#9100](https://github.com/matrix-org/matrix-react-sdk/pull/9100)). * Add space for the stroke on message editor on IRC layout ([\#9030](https://github.com/matrix-org/matrix-react-sdk/pull/9030)). Fixes #22785. Contributed by @luixxiul. * Fix pinned messages not re-linkifying on edit ([\#9042](https://github.com/matrix-org/matrix-react-sdk/pull/9042)). Fixes #22726. * Don't unnecessarily persist the host signup dialog ([\#9043](https://github.com/matrix-org/matrix-react-sdk/pull/9043)). Fixes #22778. * Fix URL previews causing messages to become unrenderable ([\#9028](https://github.com/matrix-org/matrix-react-sdk/pull/9028)). Fixes #22766. * Fix event list summaries including invalid events ([\#9041](https://github.com/matrix-org/matrix-react-sdk/pull/9041)). Fixes #22790. * Correct accessibility labels for unread rooms in spotlight ([\#9003](https://github.com/matrix-org/matrix-react-sdk/pull/9003)). Contributed by @justjanne. * Enable search strings highlight on bubble layout ([\#9032](https://github.com/matrix-org/matrix-react-sdk/pull/9032)). Fixes #22786. Contributed by @luixxiul. * Unbreak URL preview for formatted links with tooltips ([\#9022](https://github.com/matrix-org/matrix-react-sdk/pull/9022)). Fixes #22764. * Re-add margin to tiles based on EventTileBubble ([\#9015](https://github.com/matrix-org/matrix-react-sdk/pull/9015)). Fixes #22772. Contributed by @luixxiul. * Fix Shortcut prompt for Search showing in minimized Roomlist ([\#9014](https://github.com/matrix-org/matrix-react-sdk/pull/9014)). Fixes #22739. Contributed by @justjanne. * Fix avatar position on event info line for hidden events on a thread ([\#9019](https://github.com/matrix-org/matrix-react-sdk/pull/9019)). Fixes #22777. Contributed by @luixxiul. * Fix lost padding of event tile info line ([\#9009](https://github.com/matrix-org/matrix-react-sdk/pull/9009)). Fixes #22754 and #22759. Contributed by @luixxiul. * Align verification bubble with normal event tiles on IRC layout ([\#9001](https://github.com/matrix-org/matrix-react-sdk/pull/9001)). Fixes #22758. Contributed by @luixxiul. * Ensure timestamp on generic event list summary is not hidden from TimelineCard ([\#9000](https://github.com/matrix-org/matrix-react-sdk/pull/9000)). Fixes #22755. Contributed by @luixxiul. * Fix headings margin on security user settings tab ([\#8826](https://github.com/matrix-org/matrix-react-sdk/pull/8826)). Contributed by @luixxiul. * Fix timestamp position on file panel ([\#8976](https://github.com/matrix-org/matrix-react-sdk/pull/8976)). Fixes #22718. Contributed by @luixxiul. * Stop using :not() pseudo class for mx_GenericEventListSummary ([\#8944](https://github.com/matrix-org/matrix-react-sdk/pull/8944)). Fixes #22602. Contributed by @luixxiul. * Don't show the same user twice in Spotlight ([\#8978](https://github.com/matrix-org/matrix-react-sdk/pull/8978)). Fixes #22697. * Align the right edge of expand / collapse link buttons of generic event list summary in bubble layout with a variable ([\#8992](https://github.com/matrix-org/matrix-react-sdk/pull/8992)). Fixes #22743. Contributed by @luixxiul. * Display own avatars on search results panel in bubble layout ([\#8990](https://github.com/matrix-org/matrix-react-sdk/pull/8990)). Contributed by @luixxiul. * Fix text flow of thread summary content on threads list ([\#8991](https://github.com/matrix-org/matrix-react-sdk/pull/8991)). Fixes #22738. Contributed by @luixxiul. * Fix the size of the clickable area of images ([\#8987](https://github.com/matrix-org/matrix-react-sdk/pull/8987)). Fixes #22282. * Fix font size of MessageTimestamp on TimelineCard ([\#8950](https://github.com/matrix-org/matrix-react-sdk/pull/8950)). Contributed by @luixxiul. * Improve security room settings tab style rules ([\#8844](https://github.com/matrix-org/matrix-react-sdk/pull/8844)). Fixes #22575. Contributed by @luixxiul. * Align E2E icon and avatar of info tile in compact modern layout ([\#8965](https://github.com/matrix-org/matrix-react-sdk/pull/8965)). Fixes #22652. Contributed by @luixxiul. * Fix clickable area of general event list summary toggle ([\#8979](https://github.com/matrix-org/matrix-react-sdk/pull/8979)). Fixes #22722. Contributed by @luixxiul. * Fix resizing room topic ([\#8966](https://github.com/matrix-org/matrix-react-sdk/pull/8966)). Fixes #22689. * Dismiss the search dialogue when starting a DM ([\#8967](https://github.com/matrix-org/matrix-react-sdk/pull/8967)). Fixes #22700. * Fix "greyed out" text style inconsistency on search result panel ([\#8974](https://github.com/matrix-org/matrix-react-sdk/pull/8974)). Contributed by @luixxiul. * Add top padding to EventTilePreview loader ([\#8977](https://github.com/matrix-org/matrix-react-sdk/pull/8977)). Fixes #22719. Contributed by @luixxiul. * Fix read receipts group position on TimelineCard in compact modern/group layout ([\#8971](https://github.com/matrix-org/matrix-react-sdk/pull/8971)). Fixes #22715. Contributed by @luixxiul. * Fix calls on homeservers without the unstable thirdparty endpoints. ([\#8931](https://github.com/matrix-org/matrix-react-sdk/pull/8931)). Fixes #21680. Contributed by @deepbluev7. * Enable ReplyChain text to be expanded on IRC layout ([\#8959](https://github.com/matrix-org/matrix-react-sdk/pull/8959)). Fixes #22709. Contributed by @luixxiul. * Fix hidden timestamp on message edit history dialog ([\#8955](https://github.com/matrix-org/matrix-react-sdk/pull/8955)). Fixes #22701. Contributed by @luixxiul. * Enable ReplyChain text to be expanded on bubble layout ([\#8958](https://github.com/matrix-org/matrix-react-sdk/pull/8958)). Fixes #22709. Contributed by @luixxiul. * Fix expand/collapse state wrong in metaspaces ([\#8952](https://github.com/matrix-org/matrix-react-sdk/pull/8952)). Fixes #22632. * Location (live) share replies now provide a fallback content ([\#8949](https://github.com/matrix-org/matrix-react-sdk/pull/8949)). * Fix space settings not opening for script-created spaces ([\#8957](https://github.com/matrix-org/matrix-react-sdk/pull/8957)). Fixes #22703. * Respect `filename` field on `m.file` events ([\#8951](https://github.com/matrix-org/matrix-react-sdk/pull/8951)). * Fix PlatformSettingsHandler always returning true due to returning a Promise ([\#8954](https://github.com/matrix-org/matrix-react-sdk/pull/8954)). Fixes #22616. * Improve high-contrast support for spotlight ([\#8948](https://github.com/matrix-org/matrix-react-sdk/pull/8948)). Fixes #22481. Contributed by @justjanne. * Fix wrong assertions that all media events have a mimetype ([\#8946](https://github.com/matrix-org/matrix-react-sdk/pull/8946)). Fixes matrix-org/element-web-rageshakes#13727. * Make invite dialogue fixed height ([\#8934](https://github.com/matrix-org/matrix-react-sdk/pull/8934)). Fixes #22659. * Fix all megolm error reported as unknown ([\#8916](https://github.com/matrix-org/matrix-react-sdk/pull/8916)). * Remove line-height declarations from _ReplyTile.scss ([\#8932](https://github.com/matrix-org/matrix-react-sdk/pull/8932)). Fixes #22687. Contributed by @luixxiul. * Reduce video rooms log spam ([\#8913](https://github.com/matrix-org/matrix-react-sdk/pull/8913)). * Correct new search input’s rounded corners ([\#8921](https://github.com/matrix-org/matrix-react-sdk/pull/8921)). Fixes #22576. Contributed by @justjanne. * Align unread notification dot on threads list in compact modern=group layout ([\#8911](https://github.com/matrix-org/matrix-react-sdk/pull/8911)). Fixes #22677. Contributed by @luixxiul. -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEE6Vt2megLaKnq2aGaK6qbhVK9kEcFAmLgDKYRHHJlbGVhc2Vz QHJpb3QuaW0ACgkQK6qbhVK9kEf4URAAkZTZD9PJg6kNrM4XSNl4DeWEgb3v/C8q FNseEMC8GZGy1q+m8dYoK7WXvtDHw1j6worUIaLxpN7dlkjJ0L7fDlS4lW4zTa91 /kX2+te7ycTha6xLtmO4/TUJ0Ztg68HrGj/+8vMh/PuK3BeeOIU5OoZFH5eBVc3s DD0yMOheOYIQBYPnX/qA2/xvSvdsCWJZ1vdzOPl1/n1paT3KhyIO5oy/kywmeA/g Kcqnc1t5B6Bj38mEzyeBBX4qIp+N/oGRShbfCGzRwJsc0kREZzrOY6WizH0cT5i/ 8FrVygJZxhuMOHPvaCLmvUklRScYan9+iwk09RJIOzq2WVWF876gHJaxesGY7KBG lLshHJgm+GXfLfCSc7uMVUwl5w8WBNeUY7sAwDLBzLRzcznmrZFRdsuWY3XngwLl Fw7vRPSBfvSYGf0xXGuQz4FdcNJe2HdNiAKTl26fu4RlLSv0QrR50wjayQNwTI9P 9szY6hzHDN6/m3eM6X+PWGt4owHnLM6UjSKuvDlOEgTczAb/+TGgqI+yrgvpvrEU F7whK1s4sJd/fRwAtleDt52z1k+uEYElEfp17TaBTryCOi5/MUdGZknQYvK+r2xP xbE7ZKKGHnBW25kRbeVvMYSPV64NTkq6kJakXhSmHazis9NUHIlKUJCDlWoc5Pcs z0pZlKjmqxE= =B3dW -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQJNBAABCAA3FiEEUMS2jJrglzPzHXqk10PFDIthmEwFAmLniD8ZHGNvZGV3b3Jr c0BzdXBlcmNhYmxlLm9ubAAKCRDXQ8UMi2GYTGN0D/9nnM0WWoLA2wQ+uYe/vfMn s47lxVtklc18PXv9SeToddzlODKIViH5JBeeLouetZ0eoy/exsyZIsFwixpvNJ6M r2cYc24KPart6FSheHVS3Pt1iUdP1VgbEkavpbg9WeSijcHEjVkn1iEJi2DwVuWg hykzrYmtV9eXIGUQzLUmxGPTT9iyMVdaINyPc77BOvbeGFNhqt/CH8fvf9IGr/3N aRPaUdztlf2uHjSmWjaQQ9Nsq4w2SbDGOwwSmM32lt+D0aoXTPp3kzlu0zLqW0Bw OVyHEt5JPQ9A1ipMgrsEI6skWpsOHUHpsRcrh5XUIrlWCcC7S/QsytAPmK+q+yGm CMTy0sRWyqob90K8IAe8Uuhjs10I3YZu7DRff9udzGIsYNWfrM1XwXB1PpbYvK67 nFwb5yTnbChcvlz6TUCGO1QUTyMAMb7jvcCW0KBNurj2wtndctvbbcMOEHDGsMfB C0c3Of8bohA1yAGagLYFfTQYQY3I6NtY96jBKyrv1AscuY+PVTML0STvmYH9VVFP j/MQpGJzccsJZGhlSDidA0gHm1Xh4xZXOsj7D0dfYhE6zNeiqD8JvqvacB5rKsq9 y2JXXnu+N4AgBXozhZv1SW5y3d33mXozR9oSwsH75ND48DCebMm4PHn0MfBRrWa4 jzBVlKU7OV3Qwz1Gv2EUgw== =q66i -----END PGP SIGNATURE----- Merge tag 'v1.11.1' into sc * Enable URL tooltips on hover for Element Desktop ([\#22286](https://github.com/vector-im/element-web/pull/22286)). Fixes undefined/element-web#6532. * Hide screenshare button in video rooms on Desktop ([\#9045](https://github.com/matrix-org/matrix-react-sdk/pull/9045)). * Add a developer command to reset Megolm and Olm sessions ([\#9044](https://github.com/matrix-org/matrix-react-sdk/pull/9044)). * add spaces to TileErrorBoundary ([\#9012](https://github.com/matrix-org/matrix-react-sdk/pull/9012)). Contributed by @HarHarLinks. * Location sharing - add localised strings to map ([\#9025](https://github.com/matrix-org/matrix-react-sdk/pull/9025)). Fixes #21443. Contributed by @kerryarchibald. * Added trim to ignore whitespaces in email check ([\#9027](https://github.com/matrix-org/matrix-react-sdk/pull/9027)). Contributed by @ankur12-1610. * Improve _GenericEventListSummary.scss ([\#9005](https://github.com/matrix-org/matrix-react-sdk/pull/9005)). Contributed by @luixxiul. * Live location share - tiles without tile server (PSG-591) ([\#8962](https://github.com/matrix-org/matrix-react-sdk/pull/8962)). Contributed by @kerryarchibald. * Add option to display tooltip on link hover ([\#8394](https://github.com/matrix-org/matrix-react-sdk/pull/8394)). Fixes #21907. * Support a module API surface for custom functionality ([\#8246](https://github.com/matrix-org/matrix-react-sdk/pull/8246)). * Adjust encryption copy when creating a video room ([\#8989](https://github.com/matrix-org/matrix-react-sdk/pull/8989)). Fixes #22737. * Add bidirectonal isolation for pills ([\#8985](https://github.com/matrix-org/matrix-react-sdk/pull/8985)). Contributed by @sha-265. * Delabs `Show current avatar and name for users in message history` ([\#8764](https://github.com/matrix-org/matrix-react-sdk/pull/8764)). Fixes #22336. * Live location share - open latest location in map site ([\#8981](https://github.com/matrix-org/matrix-react-sdk/pull/8981)). Contributed by @kerryarchibald. * Improve LinkPreviewWidget ([\#8881](https://github.com/matrix-org/matrix-react-sdk/pull/8881)). Fixes #22634. Contributed by @luixxiul. * Render HTML topics in rooms on space home ([\#8939](https://github.com/matrix-org/matrix-react-sdk/pull/8939)). * Hide timestamp on event tiles being edited on every layout ([\#8956](https://github.com/matrix-org/matrix-react-sdk/pull/8956)). Contributed by @luixxiul. * Introduce new copy icon ([\#8942](https://github.com/matrix-org/matrix-react-sdk/pull/8942)). * Allow finding group DMs by members in spotlight ([\#8922](https://github.com/matrix-org/matrix-react-sdk/pull/8922)). Fixes #22564. Contributed by @justjanne. * Live location share - explicitly stop beacons replaced beacons ([\#8933](https://github.com/matrix-org/matrix-react-sdk/pull/8933)). Contributed by @kerryarchibald. * Remove unpin from widget kebab menu ([\#8924](https://github.com/matrix-org/matrix-react-sdk/pull/8924)). * Live location share - redact related locations on beacon redaction ([\#8926](https://github.com/matrix-org/matrix-react-sdk/pull/8926)). Contributed by @kerryarchibald. * Live location share - disallow message pinning ([\#8928](https://github.com/matrix-org/matrix-react-sdk/pull/8928)). Contributed by @kerryarchibald. * Remove the ability to hide yourself in video rooms ([\#22806](https://github.com/vector-im/element-web/pull/22806)). Fixes #22805. * Unbreak in-app permalink tooltips ([\#9100](https://github.com/matrix-org/matrix-react-sdk/pull/9100)). * Add space for the stroke on message editor on IRC layout ([\#9030](https://github.com/matrix-org/matrix-react-sdk/pull/9030)). Fixes #22785. Contributed by @luixxiul. * Fix pinned messages not re-linkifying on edit ([\#9042](https://github.com/matrix-org/matrix-react-sdk/pull/9042)). Fixes #22726. * Don't unnecessarily persist the host signup dialog ([\#9043](https://github.com/matrix-org/matrix-react-sdk/pull/9043)). Fixes #22778. * Fix URL previews causing messages to become unrenderable ([\#9028](https://github.com/matrix-org/matrix-react-sdk/pull/9028)). Fixes #22766. * Fix event list summaries including invalid events ([\#9041](https://github.com/matrix-org/matrix-react-sdk/pull/9041)). Fixes #22790. * Correct accessibility labels for unread rooms in spotlight ([\#9003](https://github.com/matrix-org/matrix-react-sdk/pull/9003)). Contributed by @justjanne. * Enable search strings highlight on bubble layout ([\#9032](https://github.com/matrix-org/matrix-react-sdk/pull/9032)). Fixes #22786. Contributed by @luixxiul. * Unbreak URL preview for formatted links with tooltips ([\#9022](https://github.com/matrix-org/matrix-react-sdk/pull/9022)). Fixes #22764. * Re-add margin to tiles based on EventTileBubble ([\#9015](https://github.com/matrix-org/matrix-react-sdk/pull/9015)). Fixes #22772. Contributed by @luixxiul. * Fix Shortcut prompt for Search showing in minimized Roomlist ([\#9014](https://github.com/matrix-org/matrix-react-sdk/pull/9014)). Fixes #22739. Contributed by @justjanne. * Fix avatar position on event info line for hidden events on a thread ([\#9019](https://github.com/matrix-org/matrix-react-sdk/pull/9019)). Fixes #22777. Contributed by @luixxiul. * Fix lost padding of event tile info line ([\#9009](https://github.com/matrix-org/matrix-react-sdk/pull/9009)). Fixes #22754 and #22759. Contributed by @luixxiul. * Align verification bubble with normal event tiles on IRC layout ([\#9001](https://github.com/matrix-org/matrix-react-sdk/pull/9001)). Fixes #22758. Contributed by @luixxiul. * Ensure timestamp on generic event list summary is not hidden from TimelineCard ([\#9000](https://github.com/matrix-org/matrix-react-sdk/pull/9000)). Fixes #22755. Contributed by @luixxiul. * Fix headings margin on security user settings tab ([\#8826](https://github.com/matrix-org/matrix-react-sdk/pull/8826)). Contributed by @luixxiul. * Fix timestamp position on file panel ([\#8976](https://github.com/matrix-org/matrix-react-sdk/pull/8976)). Fixes #22718. Contributed by @luixxiul. * Stop using :not() pseudo class for mx_GenericEventListSummary ([\#8944](https://github.com/matrix-org/matrix-react-sdk/pull/8944)). Fixes #22602. Contributed by @luixxiul. * Don't show the same user twice in Spotlight ([\#8978](https://github.com/matrix-org/matrix-react-sdk/pull/8978)). Fixes #22697. * Align the right edge of expand / collapse link buttons of generic event list summary in bubble layout with a variable ([\#8992](https://github.com/matrix-org/matrix-react-sdk/pull/8992)). Fixes #22743. Contributed by @luixxiul. * Display own avatars on search results panel in bubble layout ([\#8990](https://github.com/matrix-org/matrix-react-sdk/pull/8990)). Contributed by @luixxiul. * Fix text flow of thread summary content on threads list ([\#8991](https://github.com/matrix-org/matrix-react-sdk/pull/8991)). Fixes #22738. Contributed by @luixxiul. * Fix the size of the clickable area of images ([\#8987](https://github.com/matrix-org/matrix-react-sdk/pull/8987)). Fixes #22282. * Fix font size of MessageTimestamp on TimelineCard ([\#8950](https://github.com/matrix-org/matrix-react-sdk/pull/8950)). Contributed by @luixxiul. * Improve security room settings tab style rules ([\#8844](https://github.com/matrix-org/matrix-react-sdk/pull/8844)). Fixes #22575. Contributed by @luixxiul. * Align E2E icon and avatar of info tile in compact modern layout ([\#8965](https://github.com/matrix-org/matrix-react-sdk/pull/8965)). Fixes #22652. Contributed by @luixxiul. * Fix clickable area of general event list summary toggle ([\#8979](https://github.com/matrix-org/matrix-react-sdk/pull/8979)). Fixes #22722. Contributed by @luixxiul. * Fix resizing room topic ([\#8966](https://github.com/matrix-org/matrix-react-sdk/pull/8966)). Fixes #22689. * Dismiss the search dialogue when starting a DM ([\#8967](https://github.com/matrix-org/matrix-react-sdk/pull/8967)). Fixes #22700. * Fix "greyed out" text style inconsistency on search result panel ([\#8974](https://github.com/matrix-org/matrix-react-sdk/pull/8974)). Contributed by @luixxiul. * Add top padding to EventTilePreview loader ([\#8977](https://github.com/matrix-org/matrix-react-sdk/pull/8977)). Fixes #22719. Contributed by @luixxiul. * Fix read receipts group position on TimelineCard in compact modern/group layout ([\#8971](https://github.com/matrix-org/matrix-react-sdk/pull/8971)). Fixes #22715. Contributed by @luixxiul. * Fix calls on homeservers without the unstable thirdparty endpoints. ([\#8931](https://github.com/matrix-org/matrix-react-sdk/pull/8931)). Fixes #21680. Contributed by @deepbluev7. * Enable ReplyChain text to be expanded on IRC layout ([\#8959](https://github.com/matrix-org/matrix-react-sdk/pull/8959)). Fixes #22709. Contributed by @luixxiul. * Fix hidden timestamp on message edit history dialog ([\#8955](https://github.com/matrix-org/matrix-react-sdk/pull/8955)). Fixes #22701. Contributed by @luixxiul. * Enable ReplyChain text to be expanded on bubble layout ([\#8958](https://github.com/matrix-org/matrix-react-sdk/pull/8958)). Fixes #22709. Contributed by @luixxiul. * Fix expand/collapse state wrong in metaspaces ([\#8952](https://github.com/matrix-org/matrix-react-sdk/pull/8952)). Fixes #22632. * Location (live) share replies now provide a fallback content ([\#8949](https://github.com/matrix-org/matrix-react-sdk/pull/8949)). * Fix space settings not opening for script-created spaces ([\#8957](https://github.com/matrix-org/matrix-react-sdk/pull/8957)). Fixes #22703. * Respect `filename` field on `m.file` events ([\#8951](https://github.com/matrix-org/matrix-react-sdk/pull/8951)). * Fix PlatformSettingsHandler always returning true due to returning a Promise ([\#8954](https://github.com/matrix-org/matrix-react-sdk/pull/8954)). Fixes #22616. * Improve high-contrast support for spotlight ([\#8948](https://github.com/matrix-org/matrix-react-sdk/pull/8948)). Fixes #22481. Contributed by @justjanne. * Fix wrong assertions that all media events have a mimetype ([\#8946](https://github.com/matrix-org/matrix-react-sdk/pull/8946)). Fixes matrix-org/element-web-rageshakes#13727. * Make invite dialogue fixed height ([\#8934](https://github.com/matrix-org/matrix-react-sdk/pull/8934)). Fixes #22659. * Fix all megolm error reported as unknown ([\#8916](https://github.com/matrix-org/matrix-react-sdk/pull/8916)). * Remove line-height declarations from _ReplyTile.scss ([\#8932](https://github.com/matrix-org/matrix-react-sdk/pull/8932)). Fixes #22687. Contributed by @luixxiul. * Reduce video rooms log spam ([\#8913](https://github.com/matrix-org/matrix-react-sdk/pull/8913)). * Correct new search input’s rounded corners ([\#8921](https://github.com/matrix-org/matrix-react-sdk/pull/8921)). Fixes #22576. Contributed by @justjanne. * Align unread notification dot on threads list in compact modern=group layout ([\#8911](https://github.com/matrix-org/matrix-react-sdk/pull/8911)). Fixes #22677. Contributed by @luixxiul.
This commit is contained in:
commit
66557787a7
@ -1,3 +1,5 @@
|
|||||||
src/vector/modernizr.js
|
src/vector/modernizr.js
|
||||||
# Legacy skinning file that some people might still have
|
# Legacy skinning file that some people might still have
|
||||||
src/component-index.js
|
src/component-index.js
|
||||||
|
# Auto-generated file
|
||||||
|
src/modules.ts
|
||||||
|
@ -18,7 +18,7 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
overrides: [{
|
overrides: [{
|
||||||
files: ["src/**/*.{ts,tsx}"],
|
files: ["src/**/*.{ts,tsx}", "module_system/**/*.{ts,tsx}"],
|
||||||
extends: [
|
extends: [
|
||||||
"plugin:matrix-org/typescript",
|
"plugin:matrix-org/typescript",
|
||||||
"plugin:matrix-org/react",
|
"plugin:matrix-org/react",
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -25,3 +25,6 @@ electron/pub
|
|||||||
.vscode/
|
.vscode/
|
||||||
.env
|
.env
|
||||||
/coverage
|
/coverage
|
||||||
|
# Auto-generated file
|
||||||
|
/src/modules.ts
|
||||||
|
/build_config.yaml
|
||||||
|
80
CHANGELOG.md
80
CHANGELOG.md
@ -1,3 +1,83 @@
|
|||||||
|
Changes in [1.11.1](https://github.com/vector-im/element-web/releases/tag/v1.11.1) (2022-07-26)
|
||||||
|
===============================================================================================
|
||||||
|
|
||||||
|
## ✨ Features
|
||||||
|
* Enable URL tooltips on hover for Element Desktop ([\#22286](https://github.com/vector-im/element-web/pull/22286)). Fixes undefined/element-web#6532.
|
||||||
|
* Hide screenshare button in video rooms on Desktop ([\#9045](https://github.com/matrix-org/matrix-react-sdk/pull/9045)).
|
||||||
|
* Add a developer command to reset Megolm and Olm sessions ([\#9044](https://github.com/matrix-org/matrix-react-sdk/pull/9044)).
|
||||||
|
* add spaces to TileErrorBoundary ([\#9012](https://github.com/matrix-org/matrix-react-sdk/pull/9012)). Contributed by @HarHarLinks.
|
||||||
|
* Location sharing - add localised strings to map ([\#9025](https://github.com/matrix-org/matrix-react-sdk/pull/9025)). Fixes #21443. Contributed by @kerryarchibald.
|
||||||
|
* Added trim to ignore whitespaces in email check ([\#9027](https://github.com/matrix-org/matrix-react-sdk/pull/9027)). Contributed by @ankur12-1610.
|
||||||
|
* Improve _GenericEventListSummary.scss ([\#9005](https://github.com/matrix-org/matrix-react-sdk/pull/9005)). Contributed by @luixxiul.
|
||||||
|
* Live location share - tiles without tile server (PSG-591) ([\#8962](https://github.com/matrix-org/matrix-react-sdk/pull/8962)). Contributed by @kerryarchibald.
|
||||||
|
* Add option to display tooltip on link hover ([\#8394](https://github.com/matrix-org/matrix-react-sdk/pull/8394)). Fixes #21907.
|
||||||
|
* Support a module API surface for custom functionality ([\#8246](https://github.com/matrix-org/matrix-react-sdk/pull/8246)).
|
||||||
|
* Adjust encryption copy when creating a video room ([\#8989](https://github.com/matrix-org/matrix-react-sdk/pull/8989)). Fixes #22737.
|
||||||
|
* Add bidirectonal isolation for pills ([\#8985](https://github.com/matrix-org/matrix-react-sdk/pull/8985)). Contributed by @sha-265.
|
||||||
|
* Delabs `Show current avatar and name for users in message history` ([\#8764](https://github.com/matrix-org/matrix-react-sdk/pull/8764)). Fixes #22336.
|
||||||
|
* Live location share - open latest location in map site ([\#8981](https://github.com/matrix-org/matrix-react-sdk/pull/8981)). Contributed by @kerryarchibald.
|
||||||
|
* Improve LinkPreviewWidget ([\#8881](https://github.com/matrix-org/matrix-react-sdk/pull/8881)). Fixes #22634. Contributed by @luixxiul.
|
||||||
|
* Render HTML topics in rooms on space home ([\#8939](https://github.com/matrix-org/matrix-react-sdk/pull/8939)).
|
||||||
|
* Hide timestamp on event tiles being edited on every layout ([\#8956](https://github.com/matrix-org/matrix-react-sdk/pull/8956)). Contributed by @luixxiul.
|
||||||
|
* Introduce new copy icon ([\#8942](https://github.com/matrix-org/matrix-react-sdk/pull/8942)).
|
||||||
|
* Allow finding group DMs by members in spotlight ([\#8922](https://github.com/matrix-org/matrix-react-sdk/pull/8922)). Fixes #22564. Contributed by @justjanne.
|
||||||
|
* Live location share - explicitly stop beacons replaced beacons ([\#8933](https://github.com/matrix-org/matrix-react-sdk/pull/8933)). Contributed by @kerryarchibald.
|
||||||
|
* Remove unpin from widget kebab menu ([\#8924](https://github.com/matrix-org/matrix-react-sdk/pull/8924)).
|
||||||
|
* Live location share - redact related locations on beacon redaction ([\#8926](https://github.com/matrix-org/matrix-react-sdk/pull/8926)). Contributed by @kerryarchibald.
|
||||||
|
* Live location share - disallow message pinning ([\#8928](https://github.com/matrix-org/matrix-react-sdk/pull/8928)). Contributed by @kerryarchibald.
|
||||||
|
|
||||||
|
## 🐛 Bug Fixes
|
||||||
|
* Remove the ability to hide yourself in video rooms ([\#22806](https://github.com/vector-im/element-web/pull/22806)). Fixes #22805.
|
||||||
|
* Unbreak in-app permalink tooltips ([\#9100](https://github.com/matrix-org/matrix-react-sdk/pull/9100)).
|
||||||
|
* Add space for the stroke on message editor on IRC layout ([\#9030](https://github.com/matrix-org/matrix-react-sdk/pull/9030)). Fixes #22785. Contributed by @luixxiul.
|
||||||
|
* Fix pinned messages not re-linkifying on edit ([\#9042](https://github.com/matrix-org/matrix-react-sdk/pull/9042)). Fixes #22726.
|
||||||
|
* Don't unnecessarily persist the host signup dialog ([\#9043](https://github.com/matrix-org/matrix-react-sdk/pull/9043)). Fixes #22778.
|
||||||
|
* Fix URL previews causing messages to become unrenderable ([\#9028](https://github.com/matrix-org/matrix-react-sdk/pull/9028)). Fixes #22766.
|
||||||
|
* Fix event list summaries including invalid events ([\#9041](https://github.com/matrix-org/matrix-react-sdk/pull/9041)). Fixes #22790.
|
||||||
|
* Correct accessibility labels for unread rooms in spotlight ([\#9003](https://github.com/matrix-org/matrix-react-sdk/pull/9003)). Contributed by @justjanne.
|
||||||
|
* Enable search strings highlight on bubble layout ([\#9032](https://github.com/matrix-org/matrix-react-sdk/pull/9032)). Fixes #22786. Contributed by @luixxiul.
|
||||||
|
* Unbreak URL preview for formatted links with tooltips ([\#9022](https://github.com/matrix-org/matrix-react-sdk/pull/9022)). Fixes #22764.
|
||||||
|
* Re-add margin to tiles based on EventTileBubble ([\#9015](https://github.com/matrix-org/matrix-react-sdk/pull/9015)). Fixes #22772. Contributed by @luixxiul.
|
||||||
|
* Fix Shortcut prompt for Search showing in minimized Roomlist ([\#9014](https://github.com/matrix-org/matrix-react-sdk/pull/9014)). Fixes #22739. Contributed by @justjanne.
|
||||||
|
* Fix avatar position on event info line for hidden events on a thread ([\#9019](https://github.com/matrix-org/matrix-react-sdk/pull/9019)). Fixes #22777. Contributed by @luixxiul.
|
||||||
|
* Fix lost padding of event tile info line ([\#9009](https://github.com/matrix-org/matrix-react-sdk/pull/9009)). Fixes #22754 and #22759. Contributed by @luixxiul.
|
||||||
|
* Align verification bubble with normal event tiles on IRC layout ([\#9001](https://github.com/matrix-org/matrix-react-sdk/pull/9001)). Fixes #22758. Contributed by @luixxiul.
|
||||||
|
* Ensure timestamp on generic event list summary is not hidden from TimelineCard ([\#9000](https://github.com/matrix-org/matrix-react-sdk/pull/9000)). Fixes #22755. Contributed by @luixxiul.
|
||||||
|
* Fix headings margin on security user settings tab ([\#8826](https://github.com/matrix-org/matrix-react-sdk/pull/8826)). Contributed by @luixxiul.
|
||||||
|
* Fix timestamp position on file panel ([\#8976](https://github.com/matrix-org/matrix-react-sdk/pull/8976)). Fixes #22718. Contributed by @luixxiul.
|
||||||
|
* Stop using :not() pseudo class for mx_GenericEventListSummary ([\#8944](https://github.com/matrix-org/matrix-react-sdk/pull/8944)). Fixes #22602. Contributed by @luixxiul.
|
||||||
|
* Don't show the same user twice in Spotlight ([\#8978](https://github.com/matrix-org/matrix-react-sdk/pull/8978)). Fixes #22697.
|
||||||
|
* Align the right edge of expand / collapse link buttons of generic event list summary in bubble layout with a variable ([\#8992](https://github.com/matrix-org/matrix-react-sdk/pull/8992)). Fixes #22743. Contributed by @luixxiul.
|
||||||
|
* Display own avatars on search results panel in bubble layout ([\#8990](https://github.com/matrix-org/matrix-react-sdk/pull/8990)). Contributed by @luixxiul.
|
||||||
|
* Fix text flow of thread summary content on threads list ([\#8991](https://github.com/matrix-org/matrix-react-sdk/pull/8991)). Fixes #22738. Contributed by @luixxiul.
|
||||||
|
* Fix the size of the clickable area of images ([\#8987](https://github.com/matrix-org/matrix-react-sdk/pull/8987)). Fixes #22282.
|
||||||
|
* Fix font size of MessageTimestamp on TimelineCard ([\#8950](https://github.com/matrix-org/matrix-react-sdk/pull/8950)). Contributed by @luixxiul.
|
||||||
|
* Improve security room settings tab style rules ([\#8844](https://github.com/matrix-org/matrix-react-sdk/pull/8844)). Fixes #22575. Contributed by @luixxiul.
|
||||||
|
* Align E2E icon and avatar of info tile in compact modern layout ([\#8965](https://github.com/matrix-org/matrix-react-sdk/pull/8965)). Fixes #22652. Contributed by @luixxiul.
|
||||||
|
* Fix clickable area of general event list summary toggle ([\#8979](https://github.com/matrix-org/matrix-react-sdk/pull/8979)). Fixes #22722. Contributed by @luixxiul.
|
||||||
|
* Fix resizing room topic ([\#8966](https://github.com/matrix-org/matrix-react-sdk/pull/8966)). Fixes #22689.
|
||||||
|
* Dismiss the search dialogue when starting a DM ([\#8967](https://github.com/matrix-org/matrix-react-sdk/pull/8967)). Fixes #22700.
|
||||||
|
* Fix "greyed out" text style inconsistency on search result panel ([\#8974](https://github.com/matrix-org/matrix-react-sdk/pull/8974)). Contributed by @luixxiul.
|
||||||
|
* Add top padding to EventTilePreview loader ([\#8977](https://github.com/matrix-org/matrix-react-sdk/pull/8977)). Fixes #22719. Contributed by @luixxiul.
|
||||||
|
* Fix read receipts group position on TimelineCard in compact modern/group layout ([\#8971](https://github.com/matrix-org/matrix-react-sdk/pull/8971)). Fixes #22715. Contributed by @luixxiul.
|
||||||
|
* Fix calls on homeservers without the unstable thirdparty endpoints. ([\#8931](https://github.com/matrix-org/matrix-react-sdk/pull/8931)). Fixes #21680. Contributed by @deepbluev7.
|
||||||
|
* Enable ReplyChain text to be expanded on IRC layout ([\#8959](https://github.com/matrix-org/matrix-react-sdk/pull/8959)). Fixes #22709. Contributed by @luixxiul.
|
||||||
|
* Fix hidden timestamp on message edit history dialog ([\#8955](https://github.com/matrix-org/matrix-react-sdk/pull/8955)). Fixes #22701. Contributed by @luixxiul.
|
||||||
|
* Enable ReplyChain text to be expanded on bubble layout ([\#8958](https://github.com/matrix-org/matrix-react-sdk/pull/8958)). Fixes #22709. Contributed by @luixxiul.
|
||||||
|
* Fix expand/collapse state wrong in metaspaces ([\#8952](https://github.com/matrix-org/matrix-react-sdk/pull/8952)). Fixes #22632.
|
||||||
|
* Location (live) share replies now provide a fallback content ([\#8949](https://github.com/matrix-org/matrix-react-sdk/pull/8949)).
|
||||||
|
* Fix space settings not opening for script-created spaces ([\#8957](https://github.com/matrix-org/matrix-react-sdk/pull/8957)). Fixes #22703.
|
||||||
|
* Respect `filename` field on `m.file` events ([\#8951](https://github.com/matrix-org/matrix-react-sdk/pull/8951)).
|
||||||
|
* Fix PlatformSettingsHandler always returning true due to returning a Promise ([\#8954](https://github.com/matrix-org/matrix-react-sdk/pull/8954)). Fixes #22616.
|
||||||
|
* Improve high-contrast support for spotlight ([\#8948](https://github.com/matrix-org/matrix-react-sdk/pull/8948)). Fixes #22481. Contributed by @justjanne.
|
||||||
|
* Fix wrong assertions that all media events have a mimetype ([\#8946](https://github.com/matrix-org/matrix-react-sdk/pull/8946)). Fixes matrix-org/element-web-rageshakes#13727.
|
||||||
|
* Make invite dialogue fixed height ([\#8934](https://github.com/matrix-org/matrix-react-sdk/pull/8934)). Fixes #22659.
|
||||||
|
* Fix all megolm error reported as unknown ([\#8916](https://github.com/matrix-org/matrix-react-sdk/pull/8916)).
|
||||||
|
* Remove line-height declarations from _ReplyTile.scss ([\#8932](https://github.com/matrix-org/matrix-react-sdk/pull/8932)). Fixes #22687. Contributed by @luixxiul.
|
||||||
|
* Reduce video rooms log spam ([\#8913](https://github.com/matrix-org/matrix-react-sdk/pull/8913)).
|
||||||
|
* Correct new search input’s rounded corners ([\#8921](https://github.com/matrix-org/matrix-react-sdk/pull/8921)). Fixes #22576. Contributed by @justjanne.
|
||||||
|
* Align unread notification dot on threads list in compact modern=group layout ([\#8911](https://github.com/matrix-org/matrix-react-sdk/pull/8911)). Fixes #22677. Contributed by @luixxiul.
|
||||||
|
|
||||||
Changes in [1.11.0](https://github.com/vector-im/element-web/releases/tag/v1.11.0) (2022-07-05)
|
Changes in [1.11.0](https://github.com/vector-im/element-web/releases/tag/v1.11.0) (2022-07-05)
|
||||||
===============================================================================================
|
===============================================================================================
|
||||||
|
|
||||||
|
25
build_config.sample.yaml
Normal file
25
build_config.sample.yaml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# A sample build_config.yaml to supply to Element Web's build pipeline,
|
||||||
|
# enabling custom functionality at compile time. Copy this file to
|
||||||
|
# `build_config.yaml` in the same directory to use, as you would with
|
||||||
|
# `config.json`.
|
||||||
|
#
|
||||||
|
# Note: The vast majority of users DO NOT need this. If you are looking
|
||||||
|
# to build your own Element Web as seen on app.element.io or similar then
|
||||||
|
# this is not required.
|
||||||
|
#
|
||||||
|
# This config file does become required if you are looking to add runtime
|
||||||
|
# functionality to Element Web, such as customisation endpoints and modules.
|
||||||
|
#
|
||||||
|
# Over time we might expand this config to better support some use cases.
|
||||||
|
# Watch the release notes for features which might impact this config.
|
||||||
|
|
||||||
|
# The modules to install. See ./docs/modules.md for more information on
|
||||||
|
# what modules are.
|
||||||
|
#
|
||||||
|
# The values of this are provided to `yarn add` for inclusion.
|
||||||
|
modules:
|
||||||
|
# An example of pulling a module from NPM
|
||||||
|
- "@vector-im/element-web-ilag-module@^0.0.1"
|
||||||
|
|
||||||
|
# An example of pulling a module from github
|
||||||
|
- "github:vector-im/element-web-ilag-module#main"
|
48
docs/modules.md
Normal file
48
docs/modules.md
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# Module system
|
||||||
|
|
||||||
|
The module system in Element Web is a way to add or modify functionality of Element Web itself, bundled at compile time
|
||||||
|
for the app. This means that modules are loaded as part of the `yarn build` process but have an effect on user experience
|
||||||
|
at runtime.
|
||||||
|
|
||||||
|
## Installing modules
|
||||||
|
|
||||||
|
If you already have a module you want to install, such as our [ILAG Module](https://github.com/vector-im/element-web-ilag-module),
|
||||||
|
then copy `build_config.sample.yaml` to `build_config.yaml` in the same directory. In your new `build_config.yaml` simply
|
||||||
|
add the reference to the module as described by the sample file, using the same syntax you would for `yarn add`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
modules:
|
||||||
|
# Our module happens to be published on NPM, so we use that syntax to reference it.
|
||||||
|
- "@vector-im/element-web-ilag-module@latest"
|
||||||
|
```
|
||||||
|
|
||||||
|
Then build the app as you normally would: `yarn build` or `yarn dist` (if compatible on your platform). If you are building
|
||||||
|
the Docker image then ensure your `build_config.yaml` ends up in the build directory. Usually this works fine if you use
|
||||||
|
the current directory as the build context (the `.` in `docker build -t my-element-web .`).
|
||||||
|
|
||||||
|
## Writing modules
|
||||||
|
|
||||||
|
While writing modules is meant to be easy, not everything is possible yet. For modules which want to do something we haven't
|
||||||
|
exposed in the module API, the module API will need to be updated. This means a PR to both the
|
||||||
|
[`matrix-react-sdk`](https://github.com/matrix-org/matrix-react-sdk) and [`matrix-react-sdk-module-api`](https://github.com/matrix-org/matrix-react-sdk-module-api).
|
||||||
|
|
||||||
|
Once your change to the module API is accepted, the `@matrix-org/react-sdk-module-api` dependency gets updated at the
|
||||||
|
`matrix-react-sdk` and `element-web` layers (usually by us, the maintainers) to ensure your module can operate.
|
||||||
|
|
||||||
|
If you're not adding anything to the module API, or your change was accepted per above, then start off with a clone of
|
||||||
|
our [ILAG module](https://github.com/vector-im/element-web-ilag-module) which will give you a general idea for what the
|
||||||
|
structure of a module is and how it works.
|
||||||
|
|
||||||
|
The following requirements are key for any module:
|
||||||
|
1. The module must depend on `@matrix-org/react-sdk-module-api` (usually as a dev dependency).
|
||||||
|
2. The module's `main` entrypoint must have a `default` export for the `RuntimeModule` instance, supporting a constructor
|
||||||
|
which takes a single parameter: a `ModuleApi` instance. This instance is passed to `super()`.
|
||||||
|
3. The module must be deployed in a way where `yarn add` can access it, as that is how the build system will try to
|
||||||
|
install it. Note that while this is often NPM, it can also be a GitHub/GitLab repo or private NPM registry.
|
||||||
|
|
||||||
|
... and that's pretty much it. As with any code, please be responsible and call things in line with the documentation.
|
||||||
|
Both `RuntimeModule` and `ModuleApi` have extensive documentation to describe what is proper usage and how to set things
|
||||||
|
up.
|
||||||
|
|
||||||
|
If you have any questions then please visit [#element-dev:matrix.org](https://matrix.to/#/#element-dev:matrix.org) on
|
||||||
|
Matrix and we'll help as best we can.
|
33
module_system/BuildConfig.ts
Normal file
33
module_system/BuildConfig.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
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 * as YAML from "yaml";
|
||||||
|
import * as fs from "fs";
|
||||||
|
|
||||||
|
export type BuildConfig = {
|
||||||
|
// Dev note: make everything here optional for user safety. Invalid
|
||||||
|
// configs are very possible.
|
||||||
|
|
||||||
|
// The module references to include in the build.
|
||||||
|
modules?: string[];
|
||||||
|
};
|
||||||
|
|
||||||
|
export function readBuildConfig(): BuildConfig {
|
||||||
|
if (fs.existsSync("./build_config.yaml")) {
|
||||||
|
return YAML.parse(fs.readFileSync("./build_config.yaml", "utf-8"));
|
||||||
|
}
|
||||||
|
return {}; // no config
|
||||||
|
}
|
191
module_system/installer.ts
Normal file
191
module_system/installer.ts
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
/*
|
||||||
|
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 * as fs from "fs";
|
||||||
|
import * as childProcess from "child_process";
|
||||||
|
import * as semver from "semver";
|
||||||
|
|
||||||
|
import { BuildConfig } from "./BuildConfig";
|
||||||
|
|
||||||
|
// This expects to be run from ./scripts/install.ts
|
||||||
|
|
||||||
|
const moduleApiDepName = "@matrix-org/react-sdk-module-api";
|
||||||
|
|
||||||
|
const MODULES_TS_HEADER = `
|
||||||
|
/*
|
||||||
|
* THIS FILE IS AUTO-GENERATED
|
||||||
|
* You can edit it you like, but your changes will be overwritten,
|
||||||
|
* so you'd just be trying to swim upstream like a salmon.
|
||||||
|
* You are not a salmon.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { RuntimeModule } from "@matrix-org/react-sdk-module-api/lib/RuntimeModule";
|
||||||
|
`;
|
||||||
|
const MODULES_TS_DEFINITIONS = `
|
||||||
|
export const INSTALLED_MODULES: RuntimeModule[] = [];
|
||||||
|
`;
|
||||||
|
|
||||||
|
export function installer(config: BuildConfig): void {
|
||||||
|
if (!config.modules?.length) {
|
||||||
|
// nothing to do
|
||||||
|
writeModulesTs(MODULES_TS_HEADER + MODULES_TS_DEFINITIONS);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let exitCode = 0;
|
||||||
|
|
||||||
|
// We cheat a bit and store the current package.json and lockfile so we can safely
|
||||||
|
// run `yarn add` without creating extra committed files for people. We restore
|
||||||
|
// these files by simply overwriting them when we're done.
|
||||||
|
const packageDeps = readCurrentPackageDetails();
|
||||||
|
|
||||||
|
// Record which optional dependencies there are currently, if any, so we can exclude
|
||||||
|
// them from our "must be a module" assumption later on.
|
||||||
|
const currentOptDeps = getOptionalDepNames(packageDeps.packageJson);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Install the modules with yarn
|
||||||
|
const yarnAddRef = config.modules.join(" ");
|
||||||
|
callYarnAdd(yarnAddRef); // install them all at once
|
||||||
|
|
||||||
|
// Grab the optional dependencies again and exclude what was there already. Everything
|
||||||
|
// else must be a module, we assume.
|
||||||
|
const pkgJsonStr = fs.readFileSync("./package.json", "utf-8");
|
||||||
|
const optionalDepNames = getOptionalDepNames(pkgJsonStr);
|
||||||
|
const installedModules = optionalDepNames.filter(d => !currentOptDeps.includes(d));
|
||||||
|
|
||||||
|
// Ensure all the modules are compatible. We check them all and report at the end to
|
||||||
|
// try and save the user some time debugging this sort of failure.
|
||||||
|
const ourApiVersion = getTopLevelDependencyVersion(moduleApiDepName);
|
||||||
|
const incompatibleNames: string[] = [];
|
||||||
|
for (const moduleName of installedModules) {
|
||||||
|
const modApiVersion = getModuleApiVersionFor(moduleName);
|
||||||
|
if (!isModuleVersionCompatible(ourApiVersion, modApiVersion)) {
|
||||||
|
incompatibleNames.push(moduleName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (incompatibleNames.length > 0) {
|
||||||
|
console.error(
|
||||||
|
"The following modules are not compatible with this version of element-web. Please update the module " +
|
||||||
|
"references and try again.",
|
||||||
|
JSON.stringify(incompatibleNames, null, 4), // stringify to get prettier/complete output
|
||||||
|
);
|
||||||
|
exitCode = 1;
|
||||||
|
return; // hit the finally{} block before exiting
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we reach here, everything seems fine. Write modules.ts and log some output
|
||||||
|
// Note: we compile modules.ts in two parts for developer friendliness if they
|
||||||
|
// happen to look at it.
|
||||||
|
console.log("The following modules have been installed: ", installedModules);
|
||||||
|
let modulesTsHeader = MODULES_TS_HEADER;
|
||||||
|
let modulesTsDefs = MODULES_TS_DEFINITIONS;
|
||||||
|
let index = 0;
|
||||||
|
for (const moduleName of installedModules) {
|
||||||
|
const importName = `Module${++index}`;
|
||||||
|
modulesTsHeader += `import ${importName} from "${moduleName}";\n`;
|
||||||
|
modulesTsDefs += `INSTALLED_MODULES.push(${importName});\n`;
|
||||||
|
}
|
||||||
|
writeModulesTs(modulesTsHeader + modulesTsDefs);
|
||||||
|
console.log("Done installing modules");
|
||||||
|
} finally {
|
||||||
|
// Always restore package details (or at least try to)
|
||||||
|
writePackageDetails(packageDeps);
|
||||||
|
|
||||||
|
if (exitCode > 0) {
|
||||||
|
process.exit(exitCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type RawDependencies = {
|
||||||
|
lockfile: string;
|
||||||
|
packageJson: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
function readCurrentPackageDetails(): RawDependencies {
|
||||||
|
return {
|
||||||
|
lockfile: fs.readFileSync("./yarn.lock", "utf-8"),
|
||||||
|
packageJson: fs.readFileSync("./package.json", "utf-8"),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function writePackageDetails(deps: RawDependencies) {
|
||||||
|
fs.writeFileSync("./yarn.lock", deps.lockfile, "utf-8");
|
||||||
|
fs.writeFileSync("./package.json", deps.packageJson, "utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
function callYarnAdd(dep: string) {
|
||||||
|
// Add the module to the optional dependencies section just in case something
|
||||||
|
// goes wrong in restoring the original package details.
|
||||||
|
childProcess.execSync(`yarn add -O ${dep}`, {
|
||||||
|
env: process.env,
|
||||||
|
stdio: ['inherit', 'inherit', 'inherit'],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getOptionalDepNames(pkgJsonStr: string): string[] {
|
||||||
|
return Object.keys(JSON.parse(pkgJsonStr)?.['optionalDependencies'] ?? {});
|
||||||
|
}
|
||||||
|
|
||||||
|
function findDepVersionInPackageJson(dep: string, pkgJsonStr: string): string {
|
||||||
|
const pkgJson = JSON.parse(pkgJsonStr);
|
||||||
|
const packages = {
|
||||||
|
...(pkgJson['optionalDependencies'] ?? {}),
|
||||||
|
...(pkgJson['devDependencies'] ?? {}),
|
||||||
|
...(pkgJson['dependencies'] ?? {}),
|
||||||
|
};
|
||||||
|
return packages[dep];
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTopLevelDependencyVersion(dep: string): string {
|
||||||
|
const dependencyTree = JSON.parse(childProcess.execSync(`npm list ${dep} --depth=0 --json`, {
|
||||||
|
env: process.env,
|
||||||
|
stdio: ['inherit', 'pipe', 'pipe'],
|
||||||
|
}).toString('utf-8'));
|
||||||
|
|
||||||
|
/*
|
||||||
|
What a dependency tree looks like:
|
||||||
|
{
|
||||||
|
"version": "1.10.13",
|
||||||
|
"name": "element-web",
|
||||||
|
"dependencies": {
|
||||||
|
"@matrix-org/react-sdk-module-api": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "file:../../../matrix-react-sdk-module-api"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
return dependencyTree["dependencies"][dep]["version"];
|
||||||
|
}
|
||||||
|
|
||||||
|
function getModuleApiVersionFor(moduleName: string): string {
|
||||||
|
// We'll just pretend that this isn't highly problematic...
|
||||||
|
// Yarn is fairly stable in putting modules in a flat hierarchy, at least.
|
||||||
|
const pkgJsonStr = fs.readFileSync(`./node_modules/${moduleName}/package.json`, "utf-8");
|
||||||
|
return findDepVersionInPackageJson(moduleApiDepName, pkgJsonStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isModuleVersionCompatible(ourApiVersion: string, moduleApiVersion: string): boolean {
|
||||||
|
if (!moduleApiVersion) return false;
|
||||||
|
return semver.satisfies(ourApiVersion, moduleApiVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeModulesTs(content: string) {
|
||||||
|
fs.writeFileSync("./src/modules.ts", content, "utf-8");
|
||||||
|
}
|
21
module_system/scripts/install.ts
Normal file
21
module_system/scripts/install.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
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 { readBuildConfig } from "../BuildConfig";
|
||||||
|
import { installer } from "../installer";
|
||||||
|
|
||||||
|
const buildConf = readBuildConfig();
|
||||||
|
installer(buildConf);
|
22
package.json
22
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "element-web",
|
"name": "element-web",
|
||||||
"version": "1.11.0",
|
"version": "1.11.1",
|
||||||
"description": "A feature-rich client for Matrix.org",
|
"description": "A feature-rich client for Matrix.org",
|
||||||
"author": "New Vector Ltd.",
|
"author": "New Vector Ltd.",
|
||||||
"repository": {
|
"repository": {
|
||||||
@ -35,31 +35,33 @@
|
|||||||
"build-stats": "yarn clean && yarn build:genfiles && yarn build:bundle-stats",
|
"build-stats": "yarn clean && yarn build:genfiles && yarn build:bundle-stats",
|
||||||
"build:jitsi": "node scripts/build-jitsi.js",
|
"build:jitsi": "node scripts/build-jitsi.js",
|
||||||
"build:res": "node scripts/copy-res.js",
|
"build:res": "node scripts/copy-res.js",
|
||||||
"build:genfiles": "yarn build:res && yarn build:jitsi",
|
"build:genfiles": "yarn build:res && yarn build:jitsi && yarn build:module_system",
|
||||||
"build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js",
|
"build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js",
|
||||||
"build:bundle": "webpack --progress --bail --mode production",
|
"build:bundle": "webpack --progress --bail --mode production",
|
||||||
"build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json",
|
"build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json",
|
||||||
|
"build:module_system": "tsc --project ./tsconfig.module_system.json && node ./lib/module_system/scripts/install.js",
|
||||||
"dist": "scripts/package.sh",
|
"dist": "scripts/package.sh",
|
||||||
"start": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js\"",
|
"start": "yarn build:module_system && concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js\"",
|
||||||
"start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js --https\"",
|
"start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js --https\"",
|
||||||
"start:res": "yarn build:jitsi && node scripts/copy-res.js -w",
|
"start:res": "yarn build:jitsi && node scripts/copy-res.js -w",
|
||||||
"start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --mode development --disable-host-check --hot",
|
"start:js": "webpack-dev-server --host=0.0.0.0 --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --mode development --disable-host-check --hot",
|
||||||
"lint": "yarn lint:types && yarn lint:js && yarn lint:style",
|
"lint": "yarn lint:types && yarn lint:js && yarn lint:style",
|
||||||
"lint:js": "eslint --max-warnings 0 src",
|
"lint:js": "eslint --max-warnings 0 src module_system",
|
||||||
"lint:js-fix": "eslint --fix src",
|
"lint:js-fix": "eslint --fix src module_system",
|
||||||
"lint:types": "tsc --noEmit --jsx react",
|
"lint:types": "tsc --noEmit --jsx react && tsc --noEmit --project ./tsconfig.module_system.json",
|
||||||
"lint:style": "stylelint \"res/css/**/*.scss\"",
|
"lint:style": "stylelint \"res/css/**/*.scss\"",
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"coverage": "yarn test --coverage"
|
"coverage": "yarn test --coverage"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz",
|
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz",
|
||||||
|
"@matrix-org/react-sdk-module-api": "^0.0.3",
|
||||||
"browser-request": "^0.3.3",
|
"browser-request": "^0.3.3",
|
||||||
"gfm.css": "^1.1.2",
|
"gfm.css": "^1.1.2",
|
||||||
"jsrsasign": "^10.5.25",
|
"jsrsasign": "^10.5.25",
|
||||||
"katex": "^0.12.0",
|
"katex": "^0.12.0",
|
||||||
"matrix-js-sdk": "19.0.0",
|
"matrix-js-sdk": "19.1.0",
|
||||||
"matrix-react-sdk": "3.48.0",
|
"matrix-react-sdk": "3.49.0",
|
||||||
"matrix-widget-api": "^0.1.0-beta.18",
|
"matrix-widget-api": "^0.1.0-beta.18",
|
||||||
"prop-types": "^15.7.2",
|
"prop-types": "^15.7.2",
|
||||||
"react": "17.0.2",
|
"react": "17.0.2",
|
||||||
@ -144,6 +146,7 @@
|
|||||||
"postcss-strip-inline-comments": "^0.1.5",
|
"postcss-strip-inline-comments": "^0.1.5",
|
||||||
"raw-loader": "^4.0.2",
|
"raw-loader": "^4.0.2",
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
|
"semver": "^7.3.7",
|
||||||
"shell-escape": "^0.2.0",
|
"shell-escape": "^0.2.0",
|
||||||
"simple-proxy-agent": "^1.1.0",
|
"simple-proxy-agent": "^1.1.0",
|
||||||
"string-replace-loader": "2",
|
"string-replace-loader": "2",
|
||||||
@ -157,7 +160,8 @@
|
|||||||
"webpack-cli": "^3.3.12",
|
"webpack-cli": "^3.3.12",
|
||||||
"webpack-dev-server": "^3.11.2",
|
"webpack-dev-server": "^3.11.2",
|
||||||
"worker-loader": "^2.0.0",
|
"worker-loader": "^2.0.0",
|
||||||
"worklet-loader": "^2.0.0"
|
"worklet-loader": "^2.0.0",
|
||||||
|
"yaml": "^2.0.1"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"@types/react": "17.0.14"
|
"@types/react": "17.0.14"
|
||||||
|
@ -54,7 +54,7 @@ export default class Favicon {
|
|||||||
|
|
||||||
private isReady = false;
|
private isReady = false;
|
||||||
// callback to run once isReady is asserted, allows for a badge to be queued for when it can be shown
|
// callback to run once isReady is asserted, allows for a badge to be queued for when it can be shown
|
||||||
private readyCb = () => {};
|
private readyCb?: () => void;
|
||||||
|
|
||||||
constructor(params: Partial<IParams> = {}) {
|
constructor(params: Partial<IParams> = {}) {
|
||||||
this.params = { ...defaults, ...params };
|
this.params = { ...defaults, ...params };
|
||||||
@ -180,7 +180,7 @@ export default class Favicon {
|
|||||||
private ready() {
|
private ready() {
|
||||||
if (this.isReady) return;
|
if (this.isReady) return;
|
||||||
this.isReady = true;
|
this.isReady = true;
|
||||||
this.readyCb();
|
this.readyCb?.();
|
||||||
}
|
}
|
||||||
|
|
||||||
private setIcon(canvas) {
|
private setIcon(canvas) {
|
||||||
@ -230,9 +230,9 @@ export default class Favicon {
|
|||||||
private static getLinks() {
|
private static getLinks() {
|
||||||
const icons: HTMLLinkElement[] = [];
|
const icons: HTMLLinkElement[] = [];
|
||||||
const links = window.document.getElementsByTagName("head")[0].getElementsByTagName("link");
|
const links = window.document.getElementsByTagName("head")[0].getElementsByTagName("link");
|
||||||
for (let i = 0; i < links.length; i++) {
|
for (const link of links) {
|
||||||
if ((/(^|\s)icon(\s|$)/i).test(links[i].getAttribute("rel"))) {
|
if ((/(^|\s)icon(\s|$)/i).test(link.getAttribute("rel"))) {
|
||||||
icons.push(links[i]);
|
icons.push(link);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return icons;
|
return icons;
|
||||||
|
@ -28,5 +28,6 @@
|
|||||||
"Failed to start": "فشل البدء",
|
"Failed to start": "فشل البدء",
|
||||||
"Powered by Matrix": "تدعمه «ماترِكس»",
|
"Powered by Matrix": "تدعمه «ماترِكس»",
|
||||||
"Use %(brand)s on mobile": "استعمل %(brand)s على المحمول",
|
"Use %(brand)s on mobile": "استعمل %(brand)s على المحمول",
|
||||||
|
"Switch to space by number": "التبديل إلى المساحة بالرقم",
|
||||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "محادثة لامركزية، مشفرة & تعمل بواسطة $matrixLogo"
|
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "محادثة لامركزية، مشفرة & تعمل بواسطة $matrixLogo"
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"The message from the parser is: %(message)s": "Sözügedən mesaj: %(message)s",
|
"The message from the parser is: %(message)s": "Sözügedən mesaj: %(message)s",
|
||||||
"Dismiss": "Nəzərə almayın",
|
"Dismiss": "Nəzərə almayın",
|
||||||
"Welcome to Element": "Element-ə xoş gəlmişsiniz",
|
"Welcome to Element": "Element-ə xoş gəlmişsiniz",
|
||||||
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "[matrix] tərəfindən təchiz edilmiş mərkəziləşdirilməmiş, şifrələnmiş çat və əməkdaşlıq platforması",
|
||||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "$matrixLogo tərəfindən dəstəklənən mərkəzləşdirilməmiş ,şifrələnmiş söhbət & əməkdaşlıq",
|
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "$matrixLogo tərəfindən dəstəklənən mərkəzləşdirilməmiş ,şifrələnmiş söhbət & əməkdaşlıq",
|
||||||
"Failed to start": "Başlatmaq alınmadı",
|
"Failed to start": "Başlatmaq alınmadı",
|
||||||
"Go to element.io": "element.io saytına keçin",
|
"Go to element.io": "element.io saytına keçin",
|
||||||
|
@ -27,5 +27,6 @@
|
|||||||
"Your browser can't run %(brand)s": "Браузърът ви не може да изпълни %(brand)s",
|
"Your browser can't run %(brand)s": "Браузърът ви не може да изпълни %(brand)s",
|
||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s използва модерни функции на браузъра, които не се поддържат от Вашия.",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s използва модерни функции на браузъра, които не се поддържат от Вашия.",
|
||||||
"Powered by Matrix": "Базирано на Matrix",
|
"Powered by Matrix": "Базирано на Matrix",
|
||||||
"Use %(brand)s on mobile": "Използвайте %(brand)s на мобилен телефон"
|
"Use %(brand)s on mobile": "Използвайте %(brand)s на мобилен телефон",
|
||||||
|
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Децентрализиран, криптиран чат & сътрудничество, захранено от $matrixlogo"
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"Dismiss": "Afvis",
|
"Dismiss": "Afvis",
|
||||||
|
"powered by Matrix": "Drevet af Matrix",
|
||||||
"Unknown device": "Ukendt enhed",
|
"Unknown device": "Ukendt enhed",
|
||||||
"Welcome to Element": "Velkommen til Element",
|
"Welcome to Element": "Velkommen til Element",
|
||||||
"The message from the parser is: %(message)s": "Beskeden fra parseren er: %(message)s",
|
"The message from the parser is: %(message)s": "Beskeden fra parseren er: %(message)s",
|
||||||
|
@ -28,5 +28,6 @@
|
|||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)",
|
||||||
"Use %(brand)s on mobile": "Χρήση %(brand)s σε κινητό",
|
"Use %(brand)s on mobile": "Χρήση %(brand)s σε κινητό",
|
||||||
|
"Switch to space by number": "Εναλλαγή σε space με αριθμό",
|
||||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία και συνεργασία χρησιμοποιώντας το $matrixLogo"
|
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία και συνεργασία χρησιμοποιώντας το $matrixLogo"
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,8 @@
|
|||||||
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
"%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)",
|
||||||
"%(brand)s Desktop (%(platformName)s)": "%(brand)s שולחן עבודה %(platformName)s",
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s שולחן עבודה %(platformName)s",
|
||||||
"The message from the parser is: %(message)s": "ההודעה מהמנתח היא: %(message)s",
|
"The message from the parser is: %(message)s": "ההודעה מהמנתח היא: %(message)s",
|
||||||
|
"Missing indexeddb worker script!": "סקריפט indexeddb worker חסר!",
|
||||||
|
"Switch to space by number": "עבור 'למרחב' על פי המספר שלו",
|
||||||
"Use %(brand)s on mobile": "השתמש ב-%(brand)s במכשיר הנייד",
|
"Use %(brand)s on mobile": "השתמש ב-%(brand)s במכשיר הנייד",
|
||||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "צ'אט מבוזר ומוצפן & מופעל בשיתוף פעולה ע\"י $matrixLogo"
|
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "צ'אט מבוזר ומוצפן & מופעל בשיתוף פעולה ע\"י $matrixLogo"
|
||||||
}
|
}
|
||||||
|
@ -28,5 +28,8 @@
|
|||||||
"Your Element is misconfigured": "Element jest nieprawidłowo skonfigurowany",
|
"Your Element is misconfigured": "Element jest nieprawidłowo skonfigurowany",
|
||||||
"Powered by Matrix": "Zasilane przez Matrix",
|
"Powered by Matrix": "Zasilane przez Matrix",
|
||||||
"Use %(brand)s on mobile": "Użyj %(brand)s w telefonie",
|
"Use %(brand)s on mobile": "Użyj %(brand)s w telefonie",
|
||||||
|
"Switch to space by number": "Przełącz na przestrzeń według numeru",
|
||||||
|
"Next recently visited room or community": "Następne ostatnio odwiedzone pokoje i społeczności",
|
||||||
|
"Previous recently visited room or community": "Ostatnio odwiedzone pokoje i społeczności",
|
||||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Zdecentralizowany, szyfrowany czat i współpraca wspierana przez $matrixLogo"
|
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "Zdecentralizowany, szyfrowany czat i współpraca wspierana przez $matrixLogo"
|
||||||
}
|
}
|
||||||
|
@ -13,5 +13,20 @@
|
|||||||
"Your browser can't run %(brand)s": "ඔබගේ අතිරික්සුවට %(brand)s ධාවනය කළ නොහැකිය",
|
"Your browser can't run %(brand)s": "ඔබගේ අතිරික්සුවට %(brand)s ධාවනය කළ නොහැකිය",
|
||||||
"Unsupported browser": "සහය නොදක්වන අතිරික්සුව කි",
|
"Unsupported browser": "සහය නොදක්වන අතිරික්සුව කි",
|
||||||
"Go to your browser to complete Sign In": "පිවිසීම සම්පූර්ණ කිරීමට ඔබගේ අතිරික්සුව වෙත යන්න",
|
"Go to your browser to complete Sign In": "පිවිසීම සම්පූර්ණ කිරීමට ඔබගේ අතිරික්සුව වෙත යන්න",
|
||||||
"Download Completed": "බාගැනීම සම්පූර්ණයි"
|
"Download Completed": "බාගැනීම සම්පූර්ණයි",
|
||||||
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "ඔබගේ වත්මන් අතිරික්සුව සහාය නොදක්වන උසස් විශේෂාංග %(brand)s භාවිත කරයි.",
|
||||||
|
"The message from the parser is: %(message)s": "විග්රහය වෙතින් පණිවිඩය: %(message)s",
|
||||||
|
"Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "ඔබගේ ඉලෙමන්ට් වින්යාසයෙහි වැරදි JSON අඩංගුය. ගැටලුව නිවැරදි කර පිටුව නැවුම් කරන්න.",
|
||||||
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "වින්යාසය වැරදිය: default_server_config, default_server_name, හෝ default_hs_url න් එකක් සඳහන් කළ හැකිය.",
|
||||||
|
"Invalid configuration: no default server specified.": "වින්යාසය වලංගු නොවේ: පෙරනිමි සේවාදායකයක් දක්වා නැත.",
|
||||||
|
"Your Element is misconfigured": "ඉලෙමන්ට් වැරදියට වින්යාසගතයි",
|
||||||
|
"Unable to load config file: please refresh the page to try again.": "වින්යාස ගොනුව පූරණය කළ නොහැකිය: පිටුව නැවුම් කරන්න.",
|
||||||
|
"Unexpected error preparing the app. See console for details.": "යෙදුම සූදානමේදී අනපේක්ෂිත දෝෂයකි. විස්තර සඳහා හසුරුවම බලන්න.",
|
||||||
|
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "ඉහළ අත්දැකීමකට <chromeLink>ක්රෝම්</chromeLink>, <firefoxLink>ෆයර්ෆොකස්</firefoxLink>, හෝ <safariLink>සෆාරි</safariLink> ස්ථාපනය කරන්න.",
|
||||||
|
"You can continue using your current browser, but some or all features may not work and the look and feel of the application may be incorrect.": "වත්මන් අතිරික්සුව දිගටම භාවිතා කළ හැකිය, නමුත් සමහර හෝ සියළුම විශේෂාංග ක්රියා නොකරන අතර යෙදුමේ පෙනුම වෙනස් විය හැකිය.",
|
||||||
|
"I understand the risks and wish to continue": "අවදානම වැටහේ, ඉදිරියට යාමට කැමැත්තෙමි",
|
||||||
|
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "විමධ්යගත, සංකේතිත කතාබහ සහ amp; $matrixLogo මගින් බලගැන්වූ සහයෝගිත්වය",
|
||||||
|
"Use %(brand)s on mobile": "දුරකථනය සඳහා %(brand)s",
|
||||||
|
"%(brand)s Desktop (%(platformName)s)": "%(brand)s වැඩතලය (%(platformName)s)",
|
||||||
|
"Invalid JSON": "JSON වලංගු නොවේ"
|
||||||
}
|
}
|
||||||
|
@ -28,5 +28,6 @@
|
|||||||
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "当前浏览器不支持 %(brand)s 所需的高级浏览器特性。",
|
"%(brand)s uses advanced browser features which aren't supported by your current browser.": "当前浏览器不支持 %(brand)s 所需的高级浏览器特性。",
|
||||||
"Powered by Matrix": "由 Matrix 驱动",
|
"Powered by Matrix": "由 Matrix 驱动",
|
||||||
"Use %(brand)s on mobile": "在移动设备上使用 %(brand)s",
|
"Use %(brand)s on mobile": "在移动设备上使用 %(brand)s",
|
||||||
|
"Switch to space by number": "按数字切换空间",
|
||||||
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "去中心化、加密的聊天与协作,威力本源 $matrixLogo"
|
"Decentralised, encrypted chat & collaboration powered by $matrixLogo": "去中心化、加密的聊天与协作,威力本源 $matrixLogo"
|
||||||
}
|
}
|
||||||
|
@ -52,8 +52,8 @@
|
|||||||
<% for (var i=0; i < htmlWebpackPlugin.tags.headTags.length; i++) {
|
<% for (var i=0; i < htmlWebpackPlugin.tags.headTags.length; i++) {
|
||||||
var tag = htmlWebpackPlugin.tags.headTags[i];
|
var tag = htmlWebpackPlugin.tags.headTags[i];
|
||||||
var path = tag.attributes && tag.attributes.href;
|
var path = tag.attributes && tag.attributes.href;
|
||||||
if (path.indexOf("Inter") !== -1) { %>
|
if (path.includes("/Inter/")) { %>
|
||||||
<link rel="preload" as="font" href="<%= path %>" crossorigin="anonymous"/>
|
<link rel="preload" as="font" href=".<%= path %>" crossorigin="anonymous"/>
|
||||||
<% }
|
<% }
|
||||||
} %>
|
} %>
|
||||||
|
|
||||||
|
@ -113,6 +113,7 @@ async function start() {
|
|||||||
loadLanguage,
|
loadLanguage,
|
||||||
loadTheme,
|
loadTheme,
|
||||||
loadApp,
|
loadApp,
|
||||||
|
loadModules,
|
||||||
showError,
|
showError,
|
||||||
showIncompatibleBrowser,
|
showIncompatibleBrowser,
|
||||||
_t,
|
_t,
|
||||||
@ -155,6 +156,11 @@ async function start() {
|
|||||||
// now that the config is ready, try to persist logs
|
// now that the config is ready, try to persist logs
|
||||||
const persistLogsPromise = setupLogStorage();
|
const persistLogsPromise = setupLogStorage();
|
||||||
|
|
||||||
|
// Load modules before language to ensure any custom translations are respected, and any app
|
||||||
|
// startup functionality is run
|
||||||
|
const loadModulesPromise = loadModules();
|
||||||
|
await settled(loadModulesPromise);
|
||||||
|
|
||||||
// Load language after loading config.json so that settingsDefaults.language can be applied
|
// Load language after loading config.json so that settingsDefaults.language can be applied
|
||||||
const loadLanguagePromise = loadLanguage();
|
const loadLanguagePromise = loadLanguage();
|
||||||
// as quickly as we possibly can, set a default theme...
|
// as quickly as we possibly can, set a default theme...
|
||||||
@ -209,6 +215,7 @@ async function start() {
|
|||||||
// assert things started successfully
|
// assert things started successfully
|
||||||
// ##################################
|
// ##################################
|
||||||
await loadOlmPromise;
|
await loadOlmPromise;
|
||||||
|
await loadModulesPromise;
|
||||||
await loadThemePromise;
|
await loadThemePromise;
|
||||||
await loadLanguagePromise;
|
await loadLanguagePromise;
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Copyright 2015, 2016 OpenMarket Ltd
|
Copyright 2015, 2016 OpenMarket Ltd
|
||||||
Copyright 2017 Vector Creations Ltd
|
Copyright 2017 Vector Creations Ltd
|
||||||
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
|
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
|
||||||
Copyright 2018 - 2021 New Vector Ltd
|
Copyright 2018 - 2022 New Vector Ltd
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
@ -29,11 +29,15 @@ import PlatformPeg from "matrix-react-sdk/src/PlatformPeg";
|
|||||||
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
import SdkConfig from "matrix-react-sdk/src/SdkConfig";
|
||||||
import { setTheme } from "matrix-react-sdk/src/theme";
|
import { setTheme } from "matrix-react-sdk/src/theme";
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
|
import { ModuleRunner } from "matrix-react-sdk/src/modules/ModuleRunner";
|
||||||
|
|
||||||
import ElectronPlatform from "./platform/ElectronPlatform";
|
import ElectronPlatform from "./platform/ElectronPlatform";
|
||||||
import PWAPlatform from "./platform/PWAPlatform";
|
import PWAPlatform from "./platform/PWAPlatform";
|
||||||
import WebPlatform from "./platform/WebPlatform";
|
import WebPlatform from "./platform/WebPlatform";
|
||||||
import { initRageshake, initRageshakeStore } from "./rageshakesetup";
|
import { initRageshake, initRageshakeStore } from "./rageshakesetup";
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
|
// @ts-ignore - this path is created at runtime and therefore won't exist at typecheck time
|
||||||
|
import { INSTALLED_MODULES } from "../modules";
|
||||||
|
|
||||||
export const rageshakePromise = initRageshake();
|
export const rageshakePromise = initRageshake();
|
||||||
|
|
||||||
@ -88,8 +92,8 @@ export function loadOlm(): Promise<void> {
|
|||||||
locateFile: () => olmWasmPath,
|
locateFile: () => olmWasmPath,
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
logger.log("Using WebAssembly Olm");
|
logger.log("Using WebAssembly Olm");
|
||||||
}).catch((e) => {
|
}).catch((wasmLoadError) => {
|
||||||
logger.log("Failed to load Olm: trying legacy version", e);
|
logger.log("Failed to load Olm: trying legacy version", wasmLoadError);
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const s = document.createElement('script');
|
const s = document.createElement('script');
|
||||||
s.src = 'olm_legacy.js'; // XXX: This should be cache-busted too
|
s.src = 'olm_legacy.js'; // XXX: This should be cache-busted too
|
||||||
@ -102,8 +106,8 @@ export function loadOlm(): Promise<void> {
|
|||||||
return window.Olm.init();
|
return window.Olm.init();
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
logger.log("Using legacy Olm");
|
logger.log("Using legacy Olm");
|
||||||
}).catch((e) => {
|
}).catch((legacyLoadError) => {
|
||||||
logger.log("Both WebAssembly and asm.js Olm failed!", e);
|
logger.log("Both WebAssembly and asm.js Olm failed!", legacyLoadError);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -157,4 +161,12 @@ export async function showIncompatibleBrowser(onAccept) {
|
|||||||
document.getElementById('matrixchat'));
|
document.getElementById('matrixchat'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function loadModules() {
|
||||||
|
for (const InstalledModule of INSTALLED_MODULES) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
|
// @ts-ignore - we know the constructor exists even if TypeScript can't be convinced of that
|
||||||
|
ModuleRunner.instance.registerModule((api) => new InstalledModule(api));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export const _t = languageHandler._t;
|
export const _t = languageHandler._t;
|
||||||
|
@ -52,6 +52,7 @@ let openIdToken: IOpenIDCredentials;
|
|||||||
let roomName: string;
|
let roomName: string;
|
||||||
let startAudioOnly: boolean;
|
let startAudioOnly: boolean;
|
||||||
let isVideoChannel: boolean;
|
let isVideoChannel: boolean;
|
||||||
|
let supportsScreensharing: boolean;
|
||||||
|
|
||||||
let widgetApi: WidgetApi;
|
let widgetApi: WidgetApi;
|
||||||
let meetApi: any; // JitsiMeetExternalAPI
|
let meetApi: any; // JitsiMeetExternalAPI
|
||||||
@ -122,6 +123,7 @@ const ack = (ev: CustomEvent<IWidgetApiRequest>) => widgetApi.transport.reply(ev
|
|||||||
roomName = qsParam('roomName', true);
|
roomName = qsParam('roomName', true);
|
||||||
startAudioOnly = qsParam('isAudioOnly', true) === "true";
|
startAudioOnly = qsParam('isAudioOnly', true) === "true";
|
||||||
isVideoChannel = qsParam('isVideoChannel', true) === "true";
|
isVideoChannel = qsParam('isVideoChannel', true) === "true";
|
||||||
|
supportsScreensharing = qsParam('supportsScreensharing', true) === "true";
|
||||||
|
|
||||||
// We've reached the point where we have to wait for the config, so do that then parse it.
|
// We've reached the point where we have to wait for the config, so do that then parse it.
|
||||||
const instanceConfig = new SnakedObject<IConfigOptions>((await configPromise) ?? <IConfigOptions>{});
|
const instanceConfig = new SnakedObject<IConfigOptions>((await configPromise) ?? <IConfigOptions>{});
|
||||||
@ -408,11 +410,18 @@ function joinConference(audioDevice?: string | null, videoDevice?: string | null
|
|||||||
// deployments that have it enabled
|
// deployments that have it enabled
|
||||||
options.configOverwrite.prejoinConfig = { enabled: false };
|
options.configOverwrite.prejoinConfig = { enabled: false };
|
||||||
// Use a simplified set of toolbar buttons
|
// Use a simplified set of toolbar buttons
|
||||||
options.configOverwrite.toolbarButtons = [
|
options.configOverwrite.toolbarButtons = ["microphone", "camera", "tileview", "hangup"];
|
||||||
"microphone", "camera", "desktop", "tileview", "hangup",
|
// Note: We can hide the screenshare button in video rooms but not in
|
||||||
];
|
// normal conference calls, since in video rooms we control exactly what
|
||||||
|
// set of controls appear, but in normal calls we need to leave that up
|
||||||
|
// to the deployment's configuration.
|
||||||
|
// https://github.com/vector-im/element-web/issues/4880#issuecomment-940002464
|
||||||
|
if (supportsScreensharing) options.configOverwrite.toolbarButtons.splice(2, 0, "desktop");
|
||||||
// Hide all top bar elements
|
// Hide all top bar elements
|
||||||
options.configOverwrite.conferenceInfo = { autoHide: [] };
|
options.configOverwrite.conferenceInfo = { autoHide: [] };
|
||||||
|
// Remove the ability to hide your own tile, since we're hiding the
|
||||||
|
// settings button which would be the only way to get it back
|
||||||
|
options.configOverwrite.disableSelfViewSettings = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
meetApi = new JitsiMeetExternalAPI(jitsiDomain, options);
|
meetApi = new JitsiMeetExternalAPI(jitsiDomain, options);
|
||||||
|
@ -238,6 +238,10 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
|||||||
electron.send('loudNotification');
|
electron.send('loudNotification');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public needsUrlTooltips(): boolean {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public async getAppVersion(): Promise<string> {
|
public async getAppVersion(): Promise<string> {
|
||||||
return this.ipc.call('getAppVersion');
|
return this.ipc.call('getAppVersion');
|
||||||
}
|
}
|
||||||
@ -320,6 +324,11 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public supportsJitsiScreensharing(): boolean {
|
||||||
|
// See https://github.com/vector-im/element-web/issues/4880
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public async getAvailableSpellCheckLanguages(): Promise<string[]> {
|
public async getAvailableSpellCheckLanguages(): Promise<string[]> {
|
||||||
return this.ipc.call('getAvailableSpellCheckLanguages');
|
return this.ipc.call('getAvailableSpellCheckLanguages');
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ export class IPCManager {
|
|||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
private onIpcReply = (ev: {}, payload: IPCPayload): void => {
|
private onIpcReply = (_ev: {}, payload: IPCPayload): void => {
|
||||||
if (payload.id === undefined) {
|
if (payload.id === undefined) {
|
||||||
logger.warn("Ignoring IPC reply with no ID");
|
logger.warn("Ignoring IPC reply with no ID");
|
||||||
return;
|
return;
|
||||||
|
@ -47,7 +47,8 @@ export default abstract class VectorBasePlatform extends BasePlatform {
|
|||||||
if (this._favicon) {
|
if (this._favicon) {
|
||||||
return this._favicon;
|
return this._favicon;
|
||||||
}
|
}
|
||||||
return this._favicon = new Favicon();
|
this._favicon = new Favicon();
|
||||||
|
return this._favicon;
|
||||||
}
|
}
|
||||||
|
|
||||||
private updateFavicon() {
|
private updateFavicon() {
|
||||||
|
@ -80,7 +80,7 @@ export default class WebPlatform extends VectorBasePlatform {
|
|||||||
// annoyingly, the latest spec says this returns a
|
// annoyingly, the latest spec says this returns a
|
||||||
// promise, but this is only supported in Chrome 46
|
// promise, but this is only supported in Chrome 46
|
||||||
// and Firefox 47, so adapt the callback API.
|
// and Firefox 47, so adapt the callback API.
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve) {
|
||||||
window.Notification.requestPermission((result) => {
|
window.Notification.requestPermission((result) => {
|
||||||
resolve(result);
|
resolve(result);
|
||||||
});
|
});
|
||||||
|
@ -39,7 +39,7 @@ export function initRageshake() {
|
|||||||
logger.log("To fix line numbers in Chrome: " +
|
logger.log("To fix line numbers in Chrome: " +
|
||||||
"Meatball menu → Settings → Ignore list → Add /rageshake\\.js$");
|
"Meatball menu → Settings → Ignore list → Add /rageshake\\.js$");
|
||||||
|
|
||||||
window.addEventListener('beforeunload', (e) => {
|
window.addEventListener('beforeunload', () => {
|
||||||
logger.log('element-web closing');
|
logger.log('element-web closing');
|
||||||
// try to flush the logs to indexeddb
|
// try to flush the logs to indexeddb
|
||||||
rageshake.flush();
|
rageshake.flush();
|
||||||
|
@ -41,7 +41,7 @@ function routeUrl(location: Location) {
|
|||||||
(window.matrixChat as MatrixChatType).showScreen(s.screen, s.params);
|
(window.matrixChat as MatrixChatType).showScreen(s.screen, s.params);
|
||||||
}
|
}
|
||||||
|
|
||||||
function onHashChange(ev: HashChangeEvent) {
|
function onHashChange() {
|
||||||
if (decodeURIComponent(window.location.hash) === lastLocationHashSet) {
|
if (decodeURIComponent(window.location.hash) === lastLocationHashSet) {
|
||||||
// we just set this: no need to route it!
|
// we just set this: no need to route it!
|
||||||
return;
|
return;
|
||||||
|
@ -48,16 +48,16 @@ describe('getVectorConfig()', () => {
|
|||||||
it('requests specific config for document domain', async () => {
|
it('requests specific config for document domain', async () => {
|
||||||
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(specificConfig))
|
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(specificConfig))
|
||||||
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
||||||
|
|
||||||
await getVectorConfig();
|
await getVectorConfig();
|
||||||
|
|
||||||
expect(request.mock.calls[0][0]).toEqual({ method: "GET", url: 'config.app.element.io.json', qs: { cachebuster: now } })
|
expect(request.mock.calls[0][0]).toEqual({ method: "GET", url: 'config.app.element.io.json', qs: { cachebuster: now } })
|
||||||
});
|
});
|
||||||
|
|
||||||
it('adds trailing slash to relativeLocation when not an empty string', async () => {
|
it('adds trailing slash to relativeLocation when not an empty string', async () => {
|
||||||
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(specificConfig))
|
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(specificConfig))
|
||||||
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
||||||
|
|
||||||
await getVectorConfig('..');
|
await getVectorConfig('..');
|
||||||
|
|
||||||
expect(request.mock.calls[0][0]).toEqual(expect.objectContaining({ url: '../config.app.element.io.json' }))
|
expect(request.mock.calls[0][0]).toEqual(expect.objectContaining({ url: '../config.app.element.io.json' }))
|
||||||
@ -67,7 +67,7 @@ describe('getVectorConfig()', () => {
|
|||||||
it('returns parsed specific config when it is non-empty', async () => {
|
it('returns parsed specific config when it is non-empty', async () => {
|
||||||
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(specificConfig))
|
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(specificConfig))
|
||||||
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
||||||
|
|
||||||
const result = await getVectorConfig();
|
const result = await getVectorConfig();
|
||||||
expect(result).toEqual(specificConfig);
|
expect(result).toEqual(specificConfig);
|
||||||
});
|
});
|
||||||
@ -75,7 +75,7 @@ describe('getVectorConfig()', () => {
|
|||||||
it('returns general config when specific config succeeds but is empty', async () => {
|
it('returns general config when specific config succeeds but is empty', async () => {
|
||||||
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify({}))
|
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify({}))
|
||||||
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
||||||
|
|
||||||
const result = await getVectorConfig();
|
const result = await getVectorConfig();
|
||||||
expect(result).toEqual(generalConfig);
|
expect(result).toEqual(generalConfig);
|
||||||
});
|
});
|
||||||
@ -83,7 +83,7 @@ describe('getVectorConfig()', () => {
|
|||||||
it('returns general config when specific config 404s', async () => {
|
it('returns general config when specific config 404s', async () => {
|
||||||
setRequestMockImplementationOnce(undefined, { status: 404 })
|
setRequestMockImplementationOnce(undefined, { status: 404 })
|
||||||
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
||||||
|
|
||||||
const result = await getVectorConfig();
|
const result = await getVectorConfig();
|
||||||
expect(result).toEqual(generalConfig);
|
expect(result).toEqual(generalConfig);
|
||||||
});
|
});
|
||||||
@ -91,7 +91,7 @@ describe('getVectorConfig()', () => {
|
|||||||
it('returns general config when specific config is fetched from a file and is empty', async () => {
|
it('returns general config when specific config is fetched from a file and is empty', async () => {
|
||||||
setRequestMockImplementationOnce(undefined, { status: 0 }, '')
|
setRequestMockImplementationOnce(undefined, { status: 0 }, '')
|
||||||
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
||||||
|
|
||||||
const result = await getVectorConfig();
|
const result = await getVectorConfig();
|
||||||
expect(result).toEqual(generalConfig);
|
expect(result).toEqual(generalConfig);
|
||||||
});
|
});
|
||||||
@ -99,7 +99,7 @@ describe('getVectorConfig()', () => {
|
|||||||
it('returns general config when specific config returns a non-200 status', async () => {
|
it('returns general config when specific config returns a non-200 status', async () => {
|
||||||
setRequestMockImplementationOnce(undefined, { status: 401 })
|
setRequestMockImplementationOnce(undefined, { status: 401 })
|
||||||
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
||||||
|
|
||||||
const result = await getVectorConfig();
|
const result = await getVectorConfig();
|
||||||
expect(result).toEqual(generalConfig);
|
expect(result).toEqual(generalConfig);
|
||||||
});
|
});
|
||||||
@ -107,7 +107,7 @@ describe('getVectorConfig()', () => {
|
|||||||
it('returns general config when specific config returns an error', async () => {
|
it('returns general config when specific config returns an error', async () => {
|
||||||
setRequestMockImplementationOnce('err1')
|
setRequestMockImplementationOnce('err1')
|
||||||
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
setRequestMockImplementationOnce(undefined, { status: 200 }, JSON.stringify(generalConfig))
|
||||||
|
|
||||||
const result = await getVectorConfig();
|
const result = await getVectorConfig();
|
||||||
expect(result).toEqual(generalConfig);
|
expect(result).toEqual(generalConfig);
|
||||||
});
|
});
|
||||||
@ -119,4 +119,12 @@ describe('getVectorConfig()', () => {
|
|||||||
await expect(() => getVectorConfig()).rejects.toEqual({"err": "err-general", "response": undefined});
|
await expect(() => getVectorConfig()).rejects.toEqual({"err": "err-general", "response": undefined});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('rejects with an error when config is invalid JSON', async () => {
|
||||||
|
setRequestMockImplementationOnce('err-specific');
|
||||||
|
setRequestMockImplementationOnce(undefined, { status: 200 }, '{"invalid": "json",}');
|
||||||
|
|
||||||
|
await expect(() => getVectorConfig()).rejects.toEqual({
|
||||||
|
err: new SyntaxError("Unexpected token } in JSON at position 19"),
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
33
test/unit-tests/vector/platform/PWAPlatform-test.ts
Normal file
33
test/unit-tests/vector/platform/PWAPlatform-test.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2022 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import PWAPlatform from "../../../../src/vector/platform/PWAPlatform";
|
||||||
|
|
||||||
|
describe('PWAPlatform', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.clearAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("setNotificationCount", () => {
|
||||||
|
it("should call Navigator::setAppBadge", () => {
|
||||||
|
navigator.setAppBadge = jest.fn().mockResolvedValue(undefined);
|
||||||
|
const platform = new PWAPlatform();
|
||||||
|
expect(navigator.setAppBadge).not.toHaveBeenCalled();
|
||||||
|
platform.setNotificationCount(123);
|
||||||
|
expect(navigator.setAppBadge).toHaveBeenCalledWith(123);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@ -30,6 +30,13 @@ describe('WebPlatform', () => {
|
|||||||
expect(platform.getHumanReadableName()).toEqual('Web Platform');
|
expect(platform.getHumanReadableName()).toEqual('Web Platform');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('registers service worker', () => {
|
||||||
|
// @ts-ignore - mocking readonly object
|
||||||
|
navigator.serviceWorker = { register: jest.fn() };
|
||||||
|
new WebPlatform();
|
||||||
|
expect(navigator.serviceWorker.register).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
describe('notification support', () => {
|
describe('notification support', () => {
|
||||||
const mockNotification = {
|
const mockNotification = {
|
||||||
requestPermission: jest.fn(),
|
requestPermission: jest.fn(),
|
||||||
@ -50,7 +57,7 @@ describe('WebPlatform', () => {
|
|||||||
it('supportsNotifications returns true when platform supports notifications', () => {
|
it('supportsNotifications returns true when platform supports notifications', () => {
|
||||||
expect(new WebPlatform().supportsNotifications()).toBe(true);
|
expect(new WebPlatform().supportsNotifications()).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('maySendNotifications returns true when notification permissions are not granted', () => {
|
it('maySendNotifications returns true when notification permissions are not granted', () => {
|
||||||
expect(new WebPlatform().maySendNotifications()).toBe(false);
|
expect(new WebPlatform().maySendNotifications()).toBe(false);
|
||||||
});
|
});
|
||||||
@ -109,78 +116,76 @@ describe('WebPlatform', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('pollForUpdate()', () => {
|
describe('pollForUpdate()', () => {
|
||||||
|
|
||||||
it('should return not available and call showNoUpdate when current version matches most recent version', async () => {
|
it('should return not available and call showNoUpdate when current version matches most recent version', async () => {
|
||||||
process.env.VERSION = prodVersion;
|
process.env.VERSION = prodVersion;
|
||||||
setRequestMockImplementation(undefined, { status: 200}, prodVersion);
|
setRequestMockImplementation(undefined, { status: 200}, prodVersion);
|
||||||
const platform = new WebPlatform();
|
const platform = new WebPlatform();
|
||||||
|
|
||||||
const showUpdate = jest.fn();
|
const showUpdate = jest.fn();
|
||||||
const showNoUpdate = jest.fn();
|
const showNoUpdate = jest.fn();
|
||||||
const result = await platform.pollForUpdate(showUpdate, showNoUpdate);
|
const result = await platform.pollForUpdate(showUpdate, showNoUpdate);
|
||||||
|
|
||||||
expect(result).toEqual({ status: UpdateCheckStatus.NotAvailable });
|
expect(result).toEqual({ status: UpdateCheckStatus.NotAvailable });
|
||||||
expect(showUpdate).not.toHaveBeenCalled();
|
expect(showUpdate).not.toHaveBeenCalled();
|
||||||
expect(showNoUpdate).toHaveBeenCalled();
|
expect(showNoUpdate).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should strip v prefix from versions before comparing', async () => {
|
it('should strip v prefix from versions before comparing', async () => {
|
||||||
process.env.VERSION = prodVersion;
|
process.env.VERSION = prodVersion;
|
||||||
setRequestMockImplementation(undefined, { status: 200}, `v${prodVersion}`);
|
setRequestMockImplementation(undefined, { status: 200}, `v${prodVersion}`);
|
||||||
const platform = new WebPlatform();
|
const platform = new WebPlatform();
|
||||||
|
|
||||||
const showUpdate = jest.fn();
|
const showUpdate = jest.fn();
|
||||||
const showNoUpdate = jest.fn();
|
const showNoUpdate = jest.fn();
|
||||||
const result = await platform.pollForUpdate(showUpdate, showNoUpdate);
|
const result = await platform.pollForUpdate(showUpdate, showNoUpdate);
|
||||||
|
|
||||||
// versions only differ by v prefix, no update
|
// versions only differ by v prefix, no update
|
||||||
expect(result).toEqual({ status: UpdateCheckStatus.NotAvailable });
|
expect(result).toEqual({ status: UpdateCheckStatus.NotAvailable });
|
||||||
expect(showUpdate).not.toHaveBeenCalled();
|
expect(showUpdate).not.toHaveBeenCalled();
|
||||||
expect(showNoUpdate).toHaveBeenCalled();
|
expect(showNoUpdate).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return ready and call showUpdate when current version differs from most recent version', async () => {
|
it('should return ready and call showUpdate when current version differs from most recent version', async () => {
|
||||||
process.env.VERSION = '0.0.0'; // old version
|
process.env.VERSION = '0.0.0'; // old version
|
||||||
setRequestMockImplementation(undefined, { status: 200}, prodVersion);
|
setRequestMockImplementation(undefined, { status: 200}, prodVersion);
|
||||||
const platform = new WebPlatform();
|
const platform = new WebPlatform();
|
||||||
|
|
||||||
const showUpdate = jest.fn();
|
const showUpdate = jest.fn();
|
||||||
const showNoUpdate = jest.fn();
|
const showNoUpdate = jest.fn();
|
||||||
const result = await platform.pollForUpdate(showUpdate, showNoUpdate);
|
const result = await platform.pollForUpdate(showUpdate, showNoUpdate);
|
||||||
|
|
||||||
expect(result).toEqual({ status: UpdateCheckStatus.Ready });
|
expect(result).toEqual({ status: UpdateCheckStatus.Ready });
|
||||||
expect(showUpdate).toHaveBeenCalledWith('0.0.0', prodVersion);
|
expect(showUpdate).toHaveBeenCalledWith('0.0.0', prodVersion);
|
||||||
expect(showNoUpdate).not.toHaveBeenCalled();
|
expect(showNoUpdate).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return ready without showing update when user registered in last 24', async () => {
|
it('should return ready without showing update when user registered in last 24', async () => {
|
||||||
process.env.VERSION = '0.0.0'; // old version
|
process.env.VERSION = '0.0.0'; // old version
|
||||||
jest.spyOn(MatrixClientPeg, 'userRegisteredWithinLastHours').mockReturnValue(true);
|
jest.spyOn(MatrixClientPeg, 'userRegisteredWithinLastHours').mockReturnValue(true);
|
||||||
setRequestMockImplementation(undefined, { status: 200}, prodVersion);
|
setRequestMockImplementation(undefined, { status: 200}, prodVersion);
|
||||||
const platform = new WebPlatform();
|
const platform = new WebPlatform();
|
||||||
|
|
||||||
const showUpdate = jest.fn();
|
const showUpdate = jest.fn();
|
||||||
const showNoUpdate = jest.fn();
|
const showNoUpdate = jest.fn();
|
||||||
const result = await platform.pollForUpdate(showUpdate, showNoUpdate);
|
const result = await platform.pollForUpdate(showUpdate, showNoUpdate);
|
||||||
|
|
||||||
expect(result).toEqual({ status: UpdateCheckStatus.Ready });
|
expect(result).toEqual({ status: UpdateCheckStatus.Ready });
|
||||||
expect(showUpdate).not.toHaveBeenCalled();
|
expect(showUpdate).not.toHaveBeenCalled();
|
||||||
expect(showNoUpdate).not.toHaveBeenCalled();
|
expect(showNoUpdate).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return error when version check fails', async () => {
|
it('should return error when version check fails', async () => {
|
||||||
setRequestMockImplementation('oups');
|
setRequestMockImplementation('oups');
|
||||||
const platform = new WebPlatform();
|
const platform = new WebPlatform();
|
||||||
|
|
||||||
const showUpdate = jest.fn();
|
const showUpdate = jest.fn();
|
||||||
const showNoUpdate = jest.fn();
|
const showNoUpdate = jest.fn();
|
||||||
const result = await platform.pollForUpdate(showUpdate, showNoUpdate);
|
const result = await platform.pollForUpdate(showUpdate, showNoUpdate);
|
||||||
|
|
||||||
expect(result).toEqual({ status: UpdateCheckStatus.Error, detail: 'Unknown Error' });
|
expect(result).toEqual({ status: UpdateCheckStatus.Error, detail: 'Unknown Error' });
|
||||||
expect(showUpdate).not.toHaveBeenCalled();
|
expect(showUpdate).not.toHaveBeenCalled();
|
||||||
expect(showNoUpdate).not.toHaveBeenCalled();
|
expect(showNoUpdate).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
17
tsconfig.module_system.json
Normal file
17
tsconfig.module_system.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"jsx": "preserve",
|
||||||
|
"declaration": false,
|
||||||
|
"outDir": "./lib/module_system",
|
||||||
|
"lib": [
|
||||||
|
"es2019"
|
||||||
|
],
|
||||||
|
"types": [
|
||||||
|
"node"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"./module_system/**/*.ts"
|
||||||
|
]
|
||||||
|
}
|
38
yarn.lock
38
yarn.lock
@ -1094,6 +1094,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
regenerator-runtime "^0.13.4"
|
regenerator-runtime "^0.13.4"
|
||||||
|
|
||||||
|
"@babel/runtime@^7.17.9":
|
||||||
|
version "7.18.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4"
|
||||||
|
integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==
|
||||||
|
dependencies:
|
||||||
|
regenerator-runtime "^0.13.4"
|
||||||
|
|
||||||
"@babel/template@^7.16.7", "@babel/template@^7.3.3":
|
"@babel/template@^7.16.7", "@babel/template@^7.3.3":
|
||||||
version "7.16.7"
|
version "7.16.7"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155"
|
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155"
|
||||||
@ -1514,6 +1521,13 @@
|
|||||||
version "3.2.8"
|
version "3.2.8"
|
||||||
resolved "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz#8d53636d045e1776e2a2ec6613e57330dd9ce856"
|
resolved "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz#8d53636d045e1776e2a2ec6613e57330dd9ce856"
|
||||||
|
|
||||||
|
"@matrix-org/react-sdk-module-api@^0.0.3":
|
||||||
|
version "0.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@matrix-org/react-sdk-module-api/-/react-sdk-module-api-0.0.3.tgz#a7ac1b18a72d18d08290b81fa33b0d8d00a77d2b"
|
||||||
|
integrity sha512-jQmLhVIanuX0g7Jx1OIqlzs0kp72PfSpv3umi55qVPYcAPQmO252AUs0vncatK8O4e013vohdnNhly19a/kmLQ==
|
||||||
|
dependencies:
|
||||||
|
"@babel/runtime" "^7.17.9"
|
||||||
|
|
||||||
"@mrmlnc/readdir-enhanced@^2.2.1":
|
"@mrmlnc/readdir-enhanced@^2.2.1":
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
|
resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
|
||||||
@ -8375,10 +8389,10 @@ matrix-events-sdk@^0.0.1-beta.7:
|
|||||||
resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1-beta.7.tgz#5ffe45eba1f67cc8d7c2377736c728b322524934"
|
resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1-beta.7.tgz#5ffe45eba1f67cc8d7c2377736c728b322524934"
|
||||||
integrity sha512-9jl4wtWanUFSy2sr2lCjErN/oC8KTAtaeaozJtrgot1JiQcEI4Rda9OLgQ7nLKaqb4Z/QUx/fR3XpDzm5Jy1JA==
|
integrity sha512-9jl4wtWanUFSy2sr2lCjErN/oC8KTAtaeaozJtrgot1JiQcEI4Rda9OLgQ7nLKaqb4Z/QUx/fR3XpDzm5Jy1JA==
|
||||||
|
|
||||||
matrix-js-sdk@19.0.0:
|
matrix-js-sdk@19.1.0:
|
||||||
version "19.0.0"
|
version "19.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-19.0.0.tgz#c4be8365d08126976a1a3de053fe12b5dd7d4a0d"
|
resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-19.1.0.tgz#acf1f8c966c2a3ea7f3eefef148959292b50275b"
|
||||||
integrity sha512-UWFEhV3XlBRY/9dLKlFgBzd9vynN+U4ratE0BVvM3Zw8FQa+a8rrDwJRIpJnWoxDB7IjJ188A0TxFqzxkQoEBQ==
|
integrity sha512-dV3sO8x4ZsHVsVfOK6PNkT80LphMBilK3qX0+3FM8VHUigzzy3fupR6xbWftcQ+E7hyQTl64+VB5nExLUfqt9A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.12.5"
|
"@babel/runtime" "^7.12.5"
|
||||||
another-json "^0.2.0"
|
another-json "^0.2.0"
|
||||||
@ -8399,13 +8413,14 @@ matrix-mock-request@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
expect "^1.20.2"
|
expect "^1.20.2"
|
||||||
|
|
||||||
matrix-react-sdk@3.48.0:
|
matrix-react-sdk@3.49.0:
|
||||||
version "3.48.0"
|
version "3.49.0"
|
||||||
resolved "https://registry.yarnpkg.com/matrix-react-sdk/-/matrix-react-sdk-3.48.0.tgz#c64f40f3777fb658805b3ffb806b7f789175b98d"
|
resolved "https://registry.yarnpkg.com/matrix-react-sdk/-/matrix-react-sdk-3.49.0.tgz#cc96fc792d061f9beb209235f10c4a54155740bf"
|
||||||
integrity sha512-7GNy+2O9AUDSjLbJX2Fi+WkyL4q8QvSzXIvkCOftkDjV1R7BTpNHG5ZwINbzXKsoca6fx+4zoV/k37H7RsgvCg==
|
integrity sha512-uWMr8QOTzDMu0XtTqQ7KRmuktD35A0G8yS2sBF7lYlGqimg2z8NuixwOZPCU4UiMaGZkTVmggpPAmRkQ+f6j6A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.12.5"
|
"@babel/runtime" "^7.12.5"
|
||||||
"@matrix-org/analytics-events" "^0.1.1"
|
"@matrix-org/analytics-events" "^0.1.1"
|
||||||
|
"@matrix-org/react-sdk-module-api" "^0.0.3"
|
||||||
"@sentry/browser" "^6.11.0"
|
"@sentry/browser" "^6.11.0"
|
||||||
"@sentry/tracing" "^6.11.0"
|
"@sentry/tracing" "^6.11.0"
|
||||||
"@testing-library/react" "^12.1.5"
|
"@testing-library/react" "^12.1.5"
|
||||||
@ -8441,7 +8456,7 @@ matrix-react-sdk@3.48.0:
|
|||||||
maplibre-gl "^1.15.2"
|
maplibre-gl "^1.15.2"
|
||||||
matrix-encrypt-attachment "^1.0.3"
|
matrix-encrypt-attachment "^1.0.3"
|
||||||
matrix-events-sdk "^0.0.1-beta.7"
|
matrix-events-sdk "^0.0.1-beta.7"
|
||||||
matrix-js-sdk "19.0.0"
|
matrix-js-sdk "19.1.0"
|
||||||
matrix-widget-api "^0.1.0-beta.18"
|
matrix-widget-api "^0.1.0-beta.18"
|
||||||
minimist "^1.2.5"
|
minimist "^1.2.5"
|
||||||
opus-recorder "^8.0.3"
|
opus-recorder "^8.0.3"
|
||||||
@ -13438,6 +13453,11 @@ yaml@^1.10.0:
|
|||||||
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
|
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
|
||||||
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
|
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
|
||||||
|
|
||||||
|
yaml@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.0.1.tgz#71886d6021f3da28169dbefde78d4dd0f8d83650"
|
||||||
|
integrity sha512-1NpAYQ3wjzIlMs0mgdBmYzLkFgWBIWrzYVDYfrixhoFNNgJ444/jT2kUT2sicRbJES3oQYRZugjB6Ro8SjKeFg==
|
||||||
|
|
||||||
yargs-parser@^13.1.2:
|
yargs-parser@^13.1.2:
|
||||||
version "13.1.2"
|
version "13.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
|
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
|
||||||
|
Loading…
Reference in New Issue
Block a user