diff --git a/docs/labs.md b/docs/labs.md index 3dff4474ca..eb2956f22e 100644 --- a/docs/labs.md +++ b/docs/labs.md @@ -124,12 +124,13 @@ or feedback for this functionality at this time. Allows users to receive encrypted messages by creating a device that is stored encrypted on the server, as described in [MSC2697](https://github.com/matrix-org/matrix-doc/pull/2697). -## Voice messages (`feature_voice_messages`) [In Development] +## Voice messages (`feature_voice_messages`) -An in-progress implementation of [MSC2516](https://github.com/matrix-org/matrix-doc/pull/2516) to add -[voice messages](https://github.com/vector-im/element-web/issues/1358) to Element. Note that this feature -is currently under active development and therefore is entirely incomplete and may not work at all - it -is not recommended for general use at this time. +Offers a way to send more time-sensitive information through the power of voice. When enabled, use the microphone +icon on the lower right to start recording your message. You will have a chance to review after you're done recording, +and if it sounds fine then send it off for the rest of the room to hear. + +Voice messages are automatically downloaded to ensure they are ready for playback as soon as possible. ## Do not disturb (`feature_dnd`) diff --git a/package.json b/package.json index ecc2014244..7110325a81 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "prop-types": "^15.7.2", "react": "^16.14.0", "react-dom": "^16.14.0", - "sanitize-html": "github:apostrophecms/sanitize-html#3c7f93f2058f696f5359e3e58d464161647226db", + "sanitize-html": "^2.3.2", "ua-parser-js": "^0.7.24" }, "devDependencies": { @@ -93,7 +93,7 @@ "@types/node": "^14.14.22", "@types/react": "^16.9", "@types/react-dom": "^16.9.10", - "@types/sanitize-html": "^1.27.1", + "@types/sanitize-html": "^2.3.1", "autoprefixer": "^9.8.6", "babel-eslint": "^10.1.0", "babel-jest": "^26.6.3", @@ -168,7 +168,10 @@ "^react$": "/node_modules/react", "^react-dom$": "/node_modules/react-dom", "^matrix-js-sdk$": "/node_modules/matrix-js-sdk/src", - "^matrix-react-sdk$": "/node_modules/matrix-react-sdk/src" + "^matrix-react-sdk$": "/node_modules/matrix-react-sdk/src", + "decoderWorker\\.min\\.js": "/node_modules/matrix-react-sdk/__mocks__/empty.js", + "decoderWorker\\.min\\.wasm": "/node_modules/matrix-react-sdk/__mocks__/empty.js", + "waveWorker\\.min\\.js": "/node_modules/matrix-react-sdk/__mocks__/empty.js" }, "transformIgnorePatterns": [ "/node_modules/(?!matrix-js-sdk).+$", diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 0052218a9f..3fdd5390a7 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -2,7 +2,7 @@ "powered by Matrix": "betrieben mit Matrix", "Dismiss": "Ausblenden", "Unknown device": "Unbekanntes Gerät", - "You need to be using HTTPS to place a screen-sharing call.": "Du musst HTTPS nutzen um einen Anruf mit Bildschirmfreigabe durchzuführen.", + "You need to be using HTTPS to place a screen-sharing call.": "Du musst HTTPS nutzen, um einen Anruf mit Bildschirmfreigabe durchzuführen.", "Welcome to Element": "Willkommen bei Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung mittels [matrix]", "Sign In": "Anmelden", diff --git a/src/i18n/strings/fa.json b/src/i18n/strings/fa.json index 2b504cf382..38b4441b00 100644 --- a/src/i18n/strings/fa.json +++ b/src/i18n/strings/fa.json @@ -26,11 +26,12 @@ "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s%(browserName)s، %(osName)s", "Unsupported browser": "مرورگر پش‬تبانی نشده", "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 از ویژگی های پیشرفته مرورگر استفاده میکند که در مرورگر فعلی شما پشتیبانی نمیشوند.", "Please install Chrome, Firefox, or Safari for the best experience.": "لطفا برای تجربه بهتر کروم، فایرفاکس، یا سافاری را نصب کنید.", "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": "از خطرات این کار آگاهم و مایلم که ادامه بدهم", "Go to element.io": "برو به element.io", "Failed to start": "مشکل در آغاز", - "Powered by Matrix": "قدرت‌گرفته از ماتریکس" + "Powered by Matrix": "قدرت‌گرفته از ماتریکس", + "Use %(brand)s on mobile": "استفاده از %(brand)s روی گوشی" } diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 4c9329cf0c..19f5e8e455 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -32,5 +32,6 @@ "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s używa zaawansowanych funkcji przeglądarki, które nie są dostępne w twojej przeglądarce.", "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfiguracja Elementa zawiera niepoprawny JSON. Popraw konfiguracje i odśwież stronę.", "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" } diff --git a/src/i18n/strings/vi.json b/src/i18n/strings/vi.json index 03581c75ea..6547c6f79f 100644 --- a/src/i18n/strings/vi.json +++ b/src/i18n/strings/vi.json @@ -6,7 +6,7 @@ "Welcome to Element": "Chào mừng tới Element", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat phân tán, mã hóa & giao tiếp được tài trợ bởi [matrix]", "Unexpected error preparing the app. See console for details.": "Lỗi xảy ra trong lúc chuẩn bị app. Xem console log để biết chi tiết.", - "The message from the parser is: %(message)s": "Nội dung tin là: %(message)s", + "The message from the parser is: %(message)s": "Thông báo của trình xử lý là: %(message)s", "Invalid JSON": "JSON không hợp lệ", "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Thiết lập không hợp lệ: chỉ có thể điền một trong số default_server_config, default_server_name, hoặc default_hs_url.", "Invalid configuration: no default server specified.": "Cấu hình không hợp lệ: máy chủ mặc định không được thiết lập.", @@ -23,8 +23,15 @@ "Unsupported browser": "Trình duyệt không được hỗ trợ", "Go to your browser to complete Sign In": "Mở trình duyệt web để hoàn thành đăng nhập", "%(brand)s Desktop (%(platformName)s)": "%(brand)s Máy tính để bàn (%(platformName)s)", - "Previous/next recently visited room or community": "Phòng chat hoặc cộng đồng gần đây trước/tiếp theo", + "Previous/next recently visited room or community": "Phòng chat hoặc cộng đồng đã đi đến gần đây trước/tiếp theo", "Open user settings": "Mở cài đặt người dùng", "Open": "Mở", - "Unable to load config file: please refresh the page to try again.": "Không thể tải tệp cấu hình: hãy làm mới trang để thử lại." + "Unable to load config file: please refresh the page to try again.": "Không thể tải tệp cấu hình: hãy làm mới trang để thử lại.", + "Failed to start": "Khởi động thất bại", + "Use %(brand)s on mobile": "Sử dụng %(brand)s trên di động", + "Powered by Matrix": "Được chạy bởi công nghệ Matrix", + "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", + "Missing indexeddb worker script!": "Thiếu tệp lệnh làm việc của indexeddb!", + "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Thiết lập Element của bạn chứa JSON không hợp lệ. Vui lòng sửa vấn đề và tải lại trang.", + "Your Element is misconfigured": "Element của bạn bị thiết lập sai" } diff --git a/webpack.config.js b/webpack.config.js index 560beec121..9d7fa703d9 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -47,6 +47,11 @@ module.exports = (env, argv) => { return { ...development, + node: { + // Mock out the NodeFS module: The opus decoder imports this wrongly. + fs: 'empty', + }, + entry: { "bundle": "./src/vector/index.ts", "indexeddb-worker": "./src/vector/indexeddb-worker.js", @@ -278,6 +283,43 @@ module.exports = (env, argv) => { outputPath: '.', }, }, + { + // This is from the same place as the encoderWorker above, but only needed + // for Safari support. + test: /decoderWorker\.min\.js$/, + loader: "file-loader", + type: "javascript/auto", // https://github.com/webpack/webpack/issues/6725 + options: { + // We deliberately override the name so it makes sense in debugging + name: 'opus-decoderWorker.min.[hash:7].[ext]', + outputPath: '.', + }, + }, + { + // This is from the same place as the encoderWorker above, but only needed + // for Safari support. + test: /decoderWorker\.min\.wasm$/, + loader: "file-loader", + type: "javascript/auto", // https://github.com/webpack/webpack/issues/6725 + options: { + // We deliberately don't change the name because the decoderWorker has this + // hardcoded. This is here to avoid the default wasm rule from adding a hash. + name: 'decoderWorker.min.wasm', + outputPath: '.', + }, + }, + { + // This is from the same place as the encoderWorker above, but only needed + // for Safari support. + test: /waveWorker\.min\.js$/, + loader: "file-loader", + type: "javascript/auto", // https://github.com/webpack/webpack/issues/6725 + options: { + // We deliberately override the name so it makes sense in debugging + name: 'wave-encoderWorker.min.[hash:7].[ext]', + outputPath: '.', + }, + }, { // cache-bust languages.json file placed in // element-web/webapp/i18n during build by copy-res.js diff --git a/yarn.lock b/yarn.lock index 15d2048f9b..c7a9216834 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1561,12 +1561,12 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/sanitize-html@^1.27.1": - version "1.27.1" - resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-1.27.1.tgz#1fc4b67edd6296eeb366960d13cd01f5d6bffdcd" - integrity sha512-TW5gfZYplKQYO8003WrxaDgwyJsEG74920S+Ei7zB9mbUFgm7l2NvFAumXzxL+1fOwM2I9A+G/1rgiEebQOxcQ== +"@types/sanitize-html@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.3.1.tgz#094d696b83b7394b016e96342bbffa6a028795ce" + integrity sha512-+UT/XRluJuCunRftwO6OzG6WOBgJ+J3sROIoSJWX+7PB2FtTJTEJLrHCcNwzCQc0r60bej3WAbaigK+VZtZCGw== dependencies: - htmlparser2 "^4.1.0" + htmlparser2 "^6.0.0" "@types/source-list-map@*": version "0.1.2" @@ -4051,13 +4051,6 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== - dependencies: - domelementtype "^2.0.1" - domhandler@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e" @@ -4073,7 +4066,7 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.0.0, domutils@^2.4.3, domutils@^2.4.4: +domutils@^2.4.3, domutils@^2.4.4: version "2.4.4" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3" integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA== @@ -5848,16 +5841,6 @@ htmlparser2@^3.10.0, htmlparser2@^3.10.1: inherits "^2.0.1" readable-stream "^3.1.1" -htmlparser2@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" - htmlparser2@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.0.tgz#c2da005030390908ca4c91e5629e418e0665ac01" @@ -10711,18 +10694,6 @@ sanitize-html@^2.3.2: parse-srcset "^1.0.2" postcss "^8.0.2" -"sanitize-html@github:apostrophecms/sanitize-html#3c7f93f2058f696f5359e3e58d464161647226db": - version "2.0.0-rc.3" - resolved "https://codeload.github.com/apostrophecms/sanitize-html/tar.gz/3c7f93f2058f696f5359e3e58d464161647226db" - dependencies: - deepmerge "^4.2.2" - escape-string-regexp "^4.0.0" - htmlparser2 "^4.1.0" - is-plain-object "^5.0.0" - klona "^2.0.3" - postcss "^8.0.2" - srcset "^3.0.0" - sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -11195,11 +11166,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -srcset@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/srcset/-/srcset-3.0.0.tgz#8afd8b971362dfc129ae9c1a99b3897301ce6441" - integrity sha512-D59vF08Qzu/C4GAOXVgMTLfgryt5fyWo93FZyhEWANo0PokFz/iWdDe13mX3O5TRf6l8vMTqckAfR4zPiaH0yQ== - sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"