diff --git a/src/matrix/room/timeline/entries/BaseEventEntry.js b/src/matrix/room/timeline/entries/BaseEventEntry.js
index a106af58..6893b890 100644
--- a/src/matrix/room/timeline/entries/BaseEventEntry.js
+++ b/src/matrix/room/timeline/entries/BaseEventEntry.js
@@ -18,11 +18,7 @@ import {BaseEntry} from "./BaseEntry.js";
import {REDACTION_TYPE} from "../../common.js";
import {createAnnotation, ANNOTATION_RELATION_TYPE, getRelationFromContent} from "../relations.js";
import {PendingAnnotation} from "../PendingAnnotation.js";
-import {createReply, fallbackBlurb, fallbackPrefix} from "./reply.js"
-
-function htmlEscape(string) {
- return string.replace(/&/g, "&").replace(//g, ">");
-}
+import {reply} from "./reply.js"
/** Deals mainly with local echo for relations and redactions,
* so it is shared between PendingEventEntry and EventEntry */
@@ -157,26 +153,7 @@ export class BaseEventEntry extends BaseEntry {
}
reply(msgtype, body) {
- // TODO check for absense of sender / body / msgtype / etc?
- let blurb = fallbackBlurb(this.content.msgtype);
- const prefix = fallbackPrefix(this.content.msgtype);
- const sender = this.sender;
- const name = this.displayName || sender;
-
- const formattedBody = blurb || this.content.formatted_body ||
- (this.content.body && htmlEscape(this.content.body)) || "";
- const formattedFallback = `In reply to ${prefix}` +
- `${name}
` +
- `${formattedBody}
`;
-
- const plainBody = blurb || this.content.body || "";
- const bodyLines = plainBody.split("\n");
- bodyLines[0] = `> ${prefix}<${sender}> ${bodyLines[0]}`
- const plainFallback = bodyLines.join("\n> ");
-
- const newBody = plainFallback + '\n\n' + body;
- const newFormattedBody = formattedFallback + htmlEscape(body);
- return createReply(this.id, msgtype, newBody, newFormattedBody);
+ return reply(this, msgtype, body);
}
/** takes both remote event id and local txn id into account, see overriding in PendingEventEntry */
diff --git a/src/matrix/room/timeline/entries/reply.js b/src/matrix/room/timeline/entries/reply.js
index 00d591e0..7afae036 100644
--- a/src/matrix/room/timeline/entries/reply.js
+++ b/src/matrix/room/timeline/entries/reply.js
@@ -1,5 +1,24 @@
+/*
+Copyright 2021 The Matrix.org Foundation C.I.C.
-export function fallbackBlurb(msgtype) {
+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.
+*/
+
+function htmlEscape(string) {
+ return string.replace(/&/g, "&").replace(//g, ">");
+}
+
+function fallbackBlurb(msgtype) {
switch (msgtype) {
case "m.file":
return "sent a file.";
@@ -13,11 +32,11 @@ export function fallbackBlurb(msgtype) {
return null;
}
-export function fallbackPrefix(msgtype) {
+function fallbackPrefix(msgtype) {
return msgtype === "m.emote" ? "* " : "";
}
-export function createReply(targetId, msgtype, body, formattedBody) {
+function createReply(targetId, msgtype, body, formattedBody) {
return {
msgtype,
body,
@@ -31,3 +50,25 @@ export function createReply(targetId, msgtype, body, formattedBody) {
};
}
+export function reply(entry, msgtype, body) {
+ // TODO check for absense of sender / body / msgtype / etc?
+ let blurb = fallbackBlurb(entry.content.msgtype);
+ const prefix = fallbackPrefix(entry.content.msgtype);
+ const sender = entry.sender;
+ const name = entry.displayName || sender;
+
+ const formattedBody = blurb || entry.content.formatted_body ||
+ (entry.content.body && htmlEscape(entry.content.body)) || "";
+ const formattedFallback = `In reply to ${prefix}` +
+ `${name}
` +
+ `${formattedBody}
`;
+
+ const plainBody = blurb || entry.content.body || "";
+ const bodyLines = plainBody.split("\n");
+ bodyLines[0] = `> ${prefix}<${sender}> ${bodyLines[0]}`
+ const plainFallback = bodyLines.join("\n> ");
+
+ const newBody = plainFallback + '\n\n' + body;
+ const newFormattedBody = formattedFallback + htmlEscape(body);
+ return createReply(entry.id, msgtype, newBody, newFormattedBody);
+}