prosemirror-view 1.41.5 → 1.41.7
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 +14 -0
- package/dist/index.cjs +33 -27
- package/dist/index.js +18 -14
- package/package.json +1 -1
- package/src/domobserver.ts +14 -10
- package/src/index.ts +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## 1.41.7 (2026-03-18)
|
|
2
|
+
|
|
3
|
+
### Bug fixes
|
|
4
|
+
|
|
5
|
+
Work around a Chrome bug where it sometimes inserts a random `<br>` node when you press backspace before a widget.
|
|
6
|
+
|
|
7
|
+
Fix a crash that could happen when deleting content during a node drag.
|
|
8
|
+
|
|
9
|
+
## 1.41.6 (2026-02-06)
|
|
10
|
+
|
|
11
|
+
### Bug fixes
|
|
12
|
+
|
|
13
|
+
Fix an issue where backspacing content before a flexbox or grid styled widget would insert a bogus line break on Firefox.
|
|
14
|
+
|
|
1
15
|
## 1.41.5 (2026-01-14)
|
|
2
16
|
|
|
3
17
|
### Bug fixes
|
package/dist/index.cjs
CHANGED
|
@@ -4403,7 +4403,31 @@ var DOMObserver = function () {
|
|
|
4403
4403
|
}
|
|
4404
4404
|
}
|
|
4405
4405
|
}
|
|
4406
|
-
if (
|
|
4406
|
+
if (added.some(function (n) {
|
|
4407
|
+
return n.nodeName == "BR";
|
|
4408
|
+
}) && (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {
|
|
4409
|
+
var _iterator3 = _createForOfIteratorHelper(added),
|
|
4410
|
+
_step3;
|
|
4411
|
+
try {
|
|
4412
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
4413
|
+
var node = _step3.value;
|
|
4414
|
+
if (node.nodeName == "BR" && node.parentNode) {
|
|
4415
|
+
var after = node.nextSibling;
|
|
4416
|
+
while (after && after.nodeType == 1) {
|
|
4417
|
+
if (after.contentEditable == "false") {
|
|
4418
|
+
node.parentNode.removeChild(node);
|
|
4419
|
+
break;
|
|
4420
|
+
}
|
|
4421
|
+
after = after.firstChild;
|
|
4422
|
+
}
|
|
4423
|
+
}
|
|
4424
|
+
}
|
|
4425
|
+
} catch (err) {
|
|
4426
|
+
_iterator3.e(err);
|
|
4427
|
+
} finally {
|
|
4428
|
+
_iterator3.f();
|
|
4429
|
+
}
|
|
4430
|
+
} else if (gecko && added.length) {
|
|
4407
4431
|
var brs = added.filter(function (n) {
|
|
4408
4432
|
return n.nodeName == "BR";
|
|
4409
4433
|
});
|
|
@@ -4414,38 +4438,20 @@ var DOMObserver = function () {
|
|
|
4414
4438
|
if (a.parentNode && a.parentNode.parentNode == b.parentNode) b.remove();else a.remove();
|
|
4415
4439
|
} else {
|
|
4416
4440
|
var focusNode = this.currentSelection.focusNode;
|
|
4417
|
-
var
|
|
4418
|
-
|
|
4441
|
+
var _iterator4 = _createForOfIteratorHelper(brs),
|
|
4442
|
+
_step4;
|
|
4419
4443
|
try {
|
|
4420
|
-
for (
|
|
4421
|
-
var br =
|
|
4444
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
4445
|
+
var br = _step4.value;
|
|
4422
4446
|
var parent = br.parentNode;
|
|
4423
4447
|
if (parent && parent.nodeName == "LI" && (!focusNode || blockParent(view, focusNode) != parent)) br.remove();
|
|
4424
4448
|
}
|
|
4425
4449
|
} catch (err) {
|
|
4426
|
-
|
|
4450
|
+
_iterator4.e(err);
|
|
4427
4451
|
} finally {
|
|
4428
|
-
|
|
4452
|
+
_iterator4.f();
|
|
4429
4453
|
}
|
|
4430
4454
|
}
|
|
4431
|
-
} else if ((chrome || safari) && added.some(function (n) {
|
|
4432
|
-
return n.nodeName == "BR";
|
|
4433
|
-
}) && (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {
|
|
4434
|
-
var _iterator4 = _createForOfIteratorHelper(added),
|
|
4435
|
-
_step4;
|
|
4436
|
-
try {
|
|
4437
|
-
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
4438
|
-
var node = _step4.value;
|
|
4439
|
-
if (node.nodeName == "BR" && node.parentNode) {
|
|
4440
|
-
var after = node.nextSibling;
|
|
4441
|
-
if (after && after.nodeType == 1 && after.contentEditable == "false") node.parentNode.removeChild(node);
|
|
4442
|
-
}
|
|
4443
|
-
}
|
|
4444
|
-
} catch (err) {
|
|
4445
|
-
_iterator4.e(err);
|
|
4446
|
-
} finally {
|
|
4447
|
-
_iterator4.f();
|
|
4448
|
-
}
|
|
4449
4455
|
}
|
|
4450
4456
|
var readSel = null;
|
|
4451
4457
|
if (from < 0 && newSel && view.input.lastFocus > Date.now() - 200 && Math.max(view.input.lastTouch, view.input.lastClick.time) < Date.now() - 300 && selectionCollapsed(sel) && (readSel = selectionFromDOM(view)) && readSel.eq(prosemirrorState.Selection.near(view.state.doc.resolve(0), 1))) {
|
|
@@ -5129,11 +5135,11 @@ var EditorView = function () {
|
|
|
5129
5135
|
value: function updateDraggedNode(dragging, prev) {
|
|
5130
5136
|
var sel = dragging.node,
|
|
5131
5137
|
found = -1;
|
|
5132
|
-
if (this.state.doc.nodeAt(sel.from) == sel.node) {
|
|
5138
|
+
if (sel.from < this.state.doc.content.size && this.state.doc.nodeAt(sel.from) == sel.node) {
|
|
5133
5139
|
found = sel.from;
|
|
5134
5140
|
} else {
|
|
5135
5141
|
var movedPos = sel.from + (this.state.doc.content.size - prev.doc.content.size);
|
|
5136
|
-
var moved = movedPos > 0 && this.state.doc.nodeAt(movedPos);
|
|
5142
|
+
var moved = movedPos > 0 && movedPos < this.state.doc.content.size && this.state.doc.nodeAt(movedPos);
|
|
5137
5143
|
if (moved == sel.node) found = movedPos;
|
|
5138
5144
|
}
|
|
5139
5145
|
this.dragging = new Dragging(dragging.slice, dragging.move, found < 0 ? undefined : prosemirrorState.NodeSelection.create(this.state.doc, found));
|
package/dist/index.js
CHANGED
|
@@ -4724,7 +4724,22 @@ class DOMObserver {
|
|
|
4724
4724
|
}
|
|
4725
4725
|
}
|
|
4726
4726
|
}
|
|
4727
|
-
if (
|
|
4727
|
+
if (added.some(n => n.nodeName == "BR") && (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {
|
|
4728
|
+
// Browsers sometimes insert a bogus break node if you
|
|
4729
|
+
// backspace out the last bit of text before an inline-flex node (#1552)
|
|
4730
|
+
for (let node of added)
|
|
4731
|
+
if (node.nodeName == "BR" && node.parentNode) {
|
|
4732
|
+
let after = node.nextSibling;
|
|
4733
|
+
while (after && after.nodeType == 1) {
|
|
4734
|
+
if (after.contentEditable == "false") {
|
|
4735
|
+
node.parentNode.removeChild(node);
|
|
4736
|
+
break;
|
|
4737
|
+
}
|
|
4738
|
+
after = after.firstChild;
|
|
4739
|
+
}
|
|
4740
|
+
}
|
|
4741
|
+
}
|
|
4742
|
+
else if (gecko && added.length) {
|
|
4728
4743
|
let brs = added.filter(n => n.nodeName == "BR");
|
|
4729
4744
|
if (brs.length == 2) {
|
|
4730
4745
|
let [a, b] = brs;
|
|
@@ -4742,17 +4757,6 @@ class DOMObserver {
|
|
|
4742
4757
|
}
|
|
4743
4758
|
}
|
|
4744
4759
|
}
|
|
4745
|
-
else if ((chrome || safari) && added.some(n => n.nodeName == "BR") &&
|
|
4746
|
-
(view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {
|
|
4747
|
-
// Chrome/Safari sometimes insert a bogus break node if you
|
|
4748
|
-
// backspace out the last bit of text before an inline-flex node (#1552)
|
|
4749
|
-
for (let node of added)
|
|
4750
|
-
if (node.nodeName == "BR" && node.parentNode) {
|
|
4751
|
-
let after = node.nextSibling;
|
|
4752
|
-
if (after && after.nodeType == 1 && after.contentEditable == "false")
|
|
4753
|
-
node.parentNode.removeChild(node);
|
|
4754
|
-
}
|
|
4755
|
-
}
|
|
4756
4760
|
let readSel = null;
|
|
4757
4761
|
// If it looks like the browser has reset the selection to the
|
|
4758
4762
|
// start of the document after focus, restore the selection from
|
|
@@ -5579,12 +5583,12 @@ class EditorView {
|
|
|
5579
5583
|
}
|
|
5580
5584
|
updateDraggedNode(dragging, prev) {
|
|
5581
5585
|
let sel = dragging.node, found = -1;
|
|
5582
|
-
if (this.state.doc.nodeAt(sel.from) == sel.node) {
|
|
5586
|
+
if (sel.from < this.state.doc.content.size && this.state.doc.nodeAt(sel.from) == sel.node) {
|
|
5583
5587
|
found = sel.from;
|
|
5584
5588
|
}
|
|
5585
5589
|
else {
|
|
5586
5590
|
let movedPos = sel.from + (this.state.doc.content.size - prev.doc.content.size);
|
|
5587
|
-
let moved = movedPos > 0 && this.state.doc.nodeAt(movedPos);
|
|
5591
|
+
let moved = movedPos > 0 && movedPos < this.state.doc.content.size && this.state.doc.nodeAt(movedPos);
|
|
5588
5592
|
if (moved == sel.node)
|
|
5589
5593
|
found = movedPos;
|
|
5590
5594
|
}
|
package/package.json
CHANGED
package/src/domobserver.ts
CHANGED
|
@@ -192,7 +192,20 @@ export class DOMObserver {
|
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
if (
|
|
195
|
+
if (added.some(n => n.nodeName == "BR") && (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {
|
|
196
|
+
// Browsers sometimes insert a bogus break node if you
|
|
197
|
+
// backspace out the last bit of text before an inline-flex node (#1552)
|
|
198
|
+
for (let node of added) if (node.nodeName == "BR" && node.parentNode) {
|
|
199
|
+
let after = node.nextSibling
|
|
200
|
+
while (after && after.nodeType == 1) {
|
|
201
|
+
if ((after as HTMLElement).contentEditable == "false") {
|
|
202
|
+
node.parentNode.removeChild(node)
|
|
203
|
+
break
|
|
204
|
+
}
|
|
205
|
+
after = after.firstChild
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
} else if (browser.gecko && added.length) {
|
|
196
209
|
let brs = added.filter(n => n.nodeName == "BR") as HTMLElement[]
|
|
197
210
|
if (brs.length == 2) {
|
|
198
211
|
let [a, b] = brs
|
|
@@ -206,15 +219,6 @@ export class DOMObserver {
|
|
|
206
219
|
br.remove()
|
|
207
220
|
}
|
|
208
221
|
}
|
|
209
|
-
} else if ((browser.chrome || browser.safari) && added.some(n => n.nodeName == "BR") &&
|
|
210
|
-
(view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {
|
|
211
|
-
// Chrome/Safari sometimes insert a bogus break node if you
|
|
212
|
-
// backspace out the last bit of text before an inline-flex node (#1552)
|
|
213
|
-
for (let node of added) if (node.nodeName == "BR" && node.parentNode) {
|
|
214
|
-
let after = node.nextSibling
|
|
215
|
-
if (after && after.nodeType == 1 && (after as HTMLElement).contentEditable == "false")
|
|
216
|
-
node.parentNode.removeChild(node)
|
|
217
|
-
}
|
|
218
222
|
}
|
|
219
223
|
|
|
220
224
|
let readSel: Selection | null = null
|
package/src/index.ts
CHANGED
|
@@ -274,11 +274,11 @@ export class EditorView {
|
|
|
274
274
|
|
|
275
275
|
private updateDraggedNode(dragging: Dragging, prev: EditorState) {
|
|
276
276
|
let sel = dragging.node!, found = -1
|
|
277
|
-
if (this.state.doc.nodeAt(sel.from) == sel.node) {
|
|
277
|
+
if (sel.from < this.state.doc.content.size && this.state.doc.nodeAt(sel.from) == sel.node) {
|
|
278
278
|
found = sel.from
|
|
279
279
|
} else {
|
|
280
280
|
let movedPos = sel.from + (this.state.doc.content.size - prev.doc.content.size)
|
|
281
|
-
let moved = movedPos > 0 && this.state.doc.nodeAt(movedPos)
|
|
281
|
+
let moved = movedPos > 0 && movedPos < this.state.doc.content.size && this.state.doc.nodeAt(movedPos)
|
|
282
282
|
if (moved == sel.node) found = movedPos
|
|
283
283
|
}
|
|
284
284
|
this.dragging = new Dragging(dragging.slice, dragging.move,
|