You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This change adds support for the `transformPresence()` method that
[`sharedb` uses][1].
We add support for both `text0` and `json0`.
`text0`
-------
The `text0` implementation leans on the existing
[`transformPosition`][2], and takes its form and tests from
[`rich-text`][3].
Its shape takes the form:
```js
{
index: 3,
length: 5,
}
```
Where:
- `index` is the cursor position
- `length` is the selection length (`0` for a collapsed selection)
`json0`
-------
The `json0` implementation has limited functionality because of the
limitations of the `json0` type itself: we handle list moves `lm`, but
cannot infer any information when moving objects around the tree,
because the `oi` and `od` operations are destructive.
However, it will attempt to transform embedded subtypes that support
presence.
Its shape takes the form:
```js
{
p: ['key', 123],
v: {},
}
```
Where:
- `p` is the path to the client's position within the document
- `v` is the presence value
The presence value `v` can take any arbitrary value (in simple cases it
may even be omitted entirely).
The exception to this is when using subtypes, where `v` should take the
presence shape defined by the subtype. For example, when using `text0`:
```js
{
p: ['key'],
v: {index: 5, length: 0},
}
```
[1]: share/sharedb#322
[2]: https://github.com/ottypes/json0/blob/90a3ae26364c4fa3b19b6df34dad46707a704421/lib/text0.js#L147
[3]: ottypes/rich-text#32
0 commit comments