JSPM

prosemirror-replaceattrs

1.0.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 5557
  • Score
    100M100P100Q137292F
  • License MIT

The missing ReplaceAttrsStep for prosemirror

Package Exports

  • prosemirror-replaceattrs

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (prosemirror-replaceattrs) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

prosemirror-replaceattrs

The missing ReplaceAttrsStep for prosemirror

Usage

import 'prosemirror-replaceattrs' /// somewhere in your project

tr.replaceAttrs(pos, attrs)

Why

In prosemirror, in order to update attributes of a node, you must delete it and replace with a new node with updated attributes. Something like this:

state.tr.setNodeMarkup(state.selection.from, undefined, attrs)
/// or
newNode = node.copy()
newNode.attrs = attrs
state.tr.replaceWith(pos, pos + 1, newNode)

While this works perfectly, during collaboration it does not go well with undo history. Suppose user A inserts an image node and user B updates alt attribute of that image node. When user A hits undo, it should remove the inserted image, but it will not if you've replaced the entire node. This ReplaceAttrsStep solves that problem if you use it to update attributes of a node.