Discussion: How should quotes look like in Pleroma AP-wise?
Several instances have quotes in some form, and there's also pleroma-meta#23 Quotes, however, aren't defined in AP, so the question becomes; What are they and how should they look from an AP perspective according to Pleroma?
Software that has quotes
- Misskey
- Friendica
- Zap
- fedibird.com (Mastodon fork, they do it in the same way Misskey does them)
- Other?
How they do it
fedibird.com does it the same way as Misskey does. A quote is just a Note with an extra field quoteUrl
, which has the id of the post that's being quoted. Note that a quote can also be a reply to another thread by filling in the inReplyTo
field. The content
field also ends with RE: </span><a href=\"https://mk.toast.cafe/notes/8rqc16lyeu\">
.
I haven't been able to test Friendica, nor did I find an example, so I haven't looked into that further, but from what I can tell, it's technically possible to quote multiple other posts by adding BBCode tags.
Zap allows you to "Share" a post (or a reply). It's just a regular Note, but it has BBCode tags for sharing. You can add several quotes in one post. All the information is in the content of the Note.
I have examples in the "Examples from other software" section below.
How should Pleroma do it?
A first idea was that a quote is a thing on it's own. The idea was to fill in the inReplyTo
field instead of quoteUrl
and if Pleroma ever federates them, to make it their own object. This isn't compatible with any of the other implementations because Misskey quotes can also be replies, and in Zap (and I think also Friendica) multiple quotes are possible. In the latter case, it also seems possible to choose where the quotes are shown the content.
Sometimes people also talk about a Quote-boost, which could make it a new activity, or maybe an Announce activity with a content
field in the activity. (EmojiReact is an example of an activity that has a content field.) The problem here is that you can only quote one post at a time and you can't say where the quote should be shown. This is incompatible with Zap (because only one quote at a time) and with Misskey (because replies aren't possible).
The idea of Zap quotes are a bit like quotes in news articles imo. They aren't per sé things on there own, but part of a bigger thing (in this case a Note). They are compatible with Misskey in the sense that you can still fill in the inReplyTo field. The exact way Zap does it, is probably not what we want because they add a whole bunch of stuff that doesn't feel like it belongs in the content field (like the link to the avatar and the text "wrote the following post..."). Having the quotes in the content and making it clear what posts they are quoting, does seem like a viable option. It turns out we already have a similar thing with Hashtags, Emojis, Mentions... which are added to the tag
field. So maybe quotes could be added to the ´tag´ field? That would make it something like
{
"content": "<p><span>Me too, that's why I used Arch for so long </span>:nkoLul:<span><br><br>RE: </span><a href=\"https://mk.toast.cafe/notes/8rqc16lyeu\">",
"tag": [{
"href": "https://mk.toast.cafe/notes/8rqc16lyeu",
"type": "Quote"
}],
"type": "Note",
...
}
What do you think? Does that sound like a good idea? (If not, why?) Are there other (maybe better) ideas? ...?
Examples from other software
Misskey:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1",
{
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
"sensitive": "as:sensitive",
"Hashtag": "as:Hashtag",
"quoteUrl": "as:quoteUrl",
"toot": "http://joinmastodon.org/ns#",
"Emoji": "toot:Emoji",
"featured": "toot:featured",
"discoverable": "toot:discoverable",
"schema": "http://schema.org#",
"PropertyValue": "schema:PropertyValue",
"value": "schema:value",
"misskey": "https://mk.paritybit.ca/ns#",
"_misskey_content": "misskey:_misskey_content",
"_misskey_quote": "misskey:_misskey_quote",
"_misskey_reaction": "misskey:_misskey_reaction",
"_misskey_votes": "misskey:_misskey_votes",
"_misskey_talk": "misskey:_misskey_talk",
"isCat": "misskey:isCat",
"vcard": "http://www.w3.org/2006/vcard/ns#"
}
],
"id": "https://mk.paritybit.ca/notes/8rqc3oihe7",
"type": "Note",
"attributedTo": "https://mk.paritybit.ca/users/8ox0cb71q7",
"summary": null,
"content": "<p><span>Me too, that's why I used Arch for so long </span>:nkoLul:<span><br><br>RE: </span><a href=\"https://mk.toast.cafe/notes/8rqc16lyeu\">"
"_misskey_content": "Me too, that's why I used Arch for so long :nkoLul:",
"_misskey_quote": "https://mk.toast.cafe/notes/8rqc16lyeu",
"quoteUrl": "https://mk.toast.cafe/notes/8rqc16lyeu",
"published": "2021-10-11T14:48:03.545Z",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://mk.paritybit.ca/users/8ox0cb71q7/followers"
],
"inReplyTo": null,
"attachment": [],
"sensitive": false,
"tag": [
{
"id": "https://mk.paritybit.ca/emojis/nkoLul",
"type": "Emoji",
"name": ":nkoLul:",
"updated": "2021-09-14T15:13:30.897Z",
"icon": {
"type": "Image",
"mediaType": "image/apng",
"url": "https://mk.paritybit.ca/files/06db0b13-5850-487b-b4bf-f5b844ccb5e5"
}
}
]
}
Zap
One quote:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1",
{
"zot": "https://test.ilja.space/apschema#",
"toot": "http://joinmastodon.org/ns#",
"ostatus": "http://ostatus.org#",
"schema": "http://schema.org#",
"litepub": "http://litepub.social/ns#",
"sm": "http://smithereen.software/ns#",
"conversation": "ostatus:conversation",
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
"oauthRegistrationEndpoint": "litepub:oauthRegistrationEndpoint",
"sensitive": "as:sensitive",
"movedTo": "as:movedTo",
"copiedTo": "as:copiedTo",
"alsoKnownAs": "as:alsoKnownAs",
"EmojiReact": "as:EmojiReact",
"commentPolicy": "zot:commentPolicy",
"topicalCollection": "zot:topicalCollection",
"eventRepeat": "zot:eventRepeat",
"emojiReaction": "zot:emojiReaction",
"expires": "zot:expires",
"directMessage": "zot:directMessage",
"Category": "zot:Category",
"replyTo": "zot:replyTo",
"PropertyValue": "schema:PropertyValue",
"value": "schema:value",
"discoverable": "toot:discoverable",
"wall": "sm:wall",
"capabilities": "litepub:capabilities",
"acceptsJoins": "litepub:acceptsJoins"
}
],
"type": "Create",
"id": "https://test.ilja.space/activity/86d130e7-cc9b-4256-8b48-17602eccf531",
"published": "2021-11-13T09:44:04Z",
"context": "https://test.ilja.space/conversation/86d130e7-cc9b-4256-8b48-17602eccf531",
"conversation": "https://test.ilja.space/conversation/86d130e7-cc9b-4256-8b48-17602eccf531",
"actor": "https://test.ilja.space/channel/ilja",
"replyTo": "https://test.ilja.space/channel/ilja",
"url": "https://test.ilja.space/activity/86d130e7-cc9b-4256-8b48-17602eccf531",
"object": {
"type": "Note",
"id": "https://test.ilja.space/item/86d130e7-cc9b-4256-8b48-17602eccf531",
"published": "2021-11-13T09:44:04Z",
"commentPolicy": "contacts",
"attributedTo": "https://test.ilja.space/channel/ilja",
"context": "https://test.ilja.space/conversation/86d130e7-cc9b-4256-8b48-17602eccf531",
"conversation": "https://test.ilja.space/conversation/86d130e7-cc9b-4256-8b48-17602eccf531",
"content": "<div class=\"shared_container\"> <div class=\"shared_header\"><a href=\"https://test.ilja.space/channel/ilja\" ><img src=\"https://test.ilja.space/photo/profile/s/2\" alt=\"my_test_case\" height=\"32\" width=\"32\" /></a><span><a href=\"https://test.ilja.space/channel/ilja\" ><bdi>my_test_case</bdi></a> wrote the following <a href=\"https://test.ilja.space/item/93255381-2eaf-4d44-b526-6a1c0c17d217\" >post</a> <span class=\"autotime\" title=\"2021-11-13T01:43:29-08:00\" >Sat, 13 Nov 2021 01:43:29 -0800</span></span></div><div class=\"reshared-content\">This is a post</div></div>I'm sharing a post",
"source": {
"content": "[share author='my_test_case' profile='https://test.ilja.space/channel/ilja' portable_id='MlauVWqT6inrxqhDxYDiIRVDxjQsMNh-EKWcMlDQxIao1sOCNTYDPKFNSQthDaq32l_cfsAbCOiMEi6Xw23DPw' avatar='https://test.ilja.space/photo/profile/s/2' link='https://test.ilja.space/item/93255381-2eaf-4d44-b526-6a1c0c17d217' auth='false' posted='2021-11-13 09:43:29' message_id='https://test.ilja.space/item/93255381-2eaf-4d44-b526-6a1c0c17d217']This is a post[/share]I'm sharing a post",
"mediaType": "text/bbcode"
},
"replyTo": "https://test.ilja.space/channel/ilja",
"url": "https://test.ilja.space/item/86d130e7-cc9b-4256-8b48-17602eccf531",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://test.ilja.space/followers/ilja"
]
},
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://test.ilja.space/followers/ilja"
],
"signature": {
"type": "RsaSignature2017",
"nonce": "e2d03faa46192fe73e7434e14926473d6c83a1338df80cebf8ad84eb2e8d9b0c",
"creator": "https://test.ilja.space/channel/ilja",
"created": "2021-11-13T09:44:04Z",
"signatureValue": "bq8xvNL+aw53W3iKrbYzcw3FYyu87Fd1zmzIs5BFcH+p6QU6w9dxYP6b/qGTKCru3bQe6Bbk5RrlZ6A6S3pJYm6gfUMkR7LknvtbRDKh/6JuPhYzOqGdIjx8nounhlC3pgfZR5SMbCX4tQVS770C92aDefgJzMfvrjB0nlPYKd9CbWBX+iGpJcUUuZiLfjp2EnWowEo5MzgUz602kunWKkPK6bp4BsfYfLsU+sCrBLvOH0c48UawbEXVV2Rz9/cPhLMX2Cymrm1ybyk6uFRnBjIBRiKWaQJsVhY2F9LRXl+3bgSbpcsyuglWmTnOtLKkv4DSOWS9K4M5enKPXSX7OiF9AHR5wOh81PDcn7ZrHKllOgcmeC9MbF1DfjJi/gaZmBvZSNQUFXceJXFMbWwo0WbPe0/t0KmXzl+wRKeMTpBk0UfeaTNpzys4mLkXpTfdUZVEAbgIFyHLjukxsywU2mF4PrL++4aktj5adxBQUJz4FQ+HmvPGnp6eM9HBYxmu9t0fwIF4pZSWaXAMhYS6MsekJN9kNaYbe0Gp0DaNLEydiuLGXPF6+CRkG5Yoz7M89m4mU+99PACyIp2Hw1ijFV0AgV0Io8O2ulA5XwLv5W+eJQDt2HKnq2vPRX9s6wYN3+nD7+r44K67gJFo7+WEM++jxRqSdYdrdUvQzEWEWBI="
}
}
Two quotes:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1",
{
"zot": "https://test.ilja.space/apschema#",
"toot": "http://joinmastodon.org/ns#",
"ostatus": "http://ostatus.org#",
"schema": "http://schema.org#",
"litepub": "http://litepub.social/ns#",
"sm": "http://smithereen.software/ns#",
"conversation": "ostatus:conversation",
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
"oauthRegistrationEndpoint": "litepub:oauthRegistrationEndpoint",
"sensitive": "as:sensitive",
"movedTo": "as:movedTo",
"copiedTo": "as:copiedTo",
"alsoKnownAs": "as:alsoKnownAs",
"EmojiReact": "as:EmojiReact",
"commentPolicy": "zot:commentPolicy",
"topicalCollection": "zot:topicalCollection",
"eventRepeat": "zot:eventRepeat",
"emojiReaction": "zot:emojiReaction",
"expires": "zot:expires",
"directMessage": "zot:directMessage",
"Category": "zot:Category",
"replyTo": "zot:replyTo",
"PropertyValue": "schema:PropertyValue",
"value": "schema:value",
"discoverable": "toot:discoverable",
"wall": "sm:wall",
"capabilities": "litepub:capabilities",
"acceptsJoins": "litepub:acceptsJoins"
}
],
"type": "Create",
"id": "https://test.ilja.space/activity/bc684cea-0c2d-4baf-8c83-40abb6a8e928",
"published": "2021-11-13T09:46:38Z",
"context": "https://test.ilja.space/conversation/bc684cea-0c2d-4baf-8c83-40abb6a8e928",
"conversation": "https://test.ilja.space/conversation/bc684cea-0c2d-4baf-8c83-40abb6a8e928",
"actor": "https://test.ilja.space/channel/ilja",
"replyTo": "https://test.ilja.space/channel/ilja",
"url": "https://test.ilja.space/activity/bc684cea-0c2d-4baf-8c83-40abb6a8e928",
"object": {
"type": "Note",
"id": "https://test.ilja.space/item/bc684cea-0c2d-4baf-8c83-40abb6a8e928",
"published": "2021-11-13T09:46:38Z",
"commentPolicy": "contacts",
"attributedTo": "https://test.ilja.space/channel/ilja",
"context": "https://test.ilja.space/conversation/bc684cea-0c2d-4baf-8c83-40abb6a8e928",
"conversation": "https://test.ilja.space/conversation/bc684cea-0c2d-4baf-8c83-40abb6a8e928",
"content": "<div class=\"shared_container\"> <div class=\"shared_header\"><a href=\"https://test.ilja.space/channel/ilja\" ><img src=\"https://test.ilja.space/photo/profile/s/2\" alt=\"my_test_case\" height=\"32\" width=\"32\" /></a><span><a href=\"https://test.ilja.space/channel/ilja\" ><bdi>my_test_case</bdi></a> wrote the following <a href=\"https://test.ilja.space/item/93255381-2eaf-4d44-b526-6a1c0c17d217\" >post</a> <span class=\"autotime\" title=\"2021-11-13T01:43:29-08:00\" >Sat, 13 Nov 2021 01:43:29 -0800</span></span></div><div class=\"reshared-content\">This is a post</div></div>This is a post I'm sharing<br><div class=\"shared_container\"> <div class=\"shared_header\"><a href=\"https://test.ilja.space/channel/ilja\" ><img src=\"https://test.ilja.space/photo/profile/s/2\" alt=\"my_test_case\" height=\"32\" width=\"32\" /></a><span><a href=\"https://test.ilja.space/channel/ilja\" ><bdi>my_test_case</bdi></a> wrote the following <a href=\"https://test.ilja.space/item/096a9de6-6837-4d94-a134-00875988b517\" >post</a> <span class=\"autotime\" title=\"2021-11-13T01:43:40-08:00\" >Sat, 13 Nov 2021 01:43:40 -0800</span></span></div><div class=\"reshared-content\">This is another post</div></div> This is another post I'm sharing",
"source": {
"content": "[share author='my_test_case' profile='https://test.ilja.space/channel/ilja' portable_id='MlauVWqT6inrxqhDxYDiIRVDxjQsMNh-EKWcMlDQxIao1sOCNTYDPKFNSQthDaq32l_cfsAbCOiMEi6Xw23DPw' avatar='https://test.ilja.space/photo/profile/s/2' link='https://test.ilja.space/item/93255381-2eaf-4d44-b526-6a1c0c17d217' auth='false' posted='2021-11-13 09:43:29' message_id='https://test.ilja.space/item/93255381-2eaf-4d44-b526-6a1c0c17d217']This is a post[/share]This is a post I'm sharing\r\n[share author='my_test_case' profile='https://test.ilja.space/channel/ilja' portable_id='MlauVWqT6inrxqhDxYDiIRVDxjQsMNh-EKWcMlDQxIao1sOCNTYDPKFNSQthDaq32l_cfsAbCOiMEi6Xw23DPw' avatar='https://test.ilja.space/photo/profile/s/2' link='https://test.ilja.space/item/096a9de6-6837-4d94-a134-00875988b517' auth='false' posted='2021-11-13 09:43:40' message_id='https://test.ilja.space/item/096a9de6-6837-4d94-a134-00875988b517']This is another post[/share] This is another post I'm sharing",
"mediaType": "text/bbcode"
},
"replyTo": "https://test.ilja.space/channel/ilja",
"url": "https://test.ilja.space/item/bc684cea-0c2d-4baf-8c83-40abb6a8e928",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://test.ilja.space/followers/ilja"
]
},
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://test.ilja.space/followers/ilja"
],
"signature": {
"type": "RsaSignature2017",
"nonce": "534976107761dd2df325284e4cb21a05437456ca62c8d91661073fc37dae125a",
"creator": "https://test.ilja.space/channel/ilja",
"created": "2021-11-13T09:46:39Z",
"signatureValue": "GH5rcET7XHVTHMTADsJ4QyQZ/njn7514lOiVhz2aAwFZDIBfwPGLVhh1hih1gPJrdubG/P29W9wbtEc2ZiywVchNk5/vCnrMld/bcYSaIzyqtxpbHMHf5w6wKV7ppg3RbDyeC/g9NasaSwsV+B/bwBdUv552xeK61PYcvv6NyoCEP9FLYcprcLmLT7fjhmZYMNsrcZwbq/ljN3P9Apx1dcrhSUR0ReB2Zy9QxBLkuqJG0kMdXlFSASVF9wlz+nxXA3lj8CKJ6wezHizjouLxQtSnj3z0hVZhp/ISZOV82C5BK9fTSPo7lDhNT08dCTjNAgVxLPPTJ2kPGVHw2mLOuES0NGLmsrSBqo8/ulCsowPzpRXtZBbYmE5ZZbXsIYhBh8aic+ZX6WOo4MF1DYUxjB/s3V2J0nnBBtfGeSNgdjNr0RywPG6w8K7e29i0b37gy33lsUaH5ivFRebAXgS56SPZeJKry6CBDDgAk3GtTHSvcxp9eKeEPhkUFRWVcyuLQI3asDS78n3W44gLwzDBnJUzU86lOTtkusfccg4G4v9EHFs5US9x1RGs6tNh7tPSUYUNNqo8zBpYej75Gol8iWknyg/1TpIJ3l8xK5W/Sv6EgHLrmAP7lwzYOkTfbgMwqs5EZGHcoylbzBpCZ3KgUZRRtkjro0BgqamUZrgelMs="
}
}