Skip to content

Conversation

@alecgibson
Copy link

This change adds support for presence transformations, which are being
added to ShareDB. In order to support presence updates, this change
adds support for the optional transformPresence method, which simply
reuses the existing transformCursor method, but also:

  • applies changes to the length of a range
  • keeps existing metadata
  • returns null if no range has been provided

This change adds support for presence transformations, which are being
[added to ShareDB][1]. In order to support presence updates, this change
adds support for the optional `transformPresence` method, which simply
reuses the existing `transformCursor` method, but also:

  - applies changes to the `length` of a range
  - keeps existing metadata
  - returns `null` if no range has been provided

[1]: share/sharedb#322
@jhchen jhchen merged commit 50b2b63 into ottypes:master Apr 3, 2020
@alecgibson alecgibson deleted the presence branch April 3, 2020 07:09
alecgibson pushed a commit to share/sharedb that referenced this pull request May 17, 2020
The `rich-text` type now officially supports presence transformations
as of this PR: ottypes/rich-text#32 which was
released in `4.1.0`.

This change bumps the version of `rich-text` used in the example, and
removes the monkey-patch.
alecgibson added a commit to reedsy/json0 that referenced this pull request Dec 22, 2021
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
alecgibson added a commit to reedsy/json0 that referenced this pull request Dec 22, 2021
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
alecgibson added a commit to reedsy/json0 that referenced this pull request Dec 22, 2021
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
alecgibson added a commit to reedsy/json0 that referenced this pull request Dec 29, 2021
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
alecgibson added a commit to reedsy/json0 that referenced this pull request Dec 30, 2021
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
alecgibson added a commit to reedsy/json0 that referenced this pull request Dec 30, 2021
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
alecgibson added a commit to reedsy/json0 that referenced this pull request Dec 30, 2021
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
alecgibson added a commit to reedsy/json0 that referenced this pull request Dec 30, 2021
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
longlonggoo added a commit to longlonggoo/longlonggoo that referenced this pull request Aug 13, 2025
The `rich-text` type now officially supports presence transformations
as of this PR: ottypes/rich-text#32 which was
released in `4.1.0`.

This change bumps the version of `rich-text` used in the example, and
removes the monkey-patch.
FernhillFable added a commit to FernhillFable/cluster that referenced this pull request Aug 13, 2025
The `rich-text` type now officially supports presence transformations
as of this PR: ottypes/rich-text#32 which was
released in `4.1.0`.

This change bumps the version of `rich-text` used in the example, and
removes the monkey-patch.
adelinedaosen added a commit to adelinedaosen/ServiceNow that referenced this pull request Sep 12, 2025
The `rich-text` type now officially supports presence transformations
as of this PR: ottypes/rich-text#32 which was
released in `4.1.0`.

This change bumps the version of `rich-text` used in the example, and
removes the monkey-patch.
patriciiaDavis added a commit to patriciiaDavis/XWVoipKit that referenced this pull request Sep 12, 2025
The `rich-text` type now officially supports presence transformations
as of this PR: ottypes/rich-text#32 which was
released in `4.1.0`.

This change bumps the version of `rich-text` used in the example, and
removes the monkey-patch.
elizabeClark added a commit to elizabeClark/eggtransformer that referenced this pull request Sep 19, 2025
The `rich-text` type now officially supports presence transformations
as of this PR: ottypes/rich-text#32 which was
released in `4.1.0`.

This change bumps the version of `rich-text` used in the example, and
removes the monkey-patch.
livebalupton added a commit to livebalupton/LEDNumbers that referenced this pull request Sep 27, 2025
The `rich-text` type now officially supports presence transformations
as of this PR: ottypes/rich-text#32 which was
released in `4.1.0`.

This change bumps the version of `rich-text` used in the example, and
removes the monkey-patch.
danberkos added a commit to danberkos/meal that referenced this pull request Oct 4, 2025
The `rich-text` type now officially supports presence transformations
as of this PR: ottypes/rich-text#32 which was
released in `4.1.0`.

This change bumps the version of `rich-text` used in the example, and
removes the monkey-patch.
codewavehunter added a commit to codewavehunter/sharedb that referenced this pull request Oct 28, 2025
The `rich-text` type now officially supports presence transformations
as of this PR: ottypes/rich-text#32 which was
released in `4.1.0`.

This change bumps the version of `rich-text` used in the example, and
removes the monkey-patch.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants