MCPcopy Create free account
hub / github.com/editablejs/editable / setNode

Function setNode

packages/plugins/yjs/src/apply-to-yjs/node/set-node.ts:5–28  ·  view source on GitHub ↗
(sharedRoot: Y.XmlText, editorRoot: Node, op: SetNodeOperation)

Source from the content-addressed store, hash-verified

3import { getYTarget } from '@editablejs/yjs-transform'
4
5export function setNode(sharedRoot: Y.XmlText, editorRoot: Node, op: SetNodeOperation): void {
6 const { yTarget, textRange, yParent } = getYTarget(sharedRoot, editorRoot, op.path)
7
8 if (yTarget) {
9 Object.entries(op.newProperties).forEach(([key, value]) => {
10 if (value === null) {
11 return yTarget.removeAttribute(key)
12 }
13
14 yTarget.setAttribute(key, value)
15 })
16
17 return Object.entries(op.properties).forEach(([key]) => {
18 if (!op.newProperties.hasOwnProperty(key)) {
19 yTarget.removeAttribute(key)
20 }
21 })
22 }
23
24 const unset = Object.fromEntries(Object.keys(op.properties).map(key => [key, null]))
25 const newProperties = { ...unset, ...op.newProperties }
26
27 yParent.format(textRange.start, textRange.end - textRange.start, newProperties)
28}

Callers 2

usePresenceFunction · 0.85

Calls 1

getYTargetFunction · 0.90

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…