prosemirror-view 1.27.1 → 1.27.2
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 +8 -0
- package/dist/index.cjs +25 -20
- package/dist/index.js +18 -14
- package/package.json +1 -1
- package/src/decoration.ts +4 -3
- package/src/domchange.ts +8 -9
- package/src/input.ts +8 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## 1.27.2 (2022-08-19)
|
|
2
|
+
|
|
3
|
+
### Bug fixes
|
|
4
|
+
|
|
5
|
+
Fix an issue where `DecorationSet.map`, given a mapping with multiple steps, could in some cases corrupt the decorations.
|
|
6
|
+
|
|
7
|
+
Stop calling `handleClick` when the mouse moved but failed to fire mousemove events (for example when dragging a scrollbar).
|
|
8
|
+
|
|
1
9
|
## 1.27.1 (2022-08-16)
|
|
2
10
|
|
|
3
11
|
### Bug fixes
|
package/dist/index.cjs
CHANGED
|
@@ -3556,6 +3556,7 @@ var MouseDown = function () {
|
|
|
3556
3556
|
if (!this.view.dom.contains(event.target)) return;
|
|
3557
3557
|
var pos = this.pos;
|
|
3558
3558
|
if (this.view.state.doc != this.startDoc) pos = this.view.posAtCoords(eventCoords(event));
|
|
3559
|
+
this.updateAllowDefault(event);
|
|
3559
3560
|
|
|
3560
3561
|
if (this.allowDefault || !pos) {
|
|
3561
3562
|
setSelectionOrigin(this.view, "pointer");
|
|
@@ -3571,10 +3572,15 @@ var MouseDown = function () {
|
|
|
3571
3572
|
}, {
|
|
3572
3573
|
key: "move",
|
|
3573
3574
|
value: function move(event) {
|
|
3574
|
-
|
|
3575
|
+
this.updateAllowDefault(event);
|
|
3575
3576
|
setSelectionOrigin(this.view, "pointer");
|
|
3576
3577
|
if (event.buttons == 0) this.done();
|
|
3577
3578
|
}
|
|
3579
|
+
}, {
|
|
3580
|
+
key: "updateAllowDefault",
|
|
3581
|
+
value: function updateAllowDefault(event) {
|
|
3582
|
+
if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 || Math.abs(this.event.y - event.clientY) > 4)) this.allowDefault = true;
|
|
3583
|
+
}
|
|
3578
3584
|
}]);
|
|
3579
3585
|
|
|
3580
3586
|
return MouseDown;
|
|
@@ -4416,15 +4422,15 @@ var DecorationGroup = function () {
|
|
|
4416
4422
|
function mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, options) {
|
|
4417
4423
|
var children = oldChildren.slice();
|
|
4418
4424
|
|
|
4419
|
-
var _loop4 = function _loop4(i) {
|
|
4425
|
+
var _loop4 = function _loop4(i, _baseOffset) {
|
|
4420
4426
|
var moved = 0;
|
|
4421
4427
|
mapping.maps[i].forEach(function (oldStart, oldEnd, newStart, newEnd) {
|
|
4422
4428
|
var dSize = newEnd - newStart - (oldEnd - oldStart);
|
|
4423
4429
|
|
|
4424
4430
|
for (var _i12 = 0; _i12 < children.length; _i12 += 3) {
|
|
4425
4431
|
var end = children[_i12 + 1];
|
|
4426
|
-
if (end < 0 || oldStart > end +
|
|
4427
|
-
var start = children[_i12] +
|
|
4432
|
+
if (end < 0 || oldStart > end + _baseOffset - moved) continue;
|
|
4433
|
+
var start = children[_i12] + _baseOffset - moved;
|
|
4428
4434
|
|
|
4429
4435
|
if (oldEnd >= start) {
|
|
4430
4436
|
children[_i12 + 1] = oldStart <= start ? -2 : -1;
|
|
@@ -4436,10 +4442,12 @@ function mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, op
|
|
|
4436
4442
|
|
|
4437
4443
|
moved += dSize;
|
|
4438
4444
|
});
|
|
4445
|
+
_baseOffset = mapping.maps[i].map(_baseOffset, -1);
|
|
4446
|
+
baseOffset = _baseOffset;
|
|
4439
4447
|
};
|
|
4440
4448
|
|
|
4441
|
-
for (var i = 0; i < mapping.maps.length; i++) {
|
|
4442
|
-
_loop4(i);
|
|
4449
|
+
for (var i = 0, baseOffset = oldOffset; i < mapping.maps.length; i++) {
|
|
4450
|
+
_loop4(i, baseOffset);
|
|
4443
4451
|
}
|
|
4444
4452
|
|
|
4445
4453
|
var mustRebuild = false;
|
|
@@ -5085,16 +5093,6 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
5085
5093
|
to = view.state.doc.resolve(to).after(shared + 1);
|
|
5086
5094
|
var sel = view.state.selection;
|
|
5087
5095
|
var parse = parseBetween(view, from, to);
|
|
5088
|
-
|
|
5089
|
-
if (chrome && view.cursorWrapper && parse.sel && parse.sel.anchor == view.cursorWrapper.deco.from && parse.sel.head == parse.sel.anchor) {
|
|
5090
|
-
var text = view.cursorWrapper.deco.type.toDOM.nextSibling;
|
|
5091
|
-
var size = text && text.nodeValue ? text.nodeValue.length : 1;
|
|
5092
|
-
parse.sel = {
|
|
5093
|
-
anchor: parse.sel.anchor + size,
|
|
5094
|
-
head: parse.sel.anchor + size
|
|
5095
|
-
};
|
|
5096
|
-
}
|
|
5097
|
-
|
|
5098
5096
|
var doc = view.state.doc,
|
|
5099
5097
|
compare = doc.slice(parse.from, parse.to);
|
|
5100
5098
|
var preferredPos, preferredSide;
|
|
@@ -5137,6 +5135,14 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
5137
5135
|
}
|
|
5138
5136
|
}
|
|
5139
5137
|
|
|
5138
|
+
if (chrome && view.cursorWrapper && parse.sel && parse.sel.anchor == view.cursorWrapper.deco.from && parse.sel.head == parse.sel.anchor) {
|
|
5139
|
+
var size = change.endB - change.start;
|
|
5140
|
+
parse.sel = {
|
|
5141
|
+
anchor: parse.sel.anchor + size,
|
|
5142
|
+
head: parse.sel.anchor + size
|
|
5143
|
+
};
|
|
5144
|
+
}
|
|
5145
|
+
|
|
5140
5146
|
view.input.domChangeCount++;
|
|
5141
5147
|
|
|
5142
5148
|
if (view.state.selection.from < view.state.selection.to && change.start == change.endB && view.state.selection instanceof prosemirrorState.TextSelection) {
|
|
@@ -5207,12 +5213,11 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
5207
5213
|
tr = view.state.tr;
|
|
5208
5214
|
if (markChange.type == "add") tr.addMark(chFrom, chTo, markChange.mark);else tr.removeMark(chFrom, chTo, markChange.mark);
|
|
5209
5215
|
} else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) {
|
|
5210
|
-
var
|
|
5211
|
-
|
|
5216
|
+
var text = $from.parent.textBetween($from.parentOffset, $to.parentOffset);
|
|
5212
5217
|
if (view.someProp("handleTextInput", function (f) {
|
|
5213
|
-
return f(view, chFrom, chTo,
|
|
5218
|
+
return f(view, chFrom, chTo, text);
|
|
5214
5219
|
})) return;
|
|
5215
|
-
tr = view.state.tr.insertText(
|
|
5220
|
+
tr = view.state.tr.insertText(text, chFrom, chTo);
|
|
5216
5221
|
}
|
|
5217
5222
|
}
|
|
5218
5223
|
|
package/dist/index.js
CHANGED
|
@@ -3111,6 +3111,7 @@ class MouseDown {
|
|
|
3111
3111
|
let pos = this.pos;
|
|
3112
3112
|
if (this.view.state.doc != this.startDoc)
|
|
3113
3113
|
pos = this.view.posAtCoords(eventCoords(event));
|
|
3114
|
+
this.updateAllowDefault(event);
|
|
3114
3115
|
if (this.allowDefault || !pos) {
|
|
3115
3116
|
setSelectionOrigin(this.view, "pointer");
|
|
3116
3117
|
}
|
|
@@ -3138,13 +3139,16 @@ class MouseDown {
|
|
|
3138
3139
|
}
|
|
3139
3140
|
}
|
|
3140
3141
|
move(event) {
|
|
3141
|
-
|
|
3142
|
-
Math.abs(this.event.y - event.clientY) > 4))
|
|
3143
|
-
this.allowDefault = true;
|
|
3142
|
+
this.updateAllowDefault(event);
|
|
3144
3143
|
setSelectionOrigin(this.view, "pointer");
|
|
3145
3144
|
if (event.buttons == 0)
|
|
3146
3145
|
this.done();
|
|
3147
3146
|
}
|
|
3147
|
+
updateAllowDefault(event) {
|
|
3148
|
+
if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 ||
|
|
3149
|
+
Math.abs(this.event.y - event.clientY) > 4))
|
|
3150
|
+
this.allowDefault = true;
|
|
3151
|
+
}
|
|
3148
3152
|
}
|
|
3149
3153
|
handlers.touchstart = view => {
|
|
3150
3154
|
view.input.lastTouch = Date.now();
|
|
@@ -3965,15 +3969,15 @@ function mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, op
|
|
|
3965
3969
|
let children = oldChildren.slice();
|
|
3966
3970
|
// Mark the children that are directly touched by changes, and
|
|
3967
3971
|
// move those that are after the changes.
|
|
3968
|
-
for (let i = 0; i < mapping.maps.length; i++) {
|
|
3972
|
+
for (let i = 0, baseOffset = oldOffset; i < mapping.maps.length; i++) {
|
|
3969
3973
|
let moved = 0;
|
|
3970
3974
|
mapping.maps[i].forEach((oldStart, oldEnd, newStart, newEnd) => {
|
|
3971
3975
|
let dSize = (newEnd - newStart) - (oldEnd - oldStart);
|
|
3972
3976
|
for (let i = 0; i < children.length; i += 3) {
|
|
3973
3977
|
let end = children[i + 1];
|
|
3974
|
-
if (end < 0 || oldStart > end +
|
|
3978
|
+
if (end < 0 || oldStart > end + baseOffset - moved)
|
|
3975
3979
|
continue;
|
|
3976
|
-
let start = children[i] +
|
|
3980
|
+
let start = children[i] + baseOffset - moved;
|
|
3977
3981
|
if (oldEnd >= start) {
|
|
3978
3982
|
children[i + 1] = oldStart <= start ? -2 : -1;
|
|
3979
3983
|
}
|
|
@@ -3984,6 +3988,7 @@ function mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, op
|
|
|
3984
3988
|
}
|
|
3985
3989
|
moved += dSize;
|
|
3986
3990
|
});
|
|
3991
|
+
baseOffset = mapping.maps[i].map(baseOffset, -1);
|
|
3987
3992
|
}
|
|
3988
3993
|
// Find the child nodes that still correspond to a single node,
|
|
3989
3994
|
// recursively call mapInner on them and update their positions.
|
|
@@ -4531,14 +4536,6 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
4531
4536
|
to = view.state.doc.resolve(to).after(shared + 1);
|
|
4532
4537
|
let sel = view.state.selection;
|
|
4533
4538
|
let parse = parseBetween(view, from, to);
|
|
4534
|
-
// Chrome sometimes leaves the cursor before the inserted text when
|
|
4535
|
-
// composing after a cursor wrapper. This moves it forward.
|
|
4536
|
-
if (chrome && view.cursorWrapper && parse.sel && parse.sel.anchor == view.cursorWrapper.deco.from &&
|
|
4537
|
-
parse.sel.head == parse.sel.anchor) {
|
|
4538
|
-
let text = view.cursorWrapper.deco.type.toDOM.nextSibling;
|
|
4539
|
-
let size = text && text.nodeValue ? text.nodeValue.length : 1;
|
|
4540
|
-
parse.sel = { anchor: parse.sel.anchor + size, head: parse.sel.anchor + size };
|
|
4541
|
-
}
|
|
4542
4539
|
let doc = view.state.doc, compare = doc.slice(parse.from, parse.to);
|
|
4543
4540
|
let preferredPos, preferredSide;
|
|
4544
4541
|
// Prefer anchoring to end when Backspace is pressed
|
|
@@ -4573,6 +4570,13 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
4573
4570
|
return;
|
|
4574
4571
|
}
|
|
4575
4572
|
}
|
|
4573
|
+
// Chrome sometimes leaves the cursor before the inserted text when
|
|
4574
|
+
// composing after a cursor wrapper. This moves it forward.
|
|
4575
|
+
if (chrome && view.cursorWrapper && parse.sel && parse.sel.anchor == view.cursorWrapper.deco.from &&
|
|
4576
|
+
parse.sel.head == parse.sel.anchor) {
|
|
4577
|
+
let size = change.endB - change.start;
|
|
4578
|
+
parse.sel = { anchor: parse.sel.anchor + size, head: parse.sel.anchor + size };
|
|
4579
|
+
}
|
|
4576
4580
|
view.input.domChangeCount++;
|
|
4577
4581
|
// Handle the case where overwriting a selection by typing matches
|
|
4578
4582
|
// the start or end of the selected content, creating a change
|
package/package.json
CHANGED
package/src/decoration.ts
CHANGED
|
@@ -550,14 +550,14 @@ function mapChildren(
|
|
|
550
550
|
|
|
551
551
|
// Mark the children that are directly touched by changes, and
|
|
552
552
|
// move those that are after the changes.
|
|
553
|
-
for (let i = 0; i < mapping.maps.length; i++) {
|
|
553
|
+
for (let i = 0, baseOffset = oldOffset; i < mapping.maps.length; i++) {
|
|
554
554
|
let moved = 0
|
|
555
555
|
mapping.maps[i].forEach((oldStart: number, oldEnd: number, newStart: number, newEnd: number) => {
|
|
556
556
|
let dSize = (newEnd - newStart) - (oldEnd - oldStart)
|
|
557
557
|
for (let i = 0; i < children.length; i += 3) {
|
|
558
558
|
let end = children[i + 1] as number
|
|
559
|
-
if (end < 0 || oldStart > end +
|
|
560
|
-
let start = (children[i] as number) +
|
|
559
|
+
if (end < 0 || oldStart > end + baseOffset - moved) continue
|
|
560
|
+
let start = (children[i] as number) + baseOffset - moved
|
|
561
561
|
if (oldEnd >= start) {
|
|
562
562
|
children[i + 1] = oldStart <= start ? -2 : -1
|
|
563
563
|
} else if (newStart >= offset && dSize) {
|
|
@@ -567,6 +567,7 @@ function mapChildren(
|
|
|
567
567
|
}
|
|
568
568
|
moved += dSize
|
|
569
569
|
})
|
|
570
|
+
baseOffset = mapping.maps[i].map(baseOffset, -1)
|
|
570
571
|
}
|
|
571
572
|
|
|
572
573
|
// Find the child nodes that still correspond to a single node,
|
package/src/domchange.ts
CHANGED
|
@@ -97,15 +97,6 @@ export function readDOMChange(view: EditorView, from: number, to: number, typeOv
|
|
|
97
97
|
let sel = view.state.selection
|
|
98
98
|
let parse = parseBetween(view, from, to)
|
|
99
99
|
|
|
100
|
-
// Chrome sometimes leaves the cursor before the inserted text when
|
|
101
|
-
// composing after a cursor wrapper. This moves it forward.
|
|
102
|
-
if (browser.chrome && view.cursorWrapper && parse.sel && parse.sel.anchor == view.cursorWrapper.deco.from &&
|
|
103
|
-
parse.sel.head == parse.sel.anchor) {
|
|
104
|
-
let text = (view.cursorWrapper.deco.type as any).toDOM.nextSibling as DOMNode
|
|
105
|
-
let size = text && text.nodeValue ? text.nodeValue.length : 1
|
|
106
|
-
parse.sel = {anchor: parse.sel.anchor + size, head: parse.sel.anchor + size}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
100
|
let doc = view.state.doc, compare = doc.slice(parse.from, parse.to)
|
|
110
101
|
let preferredPos, preferredSide: "start" | "end"
|
|
111
102
|
// Prefer anchoring to end when Backspace is pressed
|
|
@@ -138,6 +129,14 @@ export function readDOMChange(view: EditorView, from: number, to: number, typeOv
|
|
|
138
129
|
return
|
|
139
130
|
}
|
|
140
131
|
}
|
|
132
|
+
// Chrome sometimes leaves the cursor before the inserted text when
|
|
133
|
+
// composing after a cursor wrapper. This moves it forward.
|
|
134
|
+
if (browser.chrome && view.cursorWrapper && parse.sel && parse.sel.anchor == view.cursorWrapper.deco.from &&
|
|
135
|
+
parse.sel.head == parse.sel.anchor) {
|
|
136
|
+
let size = change.endB - change.start
|
|
137
|
+
parse.sel = {anchor: parse.sel.anchor + size, head: parse.sel.anchor + size}
|
|
138
|
+
}
|
|
139
|
+
|
|
141
140
|
view.input.domChangeCount++
|
|
142
141
|
// Handle the case where overwriting a selection by typing matches
|
|
143
142
|
// the start or end of the selected content, creating a change
|
package/src/input.ts
CHANGED
|
@@ -372,6 +372,7 @@ class MouseDown {
|
|
|
372
372
|
let pos: {pos: number, inside: number} | null = this.pos
|
|
373
373
|
if (this.view.state.doc != this.startDoc) pos = this.view.posAtCoords(eventCoords(event))
|
|
374
374
|
|
|
375
|
+
this.updateAllowDefault(event)
|
|
375
376
|
if (this.allowDefault || !pos) {
|
|
376
377
|
setSelectionOrigin(this.view, "pointer")
|
|
377
378
|
} else if (handleSingleClick(this.view, pos.pos, pos.inside, event, this.selectNode)) {
|
|
@@ -398,12 +399,16 @@ class MouseDown {
|
|
|
398
399
|
}
|
|
399
400
|
|
|
400
401
|
move(event: MouseEvent) {
|
|
401
|
-
|
|
402
|
-
Math.abs(this.event.y - event.clientY) > 4))
|
|
403
|
-
this.allowDefault = true
|
|
402
|
+
this.updateAllowDefault(event)
|
|
404
403
|
setSelectionOrigin(this.view, "pointer")
|
|
405
404
|
if (event.buttons == 0) this.done()
|
|
406
405
|
}
|
|
406
|
+
|
|
407
|
+
updateAllowDefault(event: MouseEvent) {
|
|
408
|
+
if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 ||
|
|
409
|
+
Math.abs(this.event.y - event.clientY) > 4))
|
|
410
|
+
this.allowDefault = true
|
|
411
|
+
}
|
|
407
412
|
}
|
|
408
413
|
|
|
409
414
|
handlers.touchstart = view => {
|