prosemirror-view 1.33.8 → 1.33.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 1.33.9 (2024-07-18)
2
+
3
+ ### Bug fixes
4
+
5
+ Fix an issue where dragging an image on Chrome versions before 121 failed to put the image file in the clipboard data.
6
+
7
+ Enable cross-site scripting protection hack when rendering nodes and marks inside the editor.
8
+
1
9
  ## 1.33.8 (2024-06-11)
2
10
 
3
11
  ### Bug fixes
package/dist/index.cjs CHANGED
@@ -1216,7 +1216,7 @@ var MarkViewDesc = function (_ViewDesc3) {
1216
1216
  value: function create(parent, mark, inline, view) {
1217
1217
  var custom = view.nodeViews[mark.type.name];
1218
1218
  var spec = custom && custom(mark, view, inline);
1219
- if (!spec || !spec.dom) spec = prosemirrorModel.DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline));
1219
+ if (!spec || !spec.dom) spec = prosemirrorModel.DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline), null, mark.attrs);
1220
1220
  return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom);
1221
1221
  }
1222
1222
  }]);
@@ -1415,9 +1415,9 @@ var NodeViewDesc = function (_ViewDesc4) {
1415
1415
  if (node.isText) {
1416
1416
  if (!dom) dom = document.createTextNode(node.text);else if (dom.nodeType != 3) throw new RangeError("Text must be rendered as a DOM text node");
1417
1417
  } else if (!dom) {
1418
- var _prosemirrorModel$DOM = prosemirrorModel.DOMSerializer.renderSpec(document, node.type.spec.toDOM(node));
1419
- dom = _prosemirrorModel$DOM.dom;
1420
- contentDOM = _prosemirrorModel$DOM.contentDOM;
1418
+ var _spec = prosemirrorModel.DOMSerializer.renderSpec(document, node.type.spec.toDOM(node), null, node.attrs);
1419
+ dom = _spec.dom;
1420
+ contentDOM = _spec.contentDOM;
1421
1421
  }
1422
1422
  if (!contentDOM && !node.isText && dom.nodeName != "BR") {
1423
1423
  if (!dom.hasAttribute("contenteditable")) dom.contentEditable = "false";
@@ -3380,7 +3380,7 @@ handlers.dragstart = function (view, _event) {
3380
3380
  dom = _serializeForClipboar2.dom,
3381
3381
  text = _serializeForClipboar2.text,
3382
3382
  slice = _serializeForClipboar2.slice;
3383
- event.dataTransfer.clearData();
3383
+ if (!event.dataTransfer.files.length || !chrome || chrome_version > 120) event.dataTransfer.clearData();
3384
3384
  event.dataTransfer.setData(brokenClipboardAPI ? "Text" : "text/html", dom.innerHTML);
3385
3385
  event.dataTransfer.effectAllowed = "copyMove";
3386
3386
  if (!brokenClipboardAPI) event.dataTransfer.setData("text/plain", text);
package/dist/index.js CHANGED
@@ -1195,7 +1195,7 @@ class MarkViewDesc extends ViewDesc {
1195
1195
  let custom = view.nodeViews[mark.type.name];
1196
1196
  let spec = custom && custom(mark, view, inline);
1197
1197
  if (!spec || !spec.dom)
1198
- spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline));
1198
+ spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline), null, mark.attrs);
1199
1199
  return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom);
1200
1200
  }
1201
1201
  parseRule() {
@@ -1267,7 +1267,8 @@ class NodeViewDesc extends ViewDesc {
1267
1267
  throw new RangeError("Text must be rendered as a DOM text node");
1268
1268
  }
1269
1269
  else if (!dom) {
1270
- ({ dom, contentDOM } = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node)));
1270
+ let spec = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node), null, node.attrs);
1271
+ ({ dom, contentDOM } = spec);
1271
1272
  }
1272
1273
  if (!contentDOM && !node.isText && dom.nodeName != "BR") { // Chrome gets confused by <br contenteditable=false>
1273
1274
  if (!dom.hasAttribute("contenteditable"))
@@ -3631,7 +3632,9 @@ handlers.dragstart = (view, _event) => {
3631
3632
  }
3632
3633
  let draggedSlice = (node || view.state.selection).content();
3633
3634
  let { dom, text, slice } = serializeForClipboard(view, draggedSlice);
3634
- event.dataTransfer.clearData();
3635
+ // Pre-120 Chrome versions clear files when calling `clearData` (#1472)
3636
+ if (!event.dataTransfer.files.length || !chrome || chrome_version > 120)
3637
+ event.dataTransfer.clearData();
3635
3638
  event.dataTransfer.setData(brokenClipboardAPI ? "Text" : "text/html", dom.innerHTML);
3636
3639
  // See https://github.com/ProseMirror/prosemirror/issues/1156
3637
3640
  event.dataTransfer.effectAllowed = "copyMove";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prosemirror-view",
3
- "version": "1.33.8",
3
+ "version": "1.33.9",
4
4
  "description": "ProseMirror's view component",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
package/src/input.ts CHANGED
@@ -677,7 +677,9 @@ handlers.dragstart = (view, _event) => {
677
677
  }
678
678
  let draggedSlice = (node || view.state.selection).content()
679
679
  let {dom, text, slice} = serializeForClipboard(view, draggedSlice)
680
- event.dataTransfer.clearData()
680
+ // Pre-120 Chrome versions clear files when calling `clearData` (#1472)
681
+ if (!event.dataTransfer.files.length || !browser.chrome || browser.chrome_version > 120)
682
+ event.dataTransfer.clearData()
681
683
  event.dataTransfer.setData(brokenClipboardAPI ? "Text" : "text/html", dom.innerHTML)
682
684
  // See https://github.com/ProseMirror/prosemirror/issues/1156
683
685
  event.dataTransfer.effectAllowed = "copyMove"
package/src/viewdesc.ts CHANGED
@@ -572,7 +572,7 @@ class MarkViewDesc extends ViewDesc {
572
572
  let custom = view.nodeViews[mark.type.name]
573
573
  let spec: {dom: HTMLElement, contentDOM?: HTMLElement} = custom && (custom as any)(mark, view, inline)
574
574
  if (!spec || !spec.dom)
575
- spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM!(mark, inline)) as any
575
+ spec = (DOMSerializer.renderSpec as any)(document, mark.type.spec.toDOM!(mark, inline), null, mark.attrs) as any
576
576
  return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom as HTMLElement)
577
577
  }
578
578
 
@@ -647,7 +647,8 @@ export class NodeViewDesc extends ViewDesc {
647
647
  if (!dom) dom = document.createTextNode(node.text!)
648
648
  else if (dom.nodeType != 3) throw new RangeError("Text must be rendered as a DOM text node")
649
649
  } else if (!dom) {
650
- ;({dom, contentDOM} = DOMSerializer.renderSpec(document, node.type.spec.toDOM!(node)))
650
+ let spec = (DOMSerializer.renderSpec as any)(document, node.type.spec.toDOM!(node), null, node.attrs)
651
+ ;({dom, contentDOM} = spec as {dom: DOMNode, contentDOM?: HTMLElement})
651
652
  }
652
653
  if (!contentDOM && !node.isText && dom.nodeName != "BR") { // Chrome gets confused by <br contenteditable=false>
653
654
  if (!(dom as HTMLElement).hasAttribute("contenteditable")) (dom as HTMLElement).contentEditable = "false"