-
Notifications
You must be signed in to change notification settings - Fork 380
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MSC3765: Rich text in room topics #3765
base: main
Are you sure you want to change the base?
Changes from 10 commits
9b914c6
06d315d
09c7014
1d0031a
3b572e7
6270109
af184dd
aa373d1
ea93852
a6b1555
95fb38a
f915cc4
385bf0b
bb726db
1b4682e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
# MSC3765: Rich text in room topics | ||
|
||
## Problem | ||
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Topics are a central piece of room meta data and usually made easily | ||
accessible to room members in clients. As a result, room administrators | ||
often extend the use of topics to collect helpful peripheral information | ||
that is related to the room’s purpose. Most commonly these are links to | ||
external resources. At the moment, topics are limited to [plain text] | ||
which, depending on the number and length of URLs and other content, | ||
easily gets inconvenient to consume and calls for richer text formatting | ||
options. | ||
|
||
## Proposal | ||
|
||
Drawing from extensible events as described in [MSC1767], | ||
`m.room.topic` is formally deprecated and replaced with a new `m.topic` | ||
event type. The latter contains a new content block `m.topic` which wraps | ||
an `m.text` content block that allows representing the room topic in | ||
different mime types. | ||
|
||
``` json5 | ||
{ | ||
"type": "m.topic", | ||
"state_key": "", | ||
"content": { | ||
"m.topic": { | ||
"m.text": [{ | ||
"body": "All about **pizza** | [Recipes](https://recipes.pizza.net)" | ||
}, { | ||
"mimetype": "text/html", | ||
"body": "All about <b>pizza</b> | <a href=\"https://recipes.pizza.net\">Recipes</a>" | ||
}] | ||
} | ||
}, | ||
... | ||
} | ||
``` | ||
Comment on lines
+22
to
+38
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. replace with example of m.room.topic event |
||
|
||
Details of how `m.text` works may be found in [MSC1767] and are not | ||
repeated here. | ||
|
||
The wrapping `m.topic` content block is similar to `m.caption` for file | ||
uploads as defined in [MSC3551]. It avoids clients accidentally rendering | ||
the topic state event as a room message. | ||
|
||
In order to prevent formatting abuse in room topics, clients are | ||
encouraged to treat the first two lines as the shorthand topic and the | ||
remainder as additional information. Specifically, this means that | ||
things like headings and enumerations should be ignored (or formatted | ||
as regular text) unless they occur after the second line. | ||
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
A change to `/_matrix/client/v3/createRoom` is not necessary. The | ||
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
endpoint has a plain text `topic` parameter but also allows to specify a | ||
full `m.topic` event in `initial_state`. | ||
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Room topics also occur as part of the `PublicRoomsChunk` object in the | ||
responses of `/_matrix/client/v3/publicRooms` and | ||
`/_matrix/client/v1/rooms/{roomId}/hierarchy`. The topic can be kept | ||
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
plain text here because this data should commonly only be displayed to | ||
users that are *not* a member of the room yet. These users will not have | ||
the same need for rich room topics as users who are inside the room. If | ||
no plain text topic exists, home servers should return an empty topic | ||
string from these end points. Since this will inevitably lead to bad UX, | ||
client implementations are encouraged to always include a plain text | ||
variant when sending `m.topic` events. | ||
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
## Transition | ||
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
As this MSC replaces `m.room.topic` for an extensible alternative, | ||
clients and servers are expected to treat `m.room.topic` as invalid in | ||
extensible event-supporting room versions. | ||
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
## Potential issues | ||
|
||
None. | ||
|
||
## Alternatives | ||
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
The combination of `format` and `formatted_body` currently utilised to | ||
enable HTML in `m.room.message` events could be generalised to | ||
`m.topic` events. However, this would only allow for a single | ||
format in addition to plain text and is a weaker form of reuse than | ||
described in the introductory section of [MSC1767]. | ||
|
||
## Security considerations | ||
|
||
Allowing HTML in room topics is subject to the same security | ||
considerations that apply to HTML in room messages. | ||
|
||
## Unstable prefix | ||
|
||
While this MSC is not considered stable, `m.topic` should be referred to | ||
as `org.matrix.msc3765.topic`. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @jplatte says:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The JS SDK implements an earlier version of this MSC, yes.
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
## Dependencies | ||
|
||
- [MSC1767] | ||
|
||
[plain text]: https://spec.matrix.org/v1.2/client-server-api/#mroomtopic | ||
[MSC1767]: https://github.com/matrix-org/matrix-spec-proposals/pull/1767 | ||
[MSC3551]: https://github.com/matrix-org/matrix-spec-proposals/pull/3551 | ||
[`/rooms/{roomId}/upgrade`]: https://spec.matrix.org/v1.5/client-server-api/#post_matrixclientv3roomsroomidupgrade |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@alphapapa says:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Johennes replies: