Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✨ Add presence support #48

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Commits on Dec 30, 2021

  1. ✨ Add presence support

    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 committed Dec 30, 2021
    Configuration menu
    Copy the full SHA
    58eea07 View commit details
    Browse the repository at this point in the history