Spec PR - MSC3765: Rich text in room topics (#2095)

Signed-off-by: Johannes Marbach <n0-0ne+github@mailbox.org>
pull/2144/head
Johannes Marbach 7 months ago committed by GitHub
parent f4e6e6dea9
commit 0439707624
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1 @@
Add `m.topic` content block to enable rich text in `m.room.topic` events as per [MSC3765](https://github.com/matrix-org/matrix-spec-proposals/pull/3765).

@ -0,0 +1 @@
Add `m.topic` content block to enable rich text in `m.room.topic` events as per [MSC3765](https://github.com/matrix-org/matrix-spec-proposals/pull/3765).

@ -26,9 +26,10 @@ on certain keys of certain event types.
The supported keys to search over are: The supported keys to search over are:
- `content.body` in `m.room.message` - `content.body` in [`m.room.message`](/client-server-api/#mroommessage)
- `content.name` in `m.room.name` - `content.name` in [`m.room.name`](/client-server-api/#mroomname)
- `content.topic` in `m.room.topic` - In [`m.room.topic`](/client-server-api/#mroomtopic), `content.topic`
as well as the `body` of the `text/plain` representation in `content['m.topic']`.
The search will *not* include rooms that are end to end encrypted. The search will *not* include rooms that are end to end encrypted.

@ -109,15 +109,17 @@ paths:
name: name:
type: string type: string
description: |- description: |-
If this is included, an `m.room.name` event will be sent If this is included, an [`m.room.name`](/client-server-api/#mroomname) event
into the room to indicate the name of the room. See Room will be sent into the room to indicate the name for the room.
Events for more information on `m.room.name`. This overwrites any [`m.room.name`](/client-server-api/#mroomname)
event in `initial_state`.
topic: topic:
type: string type: string
description: |- description: |-
If this is included, an `m.room.topic` event will be sent If this is included, an [`m.room.topic`](/client-server-api/#mroomtopic)
into the room to indicate the topic for the room. See Room event with a `text/plain` mimetype will be sent into the room
Events for more information on `m.room.topic`. to indicate the topic for the room. This overwrites any
[`m.room.topic`](/client-server-api/#mroomtopic) event in `initial_state`.
invite: invite:
type: array type: array
description: |- description: |-

@ -33,7 +33,9 @@ properties:
example: "!abcdefg:example.org" example: "!abcdefg:example.org"
topic: topic:
type: string type: string
description: The topic of the room, if any. description: |-
The plain text topic of the room. Omitted if no `text/plain` mimetype
exists in [`m.room.topic`](/client-server-api/#mroomtopic).
example: "All things general" example: "All things general"
world_readable: world_readable:
type: boolean type: boolean

@ -3,6 +3,14 @@
"type": "m.room.topic", "type": "m.room.topic",
"state_key": "", "state_key": "",
"content": { "content": {
"topic": "A room topic" "m.topic": {
"m.text": [ {
"mimetype": "text/html",
"body": "An <em>interesting</em> room topic"
}, {
"body": "An interesting room topic"
}]
},
"topic": "An interesting room topic"
} }
} }

@ -0,0 +1,28 @@
type: array
description: |-
An ordered array of textual representations in different mimetypes.
Senders SHOULD specify at least one representation and SHOULD always
include a plaintext representation.
Receivers SHOULD use the first representation in the array that
they understand.
title: TextContentBlock
items:
type: object
title: TextualRepresentation
properties:
mimetype:
type: string
description: The mimetype. Defaults to `text/plain` if omitted.
example: "text/html"
body:
type: string
description: |-
The string content.
Clients SHOULD validate and sanitize the content as they do
for rich content associated with [`msgtype`](/client-server-api/#mroommessage-msgtypes)
of [`m.room.message`](/client-server-api/#mroommessage).
required:
- body

@ -2,19 +2,40 @@
allOf: allOf:
- $ref: core-event-schema/state_event.yaml - $ref: core-event-schema/state_event.yaml
description: |- description: |-
A topic is a short message detailing what is currently being discussed in the room. A topic is a short message detailing what is currently being discussed
It can also be used as a way to display extra information about the room, which may not in the room. It can also be used as a way to display extra information
be suitable for the room name. about the room, which may not be suitable for the room name. The room
The room topic can also be set when creating a room using `/createRoom` with the `topic` key.' topic can also be set when creating a room using
[`/createRoom`](client-server-api/#post_matrixclientv3createroom), either
with the `topic` key or by specifying a full event in `initial_state`.
If the `topic` property is absent, null, or empty then the topic is unset. In other words, If the `topic` property is absent, null, or empty then the topic is unset. In other words,
an empty `topic` property effectively resets the room to having no topic. an empty `topic` property effectively resets the room to having no topic.
In order to prevent formatting abuse in room topics, clients SHOULD
limit the length of topics during both entry and display, for instance,
by capping the number of displayed lines. Additionally, clients SHOULD
ignore things like headings and enumerations (or format them as regular
text).
properties: properties:
content: content:
properties: properties:
topic: topic:
description: The topic text. description: |-
The topic in plain text.
This SHOULD duplicate the content of the `text/plain`
representation in `m.topic` if any exists.
type: string type: string
m.topic:
type: object
title: TopicContentBlock
x-addedInMatrixVersion: "1.15"
description: |-
Textual representation of the room topic in different mimetypes.
properties:
m.text:
$ref: components/m_text_content_block.yaml
required: required:
- topic - topic
type: object type: object

Loading…
Cancel
Save