Merge 1695d819d9 into e9f0f31d27
commit
29fe95d621
@ -0,0 +1,86 @@
|
||||
# MSC3725: Content warnings
|
||||
|
||||
[MSC2010](2010-spoilers.md) made it possible to tag parts of messages as
|
||||
spoilers, so that receiving clients can hide content that the user might not
|
||||
want to see. However, the latter proposal only works with textual messages,
|
||||
which are just one of the many event types that might require some kind of
|
||||
content warning (images, videos, files, etc.). This MSC proposes a more general
|
||||
content warning system to fill that gap, using
|
||||
[Extensible Events](https://github.com/matrix-org/matrix-doc/pull/1767) to
|
||||
encompass all possible event types.
|
||||
|
||||
As with textual spoilers, there are a variety of reasons that an event might
|
||||
warrant a content warning, for example if it could spoil a story, or if some
|
||||
recipients might find the content objectionable or disturbing. By providing a
|
||||
content warning, clients can then take measures to require consent from the user
|
||||
before displaying the content.
|
||||
|
||||
## Proposal
|
||||
|
||||
Content warnings are represented by a new event content type
|
||||
`m.content_warning`, which looks like this:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "m.image",
|
||||
"content": {
|
||||
"m.text": "Upload: screenshot.png (300 KB)",
|
||||
"m.file": {
|
||||
"url": "mxc://example.org/abcdef",
|
||||
"name": "screenshot.png",
|
||||
"mimetype": "image/png",
|
||||
"size": 300000
|
||||
},
|
||||
"m.image": {
|
||||
"width": 640,
|
||||
"height": 480
|
||||
},
|
||||
"m.content_warning": {
|
||||
"type": "m.spoiler",
|
||||
"description": "Contains spoilers for chapter 6"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The `type` field is optional, and represents the general, machine-readable
|
||||
reason for the content warning. The following types are provided:
|
||||
|
||||
- `m.spoiler` for spoilers
|
||||
- `m.nsfw` for NSFW content
|
||||
- `m.graphic` for graphic or disturbing content
|
||||
- `m.medical` for e.g. epilepsy warnings
|
||||
|
||||
The `description` field is also optional, and represents a more specific,
|
||||
human-readable description of the content warning.
|
||||
|
||||
## Potential issues
|
||||
|
||||
A result of this proposal is that textual `m.message`s now have two different
|
||||
ways to do spoilers: the `data-mx-spoiler` attribute, and the
|
||||
`m.content_warning` event type. While this may seem a bit redundant, the two
|
||||
methods are necessarily complementary, since the `data-mx-spoiler` attribute
|
||||
provides finer-grained control over which parts of a message are hidden, while
|
||||
the `m.content_warning` event type sits above it at the event level.
|
||||
|
||||
## Alternatives
|
||||
|
||||
In the case of images, an alternative solution, which some people currently use,
|
||||
is to embed images inline in `m.text` messages, and then tag it using the
|
||||
existing mechanism for textual spoilers. This is a pretty hacky workaround,
|
||||
since it does not support other types of media, nor does it support encryption.
|
||||
It also loses the semantics of standalone `m.image` events, which makes it
|
||||
difficult for clients to render image spoilers differently from regular textual
|
||||
spoilers.
|
||||
|
||||
## Security considerations
|
||||
|
||||
None that the author is aware of.
|
||||
|
||||
## Unstable prefix
|
||||
|
||||
Clients wishing to experimentally implement this proposal may do so by replacing
|
||||
the `m.content_warning` event type with `town.robin.msc3725.content_warning`,
|
||||
and replacing the content warning types `m.spoiler`, `m.nsfw`, `m.graphic`, and
|
||||
`m.medical` with `town.robin.msc3725.spoiler`, `town.robin.msc3725.nsfw`,
|
||||
`town.robin.msc3725.graphic`, and `town.robin.msc3725.medical` respectively.
|
||||
Loading…
Reference in New Issue