UNPKG

matrix-react-sdk

Version:
76 lines (70 loc) 11.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageEventPreview = void 0; var _matrix = require("matrix-js-sdk/src/matrix"); var _languageHandler = require("../../../languageHandler"); var _utils = require("./utils"); var _HtmlUtils = require("../../../HtmlUtils"); var _Reply = require("../../../utils/Reply"); var _types = require("../../../voice-broadcast/types"); /* Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ class MessageEventPreview { getTextFor(event, tagId, isThread) { let eventContent = event.getContent(); // no preview for broadcast chunks if (eventContent[_types.VoiceBroadcastChunkEventType]) return null; if (event.isRelation(_matrix.RelationType.Replace)) { // It's an edit, generate the preview on the new text eventContent = event.getContent()["m.new_content"]; } if (!eventContent?.["body"]) return null; // invalid for our purposes let body = eventContent["body"].trim(); if (!body) return null; // invalid event, no preview // A msgtype is actually required in the spec but the app is a bit softer on this requirement const msgtype = eventContent["msgtype"] ?? _matrix.MsgType.Text; const hasHtml = eventContent.format === "org.matrix.custom.html" && eventContent.formatted_body; if (hasHtml) { body = eventContent.formatted_body; } // XXX: Newer relations have a getRelation() function which is not compatible with replies. if (event.getWireContent()["m.relates_to"]?.["m.in_reply_to"]) { // If this is a reply, get the real reply and use that if (hasHtml) { body = ((0, _Reply.stripHTMLReply)(body) || "").trim(); } else { body = ((0, _Reply.stripPlainReply)(body) || "").trim(); } if (!body) return null; // invalid event, no preview } if (hasHtml) { const sanitised = (0, _HtmlUtils.getHtmlText)(body.replace(/<br\/?>/gi, "\n")); // replace line breaks before removing them // run it through DOMParser to fixup encoded html entities body = new DOMParser().parseFromString(sanitised, "text/html").documentElement.textContent; } body = (0, _languageHandler.sanitizeForTranslation)(body); if (msgtype === _matrix.MsgType.Emote) { return (0, _languageHandler._t)("event_preview|m.emote", { senderName: (0, _utils.getSenderName)(event), emote: body }); } const roomId = event.getRoomId(); if (isThread || (0, _utils.isSelf)(event) || roomId && !(0, _utils.shouldPrefixMessagesIn)(roomId, tagId)) { return body; } else { return (0, _languageHandler._t)("event_preview|m.text", { senderName: (0, _utils.getSenderName)(event), message: body }); } } } exports.MessageEventPreview = MessageEventPreview; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfdXRpbHMiLCJfSHRtbFV0aWxzIiwiX1JlcGx5IiwiX3R5cGVzIiwiTWVzc2FnZUV2ZW50UHJldmlldyIsImdldFRleHRGb3IiLCJldmVudCIsInRhZ0lkIiwiaXNUaHJlYWQiLCJldmVudENvbnRlbnQiLCJnZXRDb250ZW50IiwiVm9pY2VCcm9hZGNhc3RDaHVua0V2ZW50VHlwZSIsImlzUmVsYXRpb24iLCJSZWxhdGlvblR5cGUiLCJSZXBsYWNlIiwiYm9keSIsInRyaW0iLCJtc2d0eXBlIiwiTXNnVHlwZSIsIlRleHQiLCJoYXNIdG1sIiwiZm9ybWF0IiwiZm9ybWF0dGVkX2JvZHkiLCJnZXRXaXJlQ29udGVudCIsInN0cmlwSFRNTFJlcGx5Iiwic3RyaXBQbGFpblJlcGx5Iiwic2FuaXRpc2VkIiwiZ2V0SHRtbFRleHQiLCJyZXBsYWNlIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiZG9jdW1lbnRFbGVtZW50IiwidGV4dENvbnRlbnQiLCJzYW5pdGl6ZUZvclRyYW5zbGF0aW9uIiwiRW1vdGUiLCJfdCIsInNlbmRlck5hbWUiLCJnZXRTZW5kZXJOYW1lIiwiZW1vdGUiLCJyb29tSWQiLCJnZXRSb29tSWQiLCJpc1NlbGYiLCJzaG91bGRQcmVmaXhNZXNzYWdlc0luIiwibWVzc2FnZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3RvcmVzL3Jvb20tbGlzdC9wcmV2aWV3cy9NZXNzYWdlRXZlbnRQcmV2aWV3LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IE1hdHJpeEV2ZW50LCBNc2dUeXBlLCBSZWxhdGlvblR5cGUgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5cbmltcG9ydCB7IElQcmV2aWV3IH0gZnJvbSBcIi4vSVByZXZpZXdcIjtcbmltcG9ydCB7IFRhZ0lEIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgX3QsIHNhbml0aXplRm9yVHJhbnNsYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyBnZXRTZW5kZXJOYW1lLCBpc1NlbGYsIHNob3VsZFByZWZpeE1lc3NhZ2VzSW4gfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0SHRtbFRleHQgfSBmcm9tIFwiLi4vLi4vLi4vSHRtbFV0aWxzXCI7XG5pbXBvcnQgeyBzdHJpcEhUTUxSZXBseSwgc3RyaXBQbGFpblJlcGx5IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL1JlcGx5XCI7XG5pbXBvcnQgeyBWb2ljZUJyb2FkY2FzdENodW5rRXZlbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3ZvaWNlLWJyb2FkY2FzdC90eXBlc1wiO1xuXG5leHBvcnQgY2xhc3MgTWVzc2FnZUV2ZW50UHJldmlldyBpbXBsZW1lbnRzIElQcmV2aWV3IHtcbiAgICBwdWJsaWMgZ2V0VGV4dEZvcihldmVudDogTWF0cml4RXZlbnQsIHRhZ0lkPzogVGFnSUQsIGlzVGhyZWFkPzogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBsZXQgZXZlbnRDb250ZW50ID0gZXZlbnQuZ2V0Q29udGVudCgpO1xuXG4gICAgICAgIC8vIG5vIHByZXZpZXcgZm9yIGJyb2FkY2FzdCBjaHVua3NcbiAgICAgICAgaWYgKGV2ZW50Q29udGVudFtWb2ljZUJyb2FkY2FzdENodW5rRXZlbnRUeXBlXSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKGV2ZW50LmlzUmVsYXRpb24oUmVsYXRpb25UeXBlLlJlcGxhY2UpKSB7XG4gICAgICAgICAgICAvLyBJdCdzIGFuIGVkaXQsIGdlbmVyYXRlIHRoZSBwcmV2aWV3IG9uIHRoZSBuZXcgdGV4dFxuICAgICAgICAgICAgZXZlbnRDb250ZW50ID0gZXZlbnQuZ2V0Q29udGVudCgpW1wibS5uZXdfY29udGVudFwiXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZXZlbnRDb250ZW50Py5bXCJib2R5XCJdKSByZXR1cm4gbnVsbDsgLy8gaW52YWxpZCBmb3Igb3VyIHB1cnBvc2VzXG5cbiAgICAgICAgbGV0IGJvZHkgPSBldmVudENvbnRlbnRbXCJib2R5XCJdLnRyaW0oKTtcbiAgICAgICAgaWYgKCFib2R5KSByZXR1cm4gbnVsbDsgLy8gaW52YWxpZCBldmVudCwgbm8gcHJldmlld1xuICAgICAgICAvLyBBIG1zZ3R5cGUgaXMgYWN0dWFsbHkgcmVxdWlyZWQgaW4gdGhlIHNwZWMgYnV0IHRoZSBhcHAgaXMgYSBiaXQgc29mdGVyIG9uIHRoaXMgcmVxdWlyZW1lbnRcbiAgICAgICAgY29uc3QgbXNndHlwZSA9IGV2ZW50Q29udGVudFtcIm1zZ3R5cGVcIl0gPz8gTXNnVHlwZS5UZXh0O1xuXG4gICAgICAgIGNvbnN0IGhhc0h0bWwgPSBldmVudENvbnRlbnQuZm9ybWF0ID09PSBcIm9yZy5tYXRyaXguY3VzdG9tLmh0bWxcIiAmJiBldmVudENvbnRlbnQuZm9ybWF0dGVkX2JvZHk7XG4gICAgICAgIGlmIChoYXNIdG1sKSB7XG4gICAgICAgICAgICBib2R5ID0gZXZlbnRDb250ZW50LmZvcm1hdHRlZF9ib2R5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWFhYOiBOZXdlciByZWxhdGlvbnMgaGF2ZSBhIGdldFJlbGF0aW9uKCkgZnVuY3Rpb24gd2hpY2ggaXMgbm90IGNvbXBhdGlibGUgd2l0aCByZXBsaWVzLlxuICAgICAgICBpZiAoZXZlbnQuZ2V0V2lyZUNvbnRlbnQoKVtcIm0ucmVsYXRlc190b1wiXT8uW1wibS5pbl9yZXBseV90b1wiXSkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlcGx5LCBnZXQgdGhlIHJlYWwgcmVwbHkgYW5kIHVzZSB0aGF0XG4gICAgICAgICAgICBpZiAoaGFzSHRtbCkge1xuICAgICAgICAgICAgICAgIGJvZHkgPSAoc3RyaXBIVE1MUmVwbHkoYm9keSkgfHwgXCJcIikudHJpbSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBib2R5ID0gKHN0cmlwUGxhaW5SZXBseShib2R5KSB8fCBcIlwiKS50cmltKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWJvZHkpIHJldHVybiBudWxsOyAvLyBpbnZhbGlkIGV2ZW50LCBubyBwcmV2aWV3XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzSHRtbCkge1xuICAgICAgICAgICAgY29uc3Qgc2FuaXRpc2VkID0gZ2V0SHRtbFRleHQoYm9keS5yZXBsYWNlKC88YnJcXC8/Pi9naSwgXCJcXG5cIikpOyAvLyByZXBsYWNlIGxpbmUgYnJlYWtzIGJlZm9yZSByZW1vdmluZyB0aGVtXG4gICAgICAgICAgICAvLyBydW4gaXQgdGhyb3VnaCBET01QYXJzZXIgdG8gZml4dXAgZW5jb2RlZCBodG1sIGVudGl0aWVzXG4gICAgICAgICAgICBib2R5ID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzYW5pdGlzZWQsIFwidGV4dC9odG1sXCIpLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkgPSBzYW5pdGl6ZUZvclRyYW5zbGF0aW9uKGJvZHkpO1xuXG4gICAgICAgIGlmIChtc2d0eXBlID09PSBNc2dUeXBlLkVtb3RlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3QoXCJldmVudF9wcmV2aWV3fG0uZW1vdGVcIiwgeyBzZW5kZXJOYW1lOiBnZXRTZW5kZXJOYW1lKGV2ZW50KSwgZW1vdGU6IGJvZHkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb29tSWQgPSBldmVudC5nZXRSb29tSWQoKTtcblxuICAgICAgICBpZiAoaXNUaHJlYWQgfHwgaXNTZWxmKGV2ZW50KSB8fCAocm9vbUlkICYmICFzaG91bGRQcmVmaXhNZXNzYWdlc0luKHJvb21JZCwgdGFnSWQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGJvZHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX3QoXCJldmVudF9wcmV2aWV3fG0udGV4dFwiLCB7IHNlbmRlck5hbWU6IGdldFNlbmRlck5hbWUoZXZlbnQpLCBtZXNzYWdlOiBib2R5IH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFRQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFJQSxJQUFBQyxnQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQVlPLE1BQU1NLG1CQUFtQixDQUFxQjtFQUMxQ0MsVUFBVUEsQ0FBQ0MsS0FBa0IsRUFBRUMsS0FBYSxFQUFFQyxRQUFrQixFQUFpQjtJQUNwRixJQUFJQyxZQUFZLEdBQUdILEtBQUssQ0FBQ0ksVUFBVSxDQUFDLENBQUM7O0lBRXJDO0lBQ0EsSUFBSUQsWUFBWSxDQUFDRSxtQ0FBNEIsQ0FBQyxFQUFFLE9BQU8sSUFBSTtJQUUzRCxJQUFJTCxLQUFLLENBQUNNLFVBQVUsQ0FBQ0Msb0JBQVksQ0FBQ0MsT0FBTyxDQUFDLEVBQUU7TUFDeEM7TUFDQUwsWUFBWSxHQUFHSCxLQUFLLENBQUNJLFVBQVUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQ3REO0lBRUEsSUFBSSxDQUFDRCxZQUFZLEdBQUcsTUFBTSxD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